diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 000000000..3186f3f07 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/agoric/a3p-integration/.gitignore b/agoric/a3p-integration/.gitignore new file mode 100644 index 000000000..8a1628048 --- /dev/null +++ b/agoric/a3p-integration/.gitignore @@ -0,0 +1,21 @@ +# build in CI +Dockerfile +docker-bake.* +upgrade-test-scripts + +# Yarn (https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored) +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions +# same for each proposal, an independent project +proposals/*/.pnp.* +proposals/*/.yarn/* +!proposals/*/.yarn/patches +!proposals/*/.yarn/plugins +!proposals/*/.yarn/releases +!proposals/*/.yarn/sdks +!proposals/*/.yarn/versions diff --git a/agoric/a3p-integration/.yarnrc.yml b/agoric/a3p-integration/.yarnrc.yml new file mode 100644 index 000000000..3186f3f07 --- /dev/null +++ b/agoric/a3p-integration/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/agoric/a3p-integration/README.md b/agoric/a3p-integration/README.md new file mode 100644 index 000000000..5318bbba7 --- /dev/null +++ b/agoric/a3p-integration/README.md @@ -0,0 +1,240 @@ +# Overview + +This directory contains an end-to-end integration test executed against a synthetic agoric-3 chain. The test performs a chain software upgrade to the software contained in the enclosing `agoric-sdk` repository, then executes a series of functional tests verifying the upgrade accomplished its goal. + +# How to run + +The synthetic chain testing infrastructure relies on Docker, Docker Buildx extended build capabilities, and the experimental Buildx Bake extension. Make sure you have a recent Docker engine installed for your system. + +## Install test dependencies + +This directory hierarchy, while it contains packages, is not part of the `agoric-sdk` root Yarn project. This is to isolate it from tooling that expects a public package published to NPM. For example, it doesn't run in the CI jobs for the `/packages` packages. + +The end-to-end integration test relies on the [@agoric/synthetic-chain](https://www.npmjs.com/package/@agoric/synthetic-chain) test tool (published to NPM from the [`agoric-3-proposals` repository](https://github.com/Agoric/agoric-3-proposals/tree/main/packages/synthetic-chain)), and uses Yarn 4 (configured through corepack). + +First time setup (or after updates to `@agoric/synthetic-chain`): +```sh +corepack enable +yarn install +``` + +## Run the integration test + +The `@agoric/synthetic-chain` test runner is invoked through NPM scripts. + +To build the agoric-3 synthetic chain images with the unreleased chain software upgrade: +```sh +yarn build +``` + +To run the unit tests: +```sh +yarn test +# or for an interactive session into a given proposal package +yarn test --debug -m "proposal-name" +``` + +# Proposal structure + +## Package layering + +Proposals are packages under the `/a3p-integration/proposals` folder, and are +separate from each other, from the `a3p-integration` test environment, and from +the enclosing `agoric-sdk` repository. They run inside the docker image, and +cannot access SDK code. Their names must be lower case. + +In the release branches, the end-to-end `a3p-integration` test usually only has +a single proposal package named `a:upgrade-NN`, which performs a chain software +upgrade proposal to the corresponding upgrade plan. In the `master` branch, the +next release's changes are staged in `n:upgrade-next`. There may also be +core-eval proposal packages, either before or after the chain software upgrade +proposal. + +The details of a proposal package are configured through the `agoricProposal` field of its `package.json`. + +More details about synthetic-chain proposals can be found in the [`agoric-3-proposals` README](https://github.com/Agoric/agoric-3-proposals/blob/main/README.md) + +### Chain software upgrade proposal + +For a chain software upgrade proposal, the `type` is `"Software Upgrade Proposal"`, and the relevant fields are `sdkImageTag`, `planName` and `upgradeInfo`. + +- `sdkImageTag` is the docker image tag to use that contains the upgraded chain software. It has a value of `unreleased`, which is the tag for the image that is built from the enclosing `agoric-sdk` repository. + +- `planName` is the "upgrade name" included in the proposal which must match the value in the upgraded chain software. In the `master` branch its value is `UNRELEASED_A3P_INTEGRATION`. In the release branches, it's `agoric-upgrade-NN`. + +- `upgradeInfo` contains other details passed to the governance proposal. In + particular, it can have a `coreProposals` field which instructs the chain + software to run other core proposals in addition to the one configured in the + chain software's upgrade handler (see `CoreProposalSteps` in + `/golang/cosmos/app/upgrade.go`). + - See **Generating core-eval submissions** below for details. + +For an (evolving) example, see `n:upgrade-next` in master. + +### Core-eval proposal + +The `type` of a core-eval proposal is `"/agoric.swingset.CoreEvalProposal"`. By +default, the submission in the subdir `submission` is evaluated. The proposal +package can override this by providing an `eval.sh` that is executed instead. +See [run_eval.sh](https://github.com/Agoric/agoric-3-proposals/blob/main/packages/synthetic-chain/public/upgrade-test-scripts/run_eval.sh) + +If the proposal is planned to be executed after the chain software upgrade, and +the source of the proposal is in `agoric-sdk`, don't commit the built proposal +because CI willl test that instead of the most recent code. + + +Instead, generate it automatically in each test run. Since proposals cannot +access SDK code, a script can be used to generate the `submission` content. +Until there is [native support for build scripts in the `synthetic-chain` +tool](https://github.com/Agoric/agoric-3-proposals/issues/87), +`a3p-integration`'s `build:submissions` step invokes +`build-all-submissions.sh` in `agoric-sdk` before starting the upgrade test. + +For core eval proposals executing before the chain software upgrade, the `submission` should be checked in, since bundles built from newer software may not be compatible with older chains. + +For an example, see https://github.com/Agoric/agoric-sdk/pull/8907 + +## Hooks + + + +Each proposal must have a `test.sh` file, which is executed during a `synthetic-chain test` invocation. In general this simply executes `yarn ava` to run any `*.test.js`. This step can perform any chain action, including submitting bespoke core-evals. + +A proposal can also have a `use.sh` file to perform any persisted action after the proposal has passed. The effects of these actions can be used in the test phase, or in subsequent proposal packages. + +A chain software upgrade proposal can also have a `prepare.sh` file which is executed before the proposal is submitted to the chain. The actions taken are similarly persisted. + +Instead of relying on an automatic `submission` folder, a core-eval proposal can define an `eval.sh` file to generate and submit the core eval (or perform any standalone actions). + +# Build details + +In the `ghcr.io/agoric/agoric-sdk` image the filesystem is: +``` +/usr/src/agoric-sdk +``` + +With the proposals layered on top of the `agoric-sdk` image, the filesystem adds (for example): +``` +/usr/src/proposals/n:upgrade-next +/usr/src/proposals/z:acceptance +``` + +In agoric-sdk CI and development, we want the proposals to use the versions of the packages in the agoric-sdk source tree. To accomplish this we use `yarn link`. In Yarn 4 (berry) it uses a `portal` protocol to link to another Yarn project on the filesystem. One kink is that in development the command would, +``` +yarn link --relative ../../.. --all +``` +Which configures the package.json resolutions to find agoric-sdk three levels up. + +But in CI the proposals aren't nested under agoric-sdk and the command would be, +``` +yarn link --relative ../../agoric-sdk --all +``` + +To give a consistent location, `a3p-integration` has a symlink to the `agoric-sdk` project where the proposals expect it in the Docker fileystem. (I.e. treating `a3p-integration` as `/usr/src` of the Docker image.) + + +The `yarn build` script automates 3 steps: +- Building the `unreleased` SDK image +- Generating the `submission` folders in core proposal packages +- Building the synthetic-chain images using the proposals + + +## Generate a docker image with the `agoric-sdk` chain software + +The chain software upgrade proposal contained in this end-to-end integration test performs an upgrade of the agoric-3 synthetic chain to an `UNRELEASED_A3P_INTEGRATION` plan name (or the corresponding upgrade plan name for release branches). It loads the docker image `ghcr.io/agoric/agoric-sdk:unreleased` for the software implementing that upgrade (both in the `master` branch or in release branches). + +The upgrade handler is implemented by the code in the enclosing `agoric-sdk` repository. After any change to the chain software or vat code upgraded through core proposals, the image must be regenerated. This is automatically done by the `build:sdk` script, but can also be performed manually using: + +```sh +make -C ../packages/deployment docker-build-sdk +``` + +## Generating core-eval submissions + +In a3p-integration, many core-eval proposals' `submission` content has to be +generated from the local `agoric-sdk`, and must be rebuilt every time there is a +change. The `scripts/build-all-submissions.sh` script contains commands to +generate the core-eval content and move it to the expected proposal package's +submission directory. The generation is executed as part of `a3p-integration`'s +`build:submissions` step. Each proposal that requires such a build step should +add an entry to the `sdk-generate` array in the `agoricProposal` section of +`package.json`. + +Submissions that don't need to pass in options or generate references to source +bundles can be written directly in a `foo-submission` subdirectory of the +proposal. These would include a .js script, accompanied by a similarly-named +-permit.json file (which can contain just `true` or a complete permission +manifest.) The submission should return the script, which can take +BootstrapPowers as a parameter. + +If the submission does require bundle references or other options to be +provided, it should be written as two parts: a core eval (in one of the +`.../proposals` directories) and a builder for it (under `.../builders/scripts`). + +The `build-all-submissions.sh` script reads instructions from +`agoricProposal.sdk-generate` in `package.json`. That field contains a list of +strings, each of which describes a single submission. If there is only one +submission, it can use the default directory name `submission` by specifying +only the name of the script file in `builders/scripts/vars`: +```json +"sdk-generate": ["test-localchain"], +``` +If there are multiple submissions, each entry has to specify the script name and +a distinct directory name. +```json +"sdk-generate": [ + "probe-zcf-bundle probe-submission", + "updatePriceFeeds priceFeed-submission", + "add-auction newAuction-submission" +], +``` +A third argument can be used to provide additional parameters to the +build script. +```json +"sdk-generate": [ + "inter-protocol/updatePriceFeeds.js submission/main main", +], +``` + +## Building synthetic-chain images + +Synthetic-chain tests run inside generated proposal Docker images. If any changes are made to the proposals or their tests, these images must be rebuilt. This is performed during the `build:synthetic-chain` step. + +# Troubleshooting + +## no match for platform + +If you get an error like this, +``` +ERROR: failed to solve: ghcr.io/agoric/agoric-3-proposals:latest: no match for platform in manifest sha256:14e22b6f75b568a5d32f7a74b701d978b7656ba4d33e2ec7ad2ff0611e7c2530: not found +``` +it's because you're on an architecture for which we don't generate an image. We currently generate `linux/amd64` and `linux/arm64` images. + +You can build the `latest` image locally: + +```sh +cd agoric-3-proposals +yarn install +yarn synthetic-chain build + +# build the default entrypoint and tag it so the `append` command finds it +docker buildx build --tag ghcr.io/agoric/agoric-3-proposals:latest . +``` + +## missing "unreleased" image + +If you get an error like, +``` +ERROR: failed to solve: ghcr.io/agoric/agoric-sdk:unreleased: ghcr.io/agoric/agoric-sdk:unreleased: not found +``` + +That's because you didn't create an image from the local `agoric-sdk`. Run `yarn build:sdk`. + +## UPGRADE NEEDED + +If you get an error like, +``` +panic: UPGRADE "UNRELEASED_A3P_INTEGRATION" NEEDED at height: 1101: {"coreProposals":["@agoric/builders/scripts/vats/init-network.js"]} +``` + +Means your SDK image is different than the one expected by the upgrade proposal. To build the correct image, run `yarn build:sdk`. diff --git a/agoric/a3p-integration/debug-current.sh b/agoric/a3p-integration/debug-current.sh new file mode 100755 index 000000000..93a15440a --- /dev/null +++ b/agoric/a3p-integration/debug-current.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +# Convenience script to debug the current proposal being worked on. + +scripts/build-submission.sh proposals/z:acceptance testing/start-valueVow.js start-valueVow +scripts/build-submission.sh proposals/z:acceptance testing/restart-valueVow.js restart-valueVow + +yarn test -m acceptance --debug diff --git a/agoric/a3p-integration/package.json b/agoric/a3p-integration/package.json new file mode 100644 index 000000000..617a68699 --- /dev/null +++ b/agoric/a3p-integration/package.json @@ -0,0 +1,21 @@ +{ + "private": true, + "agoricSyntheticChain": { + "fromTag": "use-upgrade-17" + }, + "scripts": { + "build": "yarn run build:sdk && yarn run build:submissions && yarn run build:synthetic-chain", + "build:sdk": "make -C /Users/jorgelopes/Projects/Agoric/agoric-sdk/packages/deployment docker-build-sdk", + "build:submissions": "scripts/build-all-submissions.sh", + "build:synthetic-chain": "yarn synthetic-chain build", + "lint": "../node_modules/.bin/eslint proposals", + "test": "yarn synthetic-chain test", + "doctor": "yarn synthetic-chain doctor" + }, + "dependencies": { + "@agoric/synthetic-chain": "^0.3.0", + "@types/better-sqlite3": "^7.6.11" + }, + "packageManager": "yarn@4.5.1", + "license": "Apache-2.0" +} diff --git a/agoric/a3p-integration/proposals/README.md b/agoric/a3p-integration/proposals/README.md new file mode 100644 index 000000000..5e8c63d69 --- /dev/null +++ b/agoric/a3p-integration/proposals/README.md @@ -0,0 +1,102 @@ +# Draft proposals + +## How to publish a proposal once approved + +`a3p-integration` holds draft proposals to test in agoric-sdk that they perform +as expected. Once a proposal has been approved by BLD stakers it executes on +chain and the proposal is no longer a draft. That requires moving it to the +agoric-3-proposals repo to become part of the `latest` image. + +Steps: +1. Get the upgrade branch +2. Build the submissions +3. Migrate the proposal +4. Update the `latest` image + +### Get the proposal's branch + +We need the actual proposal that was sent to stakers. In the case of upgrades +(chain-halting) it will be a dedicated release branch. (E.g. +https://github.com/Agoric/agoric-sdk/tree/dev-upgrade-16/). If you're +publishing an "upgrade" proposal and it's called `n:upgrade-next`, keep looking; +that is only a draft. + +### Build the submissions + +The proposals use `sdk-generate` to ensure that CI is always testing the latest +version. But to publish we need a fixed version, to match the software upgrade +that the BLD stakers decided on. + +To build that artifact, +``` +cd a3p-integration +scripts/build-all-submissions.sh +``` + +It's best practice for each output directory to end in `-submission` to make the +migration simpler. For example, +``` + "sdk-generate": [ + "vats/probe-zcf-bundle.js probe-submission", + "vats/test-localchain.js localchaintest-submission" + ], +``` + +### Migrate the proposal + +Figure out the serial number of the proposal that was voted on. Keep a link to +it to reference. + +In agoric-3-proposals, make a new `proposals/NN:PROPOSAL_NAME` directory where +NN is the proposal's serial number. If the proposal is a chain-halting upgrade +then it would be `NN:upgrade-KK` where KK is the agoric-sdk upgrade handler +serial number. + +Copy the contents of the agoric-sdk proposal to this new directory. + +Verify that `planName` references the go upgrade handler. + +Remove `sdk-generate` from package.json (because the files are already generated +and will be checked in with the PR). + +Change `releaseNotes` to reference that actual release notes. [For example](https://github.com/Agoric/agoric-3-proposals/blob/c70cf299b0efc3758991639a03b92cc33867a5bf/proposals/65%3Aupgrade-13/package.json#L3), +``` + "releaseNotes": "https://github.com/Agoric/agoric-sdk/releases/tag/agoric-upgrade-13", +``` + +Change `sdkImageTag` to the number mentioned in the release notes (search for +`ghcr.io/agoric/agoric-sdk:`) [For example](https://github.com/Agoric/agoric-3-proposals/blob/c70cf299b0efc3758991639a03b92cc33867a5bf/proposals/65%3Aupgrade-13/package.json#L3C1-L4C1), +``` + "sdkImageTag": "39", +``` + +# Update the `latest` image + +Once you have the new proposal in agoric-3-propals, send a PR to merge it into +the repo. The PR's CI will test it and once the PR is merged it will update the +`latest` image. + +## How to revise this directory after + +Once a new proposal is merged into agoric-3-proposals, take the proposal name +(the part after the colon) and use it in the fromTag value in a3p-integration's +package.json. For example, `a:my-proposal` becomes `"fromTag": "use-my-proposal"`. + +The `agoricSyntheticChain.fromTag` should generally work with a value of 'latest', +but that causes problems whenever agoric-3-proposals publishes a new image with changes +that a3p-integration doesn't yet expect. + +So we specify a particular *use* image. E.g. `use-upgrade-16`. +See https://ghcr.io/agoric/agoric-3-proposals for the available tags. + +If you're changing the fromTag to a a new SDK version (e.g. a new chain-halting +upgrade) then you also need to revise the `upgrade-next` proposal to be able to +apply on top of that upgrade. In master it should already have these values, +which should be maintained: +``` + "releaseNotes": false, + "sdkImageTag": "unreleased", + "planName": "UNRELEASED_A3P_INTEGRATION", +``` + +But you will have to remove from [upgrade.go](/golang/cosmos/app/upgrade.go) whatever proposals were already executed. diff --git a/agoric/a3p-integration/proposals/k:kread/.yarnrc.yml b/agoric/a3p-integration/proposals/k:kread/.yarnrc.yml new file mode 100644 index 000000000..3186f3f07 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/agoric/a3p-integration/proposals/k:kread/README.md b/agoric/a3p-integration/proposals/k:kread/README.md new file mode 100644 index 000000000..2718f3d22 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/README.md @@ -0,0 +1,6 @@ +# CoreEvalProposal to install stakeBld contract + +The `submission` for this proposal is automatically generated during `yarn build` +in [a3p-integration](../..) using the code in agoric-sdk through +[build-all-submissions.sh](../../scripts/build-all-submissions.sh) and +[build-submission.sh](../../scripts/build-submission.sh). diff --git a/agoric/a3p-integration/proposals/k:kread/eval.sh b/agoric/a3p-integration/proposals/k:kread/eval.sh new file mode 100644 index 000000000..612011ea5 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/eval.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +# Do nothing because this is only testing the state resulting from previous proposals. diff --git a/agoric/a3p-integration/proposals/k:kread/kread.test.js b/agoric/a3p-integration/proposals/k:kread/kread.test.js new file mode 100644 index 000000000..c4a80794e --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/kread.test.js @@ -0,0 +1,205 @@ +/* global setTimeout */ + +import test from 'ava'; +import { + provisionSmartWallet, + USER1ADDR as Alice, + GOV1ADDR as Bob, + getIncarnation, + evalBundles, + agoric, +} from '@agoric/synthetic-chain'; +import { + waitUntilOfferExited, + retryUntilCondition, +} from '@agoric/client-utils'; +import { + buyCharacter, + getCharacterInventory, + getMarketCharactersChildren, + getBalanceFromPurse, + mintCharacter, + sellCharacter, + installBundle, +} from './test-lib/kread.js'; +import { agdWalletUtils } from './test-lib/index.js'; + +const ALICE_CHARACTER_ID = 'ephemeral_Joker'; +const ALICE_MARKET_CHARACTER_ID = 'character-ephemeral_Joker'; +const BOB_CHARACTER_ID = 'ephemeral_King'; +const BOB_MARKET_CHARACTER_ID = 'character-ephemeral_King'; +const ALICE_SELL_OFFER_ID = 'sell-before-zoe-upgrade'; + +const io = { + now: Date.now, + follow: agoric.follow, + setTimeout, +}; + +test.before(async (t) => { + const installContractBundleTX = await installBundle( + 'submission/b1-1ed215fa6131b937ffe2a73a858e4f246a7e3f63844ef30bb8baf262f125a63ab3c526c021886060c3519060aecac65bdd3da4b6d0cc9cc4a80306a9623c7a91.json', + ); + t.is( + installContractBundleTX.code, + 0, + 'Contract bundle failed to be installed', + ); + + const installManifestBundleTX = await installBundle( + 'submission/b1-3d529cedd24548b7324ee87e1192fa58496932f8187d36545f7bf67d63d3105376492893ff93a8c573a3a641f9fe15f0a39ae07367982e4e6fc461de1f854b2c.json', + ); + t.is( + installManifestBundleTX.code, + 0, + 'Contract bundle failed to be installed', + ); + + await provisionSmartWallet(Alice, '200000000ubld'); + await mintCharacter(Alice, ALICE_CHARACTER_ID); + await mintCharacter(Bob, BOB_CHARACTER_ID); +}); + +test.serial('User assets survive KREAd contract upgrade', async (t) => { + const characterBalanceBefore = await getBalanceFromPurse(Alice, 'character'); + t.is( + characterBalanceBefore.name, + ALICE_CHARACTER_ID, + `Character name should be ${ALICE_CHARACTER_ID}`, + ); + + const characterInventoryBefore = await getCharacterInventory( + ALICE_CHARACTER_ID, + ); + t.is( + characterInventoryBefore.length, + 3, + 'Character should have 3 items in inventory', + ); + + const incarnationBefore = await getIncarnation('zcf-b1-853ac-KREAd'); + + await evalBundles('upgrade-kread'); + + const incarnationAfter = await retryUntilCondition( + async () => getIncarnation('zcf-b1-853ac-KREAd'), + (value) => value === incarnationBefore + 1, + 'KREAd upgrade not processed yet', + { setTimeout, retryIntervalMs: 5000, maxRetries: 15 }, + ); + + t.is( + incarnationAfter, + incarnationBefore + 1, + 'KREAd vat incarnation should have increased', + ); + + const characterBalanceAfter = await getBalanceFromPurse(Alice, 'character'); + t.is( + characterBalanceAfter.name, + ALICE_CHARACTER_ID, + `Character name should be ${ALICE_CHARACTER_ID}`, + ); + + const characterInventoryAfter = await getCharacterInventory( + ALICE_CHARACTER_ID, + ); + t.is( + characterInventoryAfter.length, + 3, + 'Character should have 3 items in inventory', + ); +}); + +test.serial('market survives zoe upgrade', async (t) => { + await sellCharacter(Alice, ALICE_SELL_OFFER_ID); + await sellCharacter(Bob); + + const characterListBefore = await getMarketCharactersChildren(); + t.true( + characterListBefore.includes(ALICE_MARKET_CHARACTER_ID), + 'Alice Character should be on market after selling', + ); + t.true( + characterListBefore.includes(BOB_MARKET_CHARACTER_ID), + 'Bob Character should be on market after selling', + ); + + const aliceCharacterBalanceBefore = await getBalanceFromPurse( + Alice, + 'character', + ); + t.is( + aliceCharacterBalanceBefore, + null, + 'Alice Character should not be in purse after selling', + ); + + const bobCharacterBalanceBefore = await getBalanceFromPurse(Bob, 'character'); + t.is( + bobCharacterBalanceBefore, + null, + 'Bob Character should not be in purse after selling', + ); + + const incarnationBefore = await getIncarnation('zoe'); + + await evalBundles('upgrade-zoe'); + + const incarnationAfter = await retryUntilCondition( + async () => getIncarnation('zoe'), + (value) => value === incarnationBefore + 1, + 'KREAd upgrade not processed yet', + { setTimeout, retryIntervalMs: 5000, maxRetries: 15 }, + ); + + t.is( + incarnationAfter, + incarnationBefore + 1, + 'Zoe vat incarnation should have increased', + ); + + await agdWalletUtils.broadcastBridgeAction(Alice, { + method: 'tryExitOffer', + offerId: ALICE_SELL_OFFER_ID, + }); + + await waitUntilOfferExited( + Alice, + ALICE_SELL_OFFER_ID, + io, + ); + + const characterBalanceAfter = await getBalanceFromPurse(Alice, 'character'); + t.is( + characterBalanceAfter.name, + ALICE_CHARACTER_ID, + `Character name should be ${ALICE_CHARACTER_ID}`, + ); + + const characterListAfter = await getMarketCharactersChildren(); + t.false( + characterListAfter.includes(ALICE_MARKET_CHARACTER_ID), + 'Alice Character should not be on market after offer exit', + ); + + t.true( + characterListAfter.includes(BOB_MARKET_CHARACTER_ID), + 'Bob Character should be on market after offer exit', + ); + + await buyCharacter(Bob); + + const characterList = await getMarketCharactersChildren(); + t.false( + characterList.includes(BOB_MARKET_CHARACTER_ID), + 'Bob Character should not be on market after buying', + ); + + const characterBalance = await getBalanceFromPurse(Bob, 'character'); + t.is( + characterBalance.name, + BOB_CHARACTER_ID, + `Character name should be ${BOB_CHARACTER_ID}`, + ); +}); diff --git a/agoric/a3p-integration/proposals/k:kread/package.json b/agoric/a3p-integration/proposals/k:kread/package.json new file mode 100644 index 000000000..d4e857dbc --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/package.json @@ -0,0 +1,42 @@ +{ + "agoricProposal": { + "type": "/agoric.swingset.CoreEvalProposal", + "sdk-generate": [] + }, + "type": "module", + "license": "Apache-2.0", + "dependencies": { + "@agoric/client-utils": "dev", + "@agoric/ertp": "dev", + "@agoric/internal": "dev", + "@agoric/store": "dev", + "@agoric/synthetic-chain": "^0.3.0", + "@agoric/zoe": "dev", + "@endo/errors": "^1.2.2", + "@endo/far": "^1.1.5", + "@endo/init": "^1.1.4", + "@endo/marshal": "^1.5.3", + "agoric": "dev", + "ava": "^6.1.2", + "execa": "^9.3.1", + "tsx": "^4.17.0" + }, + "ava": { + "require": [ + "@endo/init/legacy.js" + ], + "concurrency": 1, + "serial": true, + "timeout": "2m", + "files": [ + "!submission" + ] + }, + "scripts": { + "agops": "yarn --cwd /usr/src/agoric-sdk/ --silent agops" + }, + "packageManager": "yarn@4.5.1", + "devDependencies": { + "typescript": "^5.5.4" + } +} diff --git a/agoric/a3p-integration/proposals/k:kread/submission/b1-1ed215fa6131b937ffe2a73a858e4f246a7e3f63844ef30bb8baf262f125a63ab3c526c021886060c3519060aecac65bdd3da4b6d0cc9cc4a80306a9623c7a91.json b/agoric/a3p-integration/proposals/k:kread/submission/b1-1ed215fa6131b937ffe2a73a858e4f246a7e3f63844ef30bb8baf262f125a63ab3c526c021886060c3519060aecac65bdd3da4b6d0cc9cc4a80306a9623c7a91.json new file mode 100644 index 000000000..12d57f361 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/submission/b1-1ed215fa6131b937ffe2a73a858e4f246a7e3f63844ef30bb8baf262f125a63ab3c526c021886060c3519060aecac65bdd3da4b6d0cc9cc4a80306a9623c7a91.json @@ -0,0 +1,5 @@ +{ + "moduleFormat": "endoZipBase64", + "endoZipBase64": "UEsDBAoAAAAAAAAAAABOQdQzEkcBABJHAQAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAia3JlYWQtY29udHJhY3QtdjAuMS4wIiwKICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgfSwKICAiY29tcGFydG1lbnRzIjogewogICAgIkBhZ29yaWMvYXNzZXJ0LXYwLjYuMS1kZXYtMDcwNWYyYy4wKzA3MDVmMmMiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvYXNzZXJ0IiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvYXNzZXJ0LXYwLjYuMS1kZXYtMDcwNWYyYy4wKzA3MDVmMmMiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9hc3NlcnQtdjAuNi4xLWRldi0wNzA1ZjJjLjArMDcwNWYyYyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL3NyYy9hc3NlcnQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Fzc2VydC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ4MGY1NzVkNzlkZmEwYmQ3ZjY5ZGE3NTQzNGQwYWFjYTUwYTQ5ZWVmYTU5MjczMTcyMmUwZWU4ZjYxNDAzODdjMzhjMmI0ZTVhZjg5NjA5YjZlNzQyMDBiNTBhODNmM2NjMTJhODRiNGQwYzEwNzFjZGRkM2E0NjJmODU2MTFkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2Jhc2Utem9uZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaGVhcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJoZWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2U0ZjMwMDAwMDgzMGIwZDQwYTQ1ZDFkNDUxM2RmODFlMTRiMzUzMWU0YjBiMWMzMzU2N2FkNGQ2YzFjMjI1NDQ0YjYyN2ViYjIzODQ5ZTIwYjgwNzM5ZDYyOTBiYTRmYTVlN2Y4NjgzNDc0Yzc4MGQxZGMzYmE1NDA3MDU2MDQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2hlYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2hlYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhM2ZmMDZjMjY1YjM4NmU3YTBkOTBlMTdkZjQwZDc5OTU0YjFhMTE4N2U5ZDY0OGUxODg4NDdiYWJjNzZkYTM1ZWJkYzkzNjE0MWZlYWUzZTE4ZTNhZTMwYzc4YmQ5MmY3ZTgyMjZmYmNhMTRhZjhkM2Q3ODRlOWJiNjFkYjk2ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkMWJjYmRkYTQ3M2Y3ZmQ0MjVlNDdjMzMxODA5NTZkZjEzYmNjYzRjNWU4ZjhlODk5ZmQ0YjlmNWUyODg3YTcxZTg4ZTcxZGMwM2UwOWRmMTg5MGRiZWM0ODI5ODVkMjVhYjJhOTlhMjhmOWE5OWY0NmQzODU4Y2QyN2RiYjMzOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MWQyYTg1ZjliMjg5MDc3N2E4MTBjY2VhNzQyY2YzNTg4NmVlMDQ3NDdmMDJjZjRkNjM2NzU0MzU3MjRjYWRhMDBkMThmYWE1NjcxNTZiNmMzMWU5YWNkZjQwNzdlNzk1MDYwZjIyNzEzZDVjN2QwMDRiZGZhZWMxOTgxMDMzZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTA1ZTg3NTdjNzE1MDY5NmRjZjk0NTNiY2ZlNmI0MjM4MDk0MTQ0NDAzODQ2OTc2MzU1MjM4NDAxNjVhZDY2YWI2OTA2M2FhYmQ3NmQyNmNlMzc3MjBmNDFhZjE5N2FmNjE3NzgyYWIyMjMzZmIxZmQyMWMzNDhjZTNlNmY1Y2MiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1vbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLW9uY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODM5ZGJmMTg0NjFlYmVlM2NjNzE0NjYzMmE3NDk3ZTYwNGMyMGI5Yjc1OGZhMGE2Zjc5NjZiNmMyNTVjODhmNDI1Y2IyZjIzNjIyNjM2ZDlkOWE2MGExM2E1ZmVmYTc3MjkzZGJiNzY4ODRhZjVkMDk4MDNhNzU3ZmRiOGYxMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcmVwYXJlLXJldm9jYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHJlcGFyZS1yZXZvY2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MjU5MjI1OTlhMzQ2NGRhYWQ5ZmMyN2EwNDRlMWM1MGFjNDRiYTFjYWY2NzJkYmVkODlkMDUwNzg3YmM5MzY1NDc3NTdhYTE5NzkyMDU2NmM1MDU0NGZhZTY0OWNjNzc5ZjhmYmZmYzUxYjliOTVhMTg2MDg4Yjk1ZWVjNDJjNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy93YXRjaC1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy93YXRjaC1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDVlZDc3Yzc0ZTczYjM4ZjJkODBkYjYzMDIyZmI4NGM0NTVkNzI5YTI1YjI3ZTZjZjg4NWMxMzQwODkzYWU5YzFiNWFlN2U1NmIzYjZhYWZmNDIwMzk5MTAwMTgxMzVlMmQyOTYyOWYxYmRhNmI0ZTdiMGI0MzRlODE4ZTNmYWMiCiAgICAgICAgfSwKICAgICAgICAiLi96b25lLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiem9uZS1oZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDViNDRjNzRlMGVmNTEyMjA0MGJkZGY1ZmQzMGM1ZDI4YzdkODU5ZDA5ZjcyODM5MWZiN2MwYjVlY2UzZDBiZDI0NDhiNDQ4NmUzMzNkMjg2ZmM4MDY1OGM0NzJhZDA5YTc0ZGNlYzNiMTg2OTdhYWZkZTJmNzA5Yzk1OGE0YWIiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9lcnRwIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2R1cmFibGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hbW91bnRNYXRoLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hbW91bnRNYXRoLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzAyNzUxMTMwNzdhNTNiM2M2NWE4NmJlNzk0NzIxNWNmZWQ5YTBmNjUyMTY2OTVkODVkNTkxN2I2NTRkYmQyYTNhNTAwODA0YmY4YmY5YmNiYTM5NzIzZDhlNmQ3MDRkYzYwN2IzOTVlNGNjNTI4ZjY4NzczMDU0NjUxNGVmNGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYW1vdW50U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Ftb3VudFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzA1OTNkOTg3ZTBhMGUzZTNlODRlZjAwN2I2MzJlMjkwMzNiMmExMWM4MDU0M2Q1Yjg4M2Q2NjNjMDRiY2Y1MDdiNGUxZDFhZjEyMTY3YTU3ODkzZGVjMzgxNzU0OGY0YzRmMGRiYjczMjBiMWM0MGY4N2ExMzVmNDA1NzNjY2EiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGlzcGxheUluZm8uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Rpc3BsYXlJbmZvLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmNlNmQ4YjM4NDUxM2E1MDUyZDI1YzRkYmI1YjIxZTBkNTc0MmZhYzhhOTQ4OTY4ODY2Zjc3YmI5MjE3Y2EzNzJmOWRiMTMyMjVlOTEyOTAyMGFmZGQ3YmU2OTMxYTNhZWQxNGMyNGE4MTE0YzI1NWNkNzc4YmQ0YWE5NTA5OTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmJmNDAwZWNkZmE5YTBhYWI5OWVhZDgzZjRiMmJjMWJlNmJlMGE1ODI4MDc2ZGZmZGVkNWMxZjdhMDkwZDk4MmZjYjI5NWQ0MzU4ZTIzZWNmMDIyYWM0MDMxNDljYTdiMTgyMWZkMDRjNTY3NGMzNDNlMTc3ODI3OGQyNDdmMWUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyS2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pc3N1ZXJLaXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMTAxZjczMDA1YTA1M2Y2Njk4NGE3MDIwNDI2MzVmY2NlMjYxNmI4NmZkM2MxMTAxZGUxMWU5ZTcwNGE1OGEyMjU1NDdjYzFjZDUwNjk3NGMyYzM3MGQ0NmFlYTA1ZjJlMDg5ZTU1MDYzYjI2ZTRlMjhmZjg0OGFiNTEwMWQ4OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJkZDBlZDBmZjdmMTBiYTU0N2E2MTQxMTI0ZGQyOWZhNzAxM2NkZmQ4ODQ2NTJkOGQzNWM0ZGY4OTQ5OTc2YjM2OWMzMmJjOWQwZmJmODc3NWRmM2E1YTU2ZTBhYzU2NWIyOTQ5ODVkOWU5ZGJiMmE4ODA1YzU0NTVlMGU5ZTQzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2NkNDAxZDUyZjc0YWQ1NTQ2YzY5YmVmNzE3OTU3N2ZmYzc4NGE5NzBhNzA0MmE2ZWQ1YmEwMDczNmUzMjgxNWExYzA0OTIzZDE2ZTI0ZWQ0NzgzYzExYzg2ZWYxMzE1NTA5MzdhZDdiNTExNDg5NDkwMDFmMDYzMmEwYjI0OTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjNlMGMyODc0MmEyNTE1OTBkNzE0ZWUzMjBiYzc4Y2FmMjI1NzVhNGZjMmI3MGQ3NjU3YWNmMDM2OTViOTUxZDJjNWEyYmE1YWZhNWQ4NjgyNGVmZmQ2ZTU1MzA3ZGJlN2NjZDlkOTQzZGY4MDA3Y2Q5ZDYxZDI1OTNlM2RhMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmYwMGUxYjdhODk3M2NlM2EzM2MzNTA1YTc5NTlmMjg1OTZhYjRiZmM1ODAyOTk5OWRhZDRjYzZiOWRhYmQyMjg4YmY2NzRjOWY5NTEwNTYwZWRmNzVkNjY2NjcyOTQzZWU0YjMyNDI4MWVjYzc2ZDNjZTcwMmU4YjQ4ZmY4M2UiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF5bWVudC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF5bWVudC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM2ZjY3NDVlNzJkMzg0YjJmOTUyMjlmMmZmOTliMWFjM2UxNWQ1ODg1NzA1MTU0MTRlNjc5YzA0YTRkYmNlMDNiZWVhOGJkOWQ2NjhhNzA3MTlhYWRjZmI4ZTJjY2RiMGM5OGZkNjM1ZGU2NzRkMmVmNDc2ZGJlOTYyOTZhZWExIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BheW1lbnRMZWRnZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BheW1lbnRMZWRnZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NTc5OWUxMWU2NWZmMTM2ZTJhMmRkYjcxY2U2ZDVlMTM2YmRlZjgwNjVjYTIzNzRjZDViYTcyNDk2NGQ0YTk1MGE2YjMwY2I2NjQwMmJhMzYyNjFmMGU4YTA2MmEyOTBhZGM2NmJmZDcxMmY4MGU4ZGRiNDgyZGNlZjdiOWQ1NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdXJzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVyc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNDIyMDQwNzhmYjY4NDEzMTQwYzhmZjQ5ZTAyODAxMWQyMTBiMDhkNmFlZDc4NDZlYmVjOGU2ODlkYTE1YTdmZGFmM2FjMzk0ZDY2NDcwOWE4YjRlMTAyZjA5NDNmNDAyMWJlZWFiMDZlZjgwZmY0MDNhYjZkOGI2MDQ0YjQ0MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90cmFuc2llbnROb3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhbnNpZW50Tm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4OTU0NjZkNDg1ZGVmMTNlNjEzNDU5YzcxYmI5MGFiODZjMGFjNTJjN2NmYTkyMGI3ZTRjMDBiOTk0YjEzNzc1ZjNiZTA3MjA0YzgxM2Q4ZWQyYmNmYzFlMjEyNzgyMDY1YmFkZDE1ODk4NmYxYTI4ZDE0ODEzZmExMDFhZmI4MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDlkYmViY2JiN2VkOTkxZjk4YWE4NDgyMjA3NTlmMjU0MTI1YTY4OGEwMzgxZmRmNDYwM2FhOTQ5NzQ0ZThmYmNmZTNmNTk0Y2YzNjU5NGM5Yjg3MGFlYzRlMzkzYWU1MjUyNzNkYTY3OTZlNzkzNWUxYjdmMWZmYTdhOWMyNTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMSI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9nb3Zlcm5hbmNlIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2dvdmVybmFuY2UtdjAuMTAuNC1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdGltZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3RpbWUtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZS9zcmMvY2xlYW5Qcm9wb3NhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2NsZWFuUHJvcG9zYWwuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9kdXJhYmlsaXR5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvY29udHJhY3RTdXBwb3J0L2R1cmFiaWxpdHkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yYXRpby5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9yYXRpby5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZS9zcmMvbWFrZUhhbmRsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21ha2VIYW5kbGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b2Uvc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy90eXBlR3VhcmRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb25zdGFudHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnN0YW50cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImMwOWUxYmIxNTE1ZDAxNDIxYzNjYTdjZGVlNDhiZTQ0ZWNlYzM0YTRlYWI2Mjc5ODNkYjRjODE5MWU1MDM2NmFjOWExYWVhMmRkY2I5NDZhYmRmMjU5OWQ5YzM5NjY0NTc0MzA1NjQ4MWU0ZjVkM2UwM2FlNjY3NTdhZWFmYjMxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0R292ZXJuYW5jZS9hc3NlcnRpb25zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEdvdmVybmFuY2UvYXNzZXJ0aW9ucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdiMmVhMDdjMDk0NTAyMDIxOWRhMTA1ZTdiMDE3Mjg1MWUwMTUwYzFlNjIwNTQ2YzVlYTM5ZjlhMjg4YTdmZmEzNmI4ZmI0OGMyOWE3ZThjZDk0NDIyMGYzNzMzY2QzZGQ2MWZjYzE4NmY3MjI2MDczYWVlYjU3NDQxYzYxZjA0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0R292ZXJuYW5jZS9nb3Zlcm5BcGkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0R292ZXJuYW5jZS9nb3Zlcm5BcGkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwMjFiNzQxMzUwYmM3N2E3MGRmYzA5YmMzNTkyZWM4MjhmMTkyZjEyOGNmNTFlMDBkMWU2YzA3NjhlYTM2ZjgxYmM0ZmRjYjBiNmZhOGE2MmQ4MGI5MzU2YmZjMzRiMTgyYzA3NGE3YTBkMTkwZjdkOWY3ZTY5ZGNlMGM4MDNmOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEdvdmVybmFuY2UvZ292ZXJuRmlsdGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEdvdmVybmFuY2UvZ292ZXJuRmlsdGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGQ5Mjk0NWY5MzI1YWMzNmViYjgzZWZiODJjYzFkMDNiODg2NTU3NzMyNmMwYWU1ZGM1YzQ3OTRjZDE1MGQ3ZTlkN2I5OGMzNjdiMjcwMGIwMzVmZWY2YzE4NThiNGQ3Yzk5ZWNlMDcyN2VlNGIwNzY3NGM0N2E0ODU2Yjk3NGYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RHb3Zlcm5hbmNlL2dvdmVyblBhcmFtLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEdvdmVybmFuY2UvZ292ZXJuUGFyYW0uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyY2YxMzA0ZjZkNzI5ZDk5Y2Q2NmNiMzY0YjZmZGMwMGI0ZGVhNzRmZjExYmEwMDUzZDk3NjBjYTVjYmUxZDI0YmMyNDNhZTIzZTdjZTVmZDNiNWUwZWRmNGYyOWU4ZGIwZTY3NDhmOWY2ODI2NzYxNDY3YmUwMmIwOTFhYTQwZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEdvdmVybmFuY2UvcGFyYW1NYW5hZ2VyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEdvdmVybmFuY2UvcGFyYW1NYW5hZ2VyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjBiNjczMzdhMDlhOGRkNzExOGIwNjZkMGVlYWYzNmE4YmE4OWQ3NzYyMjI3NDE0ODcyYWQ5ZjAwMThiMDA5NzE2NDM0OWIzOWUxNzY3Y2Y5YTNmZDcxYTMyMGI3ODE4MzcwMTU3MDVlZmNkNzM1MmIyMWM4NTZmYmM3ZWYwNDkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RHb3Zlcm5hbmNlL3R5cGVkUGFyYW1NYW5hZ2VyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEdvdmVybmFuY2UvdHlwZWRQYXJhbU1hbmFnZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlYmVlMjZlZDAyOTIwODZiYWU2ZmJhYzUwZWJjMzlmYjkyNjI2MmQ2YjBjOTYzY2YwN2VkOWRmOWUyNjU5MjlkYjQ5ODgwYmZkNTY1MTI0MjEyNzU2YTk1NjgyMmY4NGM0YWZiMTcwYTg0NmE3YjBiYTliMjRiNzBmNDE1MDA0NCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEdvdmVybm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEdvdmVybm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjg4MTBmNWZlNGE4MTUxMWNiOTVhMGEzYmI5MzhiNTI5ODE4YWY0Mjk0OTNjYTU1ODhjMjhjYWVjOTAwMmI0Y2Y5MGExM2FiZmQyZGM3ZjFkNjgzMWNlYWEzN2YxNTFiY2RkZDM0OTI3YjQxN2M4NTNhYjAyYzI4NWY3YTZjNTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RHb3Zlcm5vcktpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RHb3Zlcm5vcktpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjI4MzY5NjY4YzllZjc3Y2Y0MWQ2N2YyN2Q5NTZmMjc4MGYwMTYzZDg4MWRkYWI0N2RlYjk1Y2FhMzU3NmYwMTg2Yjg0MTllYjVmYTZjMzM5OWU2MjQzMTM2Y2UzNDE2MzkxYjQxZjQ5MmVhYTQzODcwZTIxZjQwYzJkYjczMWJiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0SGVscGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEhlbHBlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY0ZjczMDY2OTBhMGQ2MmM5ZmJiZWYyZTlkZGEyZGUyZjNhYzQ4YmVhY2Q3NzE5MGI1YTFiMmY0M2JlZjFmMTA2ZjNkN2M2ODU5MDQxYWNhMzk3ZGE5N2JlN2IyMDQ3ZDdmNmY2MGJlZGZmYmE4ODdjYjVjY2IwY2ZjNDU0NDYxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjZkODE5ZjQ1OTVjODBkNWI4NGNmMDA5NzE3ZGQ1ODZmMmVmZTY0MDJiMmZhOTVhYzUwODlkMTAxYWE3NGU1MmY5ZWE1MjIzMzBiZTg1ZjU3NTI3M2VjYTM1Zjc3ZjczZGYzOTcxNTZjMjc3NTEwNzQxODVjNzgxODkyMGE1OTdmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3F1ZXN0aW9uLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9xdWVzdGlvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQwNTUxOWRkYjk1NjdhYzllY2FkNWVjYmNlZTFlYzYyZGQ5NjUxNmE5Zjg0ZGEzZjUyYjFhNTAyZGM2YzJmYmFiODI1NGRlNzQ2ZmRlMTFiMDY3YmQ2NmQyYTJkMTlkNWI0MjBiNGQ5OTg0NDM0YjQyY2RlMjZhMjkzYjRlZWQxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMThlOTgwZTkzZmI2ODFlYjZhYmI4OGE4MThhNjcxNzBjNzU1N2JjNzFmYmQyOTlmNGY3YWM3NWVmNWI1ZGYxYWExMjIwN2ZiYmY0MDMyODk2ZWI2MDU5NWUyYjgxMjZmNGM0NWNjY2I2NmQ1ZDkxNWNkYjU2Mjc4MTc5OWM2NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy92YWxpZGF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy92YWxpZGF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjA2ZGY5YmRjMjM0MDVkNjJhMmYzNTQyODdmODNjNmEzNTg3OGU2MmUxN2ZkNDIyNjc2ZDJjMTY2NjYzOGVkMTE3NDA3Yzg2ZDE1OWQwMzZlYzRiZTliYzEwNzgzYjhjZWViODczOTFhMGU3YTczNzVjYjE5NTAwMjI1M2QwNmIiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9pbnRlcm5hbCIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3N0cmVhbSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9zdHJlYW0tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJqZXNzaWUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21haW4uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY2FsbGJhY2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NhbGxiYWNrLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTNkMDhjYzYyMzhhZjg3MzZhNzhhM2EyNmM0NjliMmJmMzBmZTQxODgwNGM1N2U4OTBjZTZmM2ViZDQyMzFkZjI0N2RjOGIwMDVlN2RkZDIzN2VhYThjYjVjNTg5MWQwOTVlNzgyNDlkM2Y2YzNjZTVjYmJiYTE0M2Y1YmIzNGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29uZmlnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb25maWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NWJiODY4YzI0NWU1MzdkYzUyMWZiNjI3ODBmMDRhOTY5MzJhZDVkYzhjY2EzZjQyMjE5MzNjMmZjNmJhZWZlMzlmNjUzNGU3OTUxZTg1ODM1ZjU2NjU3MTNiOTM2ZmQzNmUwNGIxZjZlOGUwODIyZGQzNWRhNmFlNmJlNzBmZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWJ1Zy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGVidWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiMjJiYWU1YzM2ZDgzOTMxYjNkZjdkZmZkOWNjYjBhMzNiMWYyMWE5NDVhYThiNWVjN2M3ZmRiMjI4ODEzZDBmODg1ODJmMmUyOWZhYTk2NTcxMDE5ODAxOGQ1ZTlhZmE5YzI5MzFlM2IyMmM3MTQxNmFkNDE2ODMyMDk3YTdiMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vycm9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImYzM2Q5NWZmOTNiZTdhYzRiYjdkZWYxZDczZTEwOWFmNTkxOWY0ZDJhZWI1YWYwOGZiMDRkNDBkNmM4NzdkZTgwYTI3ZDViYjFhNzIyY2Q3MTI5NmU0N2QyNjliY2FhYjgwNTRiZWVjZGZhZjFmYzcwZjU0ZjE1ZWFhZDg1ZTE1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJmZjExNWYyYzAyZjBiNTYzNjA0ZWQ2MTE3ZTc4N2M0ZTg3YzI2YWI2MGJjYjEzMzFiNjg3MGQzYTUwN2Q0YjlkMDcxYTZjMjM3MDk4ZGE5ZDhiZjU0OTk1NWE2MDAzNGZiZDhiMGIzNmUxMjA4NGQ5N2U3MmRlN2EwYTg2OTQ4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2pzLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9qcy11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImVjOTkwMzIzNGQzOGI0ZGM0ODNjZmU0ZmFiODA1MzAyZmUyNTQ4ZTJmZjhjNGRkODhmNjcyNTcyZmVkYjVkMGNjNTU4OTdmMmMzMDI2MWU2N2IyYmQ4OTM0MWMxM2MxOGFkNWE0MTI5ZjAxMDVmMTUxM2NhZGQ3MWM3MzJiMTk1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4NzMxZjFjMzAzNjYwMmFkOTBkNTk5YjM1YTYwNmZmYjEyODY2OGIwZmNmMjAwM2M1M2E4YjQ4MDQxNGFkZDUxZjRlN2MxNjExYjY4ZDNjODNmNTE5NTExOWRmNWI0NmQ1ZjI5ZjQ0MTJiN2NkN2I2NWYxZmM1NTJlMGQwYWM4MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXRob2QtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ldGhvZC10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgwNDQ1NjlkYzc0YTYyZTQyMGRjOGUzOTE3YjVmYWYxZjdhYTBkZWRlYTA2MTczNDkzNTJiYmFhN2U5ZTA1ZGZhOTBmNmZlZDAwNTg5NjZiMTIxMTIxZWRhODM1YzQxNDA1YWMxNjMwNmRiZmIwNjI5MjUwMzIxOTQwOWFmMDAwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Nlcy11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2VzLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmQyZjY4NzI3M2VjNTkxNjU3OTA2MjA1NmM2NWEzODZmMGM5OWNkY2E3YTU5Y2EyMTA4MmE3MDM1YTY0MzAwY2NmYzAzYTEyMzM2MjJiNWExYTMxZjM3MThjMGE4ZTVhZDYwNGJjNjFhZTgyNTE3YzcyOTc0NmE0YTJjYmJjMTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdGVzdGluZy11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdGVzdGluZy11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImYyNjZmMTBhMGI5YTczM2E3MGVlZDNjZTFmNmExNDY3MjgzYTY1NzhlOTE1MTM1MTAxMjZmNjhhYmNkNDFkOGUxZDc0NDQ0NzZiOWViOTBlNDcwOWY1NjI0NDk3Mzg0YTdlNzQ1ZGE2ODgyZjE1ZDFmNjQwZDRjYWJjODZlYzg0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVDaGVjay5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUNoZWNrLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzFlNTIwNTBmZDg5ZmU3ODE1ZWZlYzYyOGVhYWViMjAwYjdmN2NkZGE4NGVlN2NkYmM2ZjIwM2MwM2VkZWYwNjE3MWJmMmVjNjdjMjA4MTJmODMyMWE0ZTI1OWNkOTdlZDg1Mzc3Y2Y1NjQ1ZTczMTE0MWM5YzIzZjdlZWI1N2UiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjg2ZmY3Y2Q2YjZkZGFmZjU3OWE1YTYxZjgyMzFjODQ1ZmUzOTQwOWIyZDg0ZmZmNDcxZmJiN2M2ZmMyMTllYWM4OGVhMmU2NWJkZDgyODlkZDFkOGFkODlhODc3NzliOTJhY2JiZTY3NjU5MTJiN2VjN2YyNjljNmIzMDI3YTZiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLWluZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy1pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3VwZ3JhZGUtYXBpLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy91cGdyYWRlLWFwaS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwZWMyYzRkMGU1NjllMzNmZjg3YzNmMzU0NTdiY2Q0Njc2NjhiY2RkOWQyYjNkNzUwOTViODdiOWFlYjNiMTMxYzlkOWQ4MzhjODllODM0NzM1NmMwNzNlMGNkYWU5MzA0MDQ0YWM5NTY0Nzk2ZGM5NDcyNjRlMTc2ZDRiNGI0IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvbm90aWZpZXIiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy90ZXN0aW5nLXV0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3Rlc3RpbmctdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdXBncmFkZS1hcGkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvdXBncmFkZS1hcGkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjliOWM1NDZmYzFiMzJkZDdlMTNjZjM4OGIxNWYwYWJkODk4OTU5ZWJlMTc4YTc3MWRjNzkyNWVlMWQzYWZmMDdiZDg2ZGFkYzAwMjUwNmQ5N2JiMmI5OTA1ZDIxYzNhNjQ5NjNkOGRkZDRjOTM4OGVhNDgzNmU4OWU4OTZiOGEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDAxMTAwYWQxZWMwY2MxNTQ1NWNmZmJhYTYwNDAzMDNiMWMzMWZjZDgxODRiOTQ0ZmI5YzdjYWU4NjIxNmMyMDA5ODBjYmY2ZTY4NmI0YjlkY2I0NTM0YmQ4MDQyMDViNzJlZDk3Zjc5ZmE2MTA1YTdmODA5YzZmZGZiNmVlNjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm90aWZpZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL25vdGlmaWVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGUwYzY5ODIxNjljMTkyODk0MGFmNjY5NjFkZjlkNzdkZmExN2M4ZTkyNThjN2M3ZGIxYzViMjk3ZTU3MTM0YjhiNTQ3ZTM0M2RiZTZkNTU1YjYwN2YxYzg3M2JkZTJiZmVmMjUwNzI1NTM4Mzc0NmE5NmY4YWU2YTVmNzIzNjciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHVibGlzaC1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3B1Ymxpc2gta2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTQyYmMwNDYxNGQ3ZWI5MjMxOTkxODIwYmRkYWQ5ODYxYzRkYTRlZmNhZTg3NGZmMGUxNTY2MGYwN2Y1YTc1ZTE1NDFjMjcxOWM0MTRiMDI0N2I0ZDBiZTJhNTllNDY4N2FlYzI0MWYzNzc4MTNlZTlkNWU1OGNiODBkNWI0MDQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVkLW5vdGlmaWVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZWQtbm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOWM4YTA3ZDc1OTdhNzU1ZjEzMjNiMTdhMzU3ZTJmZWM4ZjRmZGNkMTc3NTNlYjdiNWQyNDc0ODhkNDgxNzcwYmQ3OTU4ODdjZDc3OWMxZGIxN2UyODcwOGNlYWRlOGU3MjQ4N2IzMDVjYTYzZmE4NWNmNDc2ZGYwNDlmYzdjNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXN1Yi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzdWIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MWU1ZmE4MWY1OWFmMmIzY2QxM2NhZDZjNTdmMjZjNjIxNTE1OGQ3MDQzODQ3NTQzZjIwMmUwZDZjM2NmNGJmNzJkZDNkZWNjYzNiMzMzYzliZGMzNWY0YWE5ODM5NGFhOWZkODU4MGJjOTdkOTQwYzI2YmE0NjdlYTJmZmRlNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N1YnNjcmliZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ0Y2I4YmU2ZmNiOGEwMzMxYmYyOWQyYTk5NGQ4MmJjZjc1ZGYwODRjZDkyZGY3MzYwY2VkNGQ4NzUzYWRlMjg2YzYxMzZhN2ZkMjQzZThmMDVlZDZkYzlhZmIxMGZjYTc5YmM5OWU1MjEyZDA5ODZhZWRiNDE2YWJlMTg4OWYyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N1YnNjcmliZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N1YnNjcmliZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiOTY2MzFlNTc3NGU3NTQ1OWY1NjE4MGI0MjkxMzFmMzIwZjYxYmI3ODU0NDIzNzdhYTc4MGQ0Nzg1MGRkNWI3NDcwYTk0ODBmMDM5NjI5NDQyMTcwNzMyNWI5OTM1YjEzNTFjNjc3MmRlMzFmOTRjYWYwOWU0OGIxYzJmNTEwZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90b3BpYy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdG9waWMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4YTVhNDZkNzQ1YmMxZjVjMTAxNmFmNjI5NTRjODM0OTBkMTU2ZjVkZmY3MTU5NzU1ZjNjMjU5N2Y4YmFjYzVjMjJhNTBmN2JjY2NlYmVlODYyYmQ4N2Q0NDg0YzBiNjA2NzUzNDQ3NDI5MjczNDU2OTQ4MzE5NDYxMThmMWJiYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3N1YnNjcmliZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzdWJzY3JpYmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjNDBhNWMwMWNjNmExMmZiMGFiMWJjMzRhOGU2Y2Q0ODJhNjQ1MmI2MzYyZjQ1M2NmMDNkODkzZjU3Y2Q3NzY1MDkxYTc3NGNkYTMyODhlNGRkZjYxNTkzM2RhODNiYmI4OWMwOTkxNjgyN2JjOTVmMmU5NWJlOTU5NGJjNTI0OCIKICAgICAgICB9LAogICAgICAgICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ0b29scy90ZXN0U3VwcG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2OTcyZjA4YWZhMDcxYTY0YmU3MmZmNTIwNjZjMWUwOWJjMmY0NDAzNjgwZGZjM2JlN2YzMzJmMTFmYzQyYzc0ZmUzYTM0NTRjYmM1N2JlYjE1MDhmMWJhYWE0YWE2MTRmMzJiNmQwNGJmNGIzZjliMWJjNjliOGE1NTE1OGI2MCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3N0b3JlIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFhOGExZWIzYzViNzEzZmE5MGQ5NjUxYjQ2NzczYTQ0MDFjZDUxOTM2MWViZDBkYTQ2ZTIwMTFmYWEwNzQyOGEyNGZiZWIyOTY0YWM4MzJiNDJkODJjZDJkOTRkZWViODIxZjU3NWNhMTNmYTFhZWQ1Y2QzZjBkMDE1NzM2Y2UzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xlZ2FjeS9sZWdhY3lNYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODg0ODczMmEyNDhiZjNkODI0MWQxOWVhYjk0MDY2ZmQyOTExMGM1Y2IzN2JiZjhhNWMxNWI2ZTQ0YzdjZDkxMDI1ZjEzYzhiYzJkZThhNTY2MWY4ZjI5ZjM0YjIxN2M2ZjJiYTViM2MxNDllNmRhYjhhNDFjZmFkOTZhNGE4ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkYjBkMzNjMWQ1ZDFjY2U3ODI2YjM3OTZmZmZjZmIwZjhlOTljNTM4MDMzYTgzYzNiNDg3N2UwOGJkOTc5NmMyYTRjMWZmZmFkYzMyOGNhMDRlZGUxMTY0ZDQ2Y2IyNWQ5YmM3MDg0OGVhZDc1YTI5ODJmYzViMzQ4NmViNTU0MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ4Yjg2YjFjMmFjNWRiNjFmNTYwYmMxNWZmMDVmY2M1MzU1Yjk5OWRmMTI4ZDFjODM0MzgzOTM1YmJmNjgzNzhlZWJhM2QxN2FlMmQzOGY1NjIwMTQxMzc4MTc4NTgxZTc4YzhiMTRiMGRjYjM3ZDAzYmVmNzExODRhZTM0YWIwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTYzMTIwY2MxNzZlMjBhNDNjZjljZDk4NTlmZjJkMjRiYWU3ZGQ5MjFjMWUwZTgyZGEwZGE4ZTI1YTk5ODYxNjYwNDBiMGJmMmY2MDVmYmExMzZlOGY3NzJjNTJlMDM5YWY4MmU1OGEyMjgyYzFjZjZmN2YzNzNkYzM1MjZhOWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEwY2ZlYjAxZThmMjlhMWVjZWFhMjQxM2Q0NzZkZTMwOTUxMzg5YjQ5N2IzNDJmZDY0YzYyYzVlOWY3NjBlMjkxZmI2NmQ5N2VhM2MyYWVhZTI5YTc2ZDQwNDQxNTFhZDg1NDE1OTgzODI3ZjFlMTg5ZTViNDZiNTg2NTNhODg5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYzE4ODY1ZGVlNGI5ZjFlMTA1NGFjZDZkMWU0ZWZmNmRjMDBjNzdkMWQwZTUxZmViN2YwMzNkZmQ0MzNhNDA2NmMwNDY5MTY1MDFiZGIxMmU0NWIxMGNiMDQyMzUyZGJhZTlkMGVhN2U1NWY5YjJhY2ZiZmYyNTBiNTMzZjIxYyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY1ODlhNjgxYzI2MzYxZjFhNTM2YjMzM2FmNjQ1NDg3MDk3MDNhMmM4MDdhMjU2NjI3YTg4Yzk1NGEzMzRmMDM4N2JjMzRiMjFhMTNmNjRiNGVmMGM1MGYwMjdlMGM3ZDczOTMzMzdjMDU3YzAwNzlmZjNhZjY1MTFmMTFjZjBkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3RpbWUtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy90aW1lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvdGltZS12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvdGltZS12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM2Y2IyZDIyMTBmMjJmM2E5NDFlM2ZjYjM5ZmNjOWNmZmNjYTFhYTkwODRkMjU5YTM3NWM4NTUwYWQxN2NjNDZhYTliMGY5NDlhMTAwMDAxMjI2ZjgwYjVmY2U5ZGU1MTIxZmIyNDI3MTUzM2NmODhhNTYwY2Q1MDA0OGIyMTI5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RpbWVNYXRoLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90aW1lTWF0aC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY0MjBiMDcxNTM4YzllMzUwNDVhNzgzMjU4ZDgxNDg3YmQ0MmIwZTI0MGEwMDdkZmU2NWE0ODUxNjZlZDBlNjQ2YjQzYjNhMDFlYzE1ZjhhMTM1NGJhNmZlYjU2N2Y2YzM1ZTlmY2M5M2Y2YzNjZjk1NjZlMzAxODAyN2M2NGU2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODk4NWI2YjU4MDI0NzI4YWQ5YmJhMjQ4YmIwN2FiZDJmZjUzNjRiYjdlMjg0OWIzNGQ5YTZhZGJjMDA1YmUwOTYzYjVkN2RiMGYyMmZiYzEzMTNiNTJiMTdiNDE0NzExOGYwYTVmZThhNDljMmVmZjc4OWFiOTZmMzFhYTZhMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy92YXQtZGF0YS12MC41LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3ZhdC1kYXRhIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhvLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leG8tdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOWQ0Yjc3NDM3NzJlNGZhMGQ1MWQ1N2U4Zjk0NGYyMWM2NTExZjA1MWU0ZDJiYzZmYzk1NGQ2MjFhMjI2MTRjODJkZWYwNWJlZjNhYzI3YWZmNmU0N2VkNzU0NmI0YjAxZTZjYTcxNzk2MmU3MzY2NTRlMzJjZDA4N2RhYzNiZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNmU1ZGRjODI0NDIxOWM2OWFlNTdlOWUxMjFlMjQ2ZTJkMDVkYzM2ODhkOGRkM2RiOWViMmJkZTZmYWMwM2M3NDE5NDhlMWJkNTMwYmYxNGNjNjM5NjFiNzhjYzRjMjUwOWQyYWVkZmZkNzcwYTkwNzU4ODg2MzY4MTIzNTE1OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy92YXQtZGF0YS1iaW5kaW5ncy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdmF0LWRhdGEtYmluZGluZ3MuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NDhkMWQ3OTI4Mjc0ZjFkNmJmOWQ5MzBjODI0MmFiZjNiZDYwNmIwNjEzZjUyMWQ3ZGY4MzYwZTkxZTYwYWM1ZmYyNzJlMDQwMzllYjRkZjFjYWY4NmY2Yjk3M2M4NjJlZDQ2OWNmMjgwOGJiMzBlMGY4OTNkN2UxMTJlNWZjOSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvem9lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3pvbmUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi96b25lLWhlbHBlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdGltZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3RpbWUtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJleHBvcnRlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBkMzdhMWViODhmYWEzNTJjOTE4N2UzZDgzYzE0N2UxOTQxNjFkMzMyNDAyMzNmOTI2MWE1YjVhMDAxY2MyMzU5MzljYTk3YWY1NGYyNzc4ODkzMjhiZjFiMTRkNjI5Yjk4ZmNlY2UzMmNlNjU4NDZkNzQyMTQ2Zjg0NDY0N2Y1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NsZWFuUHJvcG9zYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NsZWFuUHJvcG9zYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxNmI3NWE5YTM3YzVlMTA0ODFkMDY5MjYwYTU2NzU3M2U2ZmEwNTJmYjlmYWYzM2M4ZGJhNTg4MGU3Nzk5NTgyYTIxOTIzZWVhZjFjMGYzODNlNWY3MTVmNDk0NjA2ZDQzZTk1OWEyZmRhY2NlY2FjNDE3NWFmOTAzMTlmZTc0OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEZhY2V0L29mZmVyU2FmZXR5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEZhY2V0L29mZmVyU2FmZXR5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzdjOTAwNWFmYjQ5NWVhYzc1YWE2MWY2NWI4ZTNmYzViOTU1MTFlMTExMjI2ZGRkYmEwN2NkNDliMzQyZWFjYTQzYWY2NGY2ZGZjMmE3ZjA5MWQ4YmQwOTBmYzM2MzAxZTQ4NmFhYWExODU3OTBmNjRhMTE3NDY5NTI1YzM3MTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RTdXBwb3J0L2F0b21pY1RyYW5zZmVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdFN1cHBvcnQvYXRvbWljVHJhbnNmZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3MjYwNDIxODNlZWFkNTgxNDdiZWVkZDk5ZGEyZDcwMjdiZmI0YjNiOTZkN2M4YWQ5MTEzY2ExOGUzNDlkZWJkMDZkMzkyYTdlNTFhOTgzZTQxNDgyNGExZmM4YWZkNGFmYmMxZTg5YzlmYTgzNWY2Y2I5ZTQ2MDlhM2RmYzQzMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdFN1cHBvcnQvYm9uZGluZ0N1cnZlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RTdXBwb3J0L2JvbmRpbmdDdXJ2ZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiMjI0YzhlMjhhY2UyY2FlNmIwNmU3ODgxMDdjNzViOTY3NjE2ZjBkYTQ4MGVlOGJjNWNiYTBhOWZlMWU5N2RlYjE0OWI4NzFlY2M1YjIzNzFlNmY3YWI4NDNlZmRjZTcxNmU4Y2UwNzkyNTEyMTA5MDZhMDQ0ZmQ0MDZhNTNlYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdFN1cHBvcnQvZHVyYWJpbGl0eS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RTdXBwb3J0L2R1cmFiaWxpdHkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYTBlZWZlNDllNzE0YTk2NWYyNmVlZDRhMTUzMGYwY2FlMTJmMjc4ZjY0ZTAxYjI0NGJmOTdkZjljNjcxMzgxY2FmN2U5MzlhMDBmMWI2M2U5YjJmZDA1ZjA3NGNlMWFlNTJhYzc5MzU2MmU2NDUxNmY0YTBiMWE2ODhmNGY0YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdFN1cHBvcnQvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0U3VwcG9ydC9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImMxYjkxNWY4YmY3MDUxYjhmNzc0ZThkYzM2MzcwMmNlMGJjNjNlMWM5ZmZjNWYzNDEzMGEyY2QyNzczZTAwYmUyZWFhYTAyYzhiODRmYWIyYTFjZmQ2OWE0M2I1MDIxYmViYmU4MGNkZGQ0MzdmYjJjMzBmNzEwYmQ0NjBmMGNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9wcmVwYXJlLW93bmFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0U3VwcG9ydC9wcmVwYXJlLW93bmFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkMzJkZmM2ODFhNmJmNTg2NmNiMWVmMWI1NDE0ZWIzMmE3M2Y5ZTk3YWQzYWQ2ZGU1NmY0NGIzMmEyODUzMTFkNzU3YjhlZmQ4OGU3NTM1M2E3ODQ1NGY5ZDYwZTU2YjM0MjZjZjBiNjJmMzMzN2QwYWM2NTA3ZTVhZGY5MDkzNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdFN1cHBvcnQvcHJpY2VBdXRob3JpdHkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0U3VwcG9ydC9wcmljZUF1dGhvcml0eS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMwNjhjZTkyYjUyMGRiYzRjNzk1YjE0Y2ZmNWIzYzIzNjBiOWIwZGM2ZjNlYTU0NDQ4MmYwYjdlNWIwNGQyMjFhNjE1Y2E1NWFkOWQxNDQxMzRiZGJhMWMwMmE0NjU1ZDYyNzRiODkwNWVkMGZmMGJhNWRkMDNiODQwOTdjYWM0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9wcmljZVF1b3RlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdFN1cHBvcnQvcHJpY2VRdW90ZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdlZjc3ZTM3NzQ4MzIyMzE3ODhjODY4OWY3ZTVkYmU5NzcyYjFiOTE3NDA2MjMyYzdkZTA5YTVhZGQ4YmUwZmI5MzgwZjQ2N2QyYTZkYTNkYjg4ZjcyZTI3MzdkMDM3ZDMyOTJiODdjY2RlYjg1MmMwOGZhZjkxNTQ2ZmFiMTc4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9yYXRpby5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RTdXBwb3J0L3JhdGlvLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2JmNjJhNTJlMTc4MmRjYWQyNDc4NGFjNGI2MTRlZTE3NDEyYmQ3ODU1ODE1M2RmODA3MDdhMWZhZWQ4YTU1ZjE4ZDk4MTk5N2RmZDcyY2ZiYWFlYWQyM2YyZjc1M2RiOTY0ZDg3NDkzYTI4YTUwOTliNTRlZWMyNGU1NWQ3MGMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MTA5MTc4NWYyZTYxN2ExZGY5NWZiN2I1NTQ2ODhhM2ZkOTY5N2E3ZDhhNWI3NDY5YzA1Yjc4NWM0Yjk3ZDZlZmVhNTU5NTI3N2Y0NDY1ZWRlMjg4MDM1YTRjMDJlYzA2ZjY0ZmJiMjkxMWU0YWQ3YmZkNmU1MjI2NmU0NjU1NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdFN1cHBvcnQvc2FmZU1hdGguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0U3VwcG9ydC9zYWZlTWF0aC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ5NTdhNmMwM2FiOTNmZTgwMDczODkyNmE0N2Y5NWUyNGQ2YmMzMjU1N2MwMjkzYzU5NzMyN2Y2NjU3YTgxYzQ2NjA0MGFmOWZlMWJiMjZmMTc2NzAxNjJiNGEwYjc2YmViZDE4NDczOThlODNlMTRiYjAwMDhmMmEzODljMDIwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9zdGF0ZU1hY2hpbmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0U3VwcG9ydC9zdGF0ZU1hY2hpbmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4OWMxYjhhZjNkODExM2RmZDE2YzQwNzI2MDM0NTFlMjMyZDViMDM0MTkyMjc0ZTI3NzlkZjNlZGZhY2M3NjE3YzYwMGJkNDVjNDQ0ZTVmZWVhYzk5MjNiMjIyYWU0YzY1OTMzNmFkY2E4M2QwOWNjYTZhYzc0MDNmNTRlZjgyZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdFN1cHBvcnQvc3RhdGlzdGljcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RTdXBwb3J0L3N0YXRpc3RpY3MuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3ZDg2YjMwZTI3NjQ0NjVkYzkyZDk4NThiYmNiMTk5Zjc2NzFmYzAxZmFiYTVlNzY4YWI2NWQ5ZjAzMzBkNDY0YTVhZTk4ZmIzYzIwMTI3OTA4YTQyNjQ4MTBiNWJlNmE2NzVmOGRjOGM0NDBiYmU3MzU4MWI1ZjU0NDI1ZDc5ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdFN1cHBvcnQvdG9waWNzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdFN1cHBvcnQvdG9waWNzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWNkNjIzZGVlODEzMjE5MzZmYzdiZjg0NGVmMDQxMGI3ZjEwNmQyZWU4MTI5NGUyNWI5NWU0ZDg2YWQxYmY4ZmRhNmU3ODEyMTdiZGQ3YzQxY2U1ZDUwMGM1NjYzZmU4OTM3Y2U4ZThjZGQ2MTA4NmFhOTcwZTYwYWYxZDllYjUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RTdXBwb3J0L3pvZUhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0U3VwcG9ydC96b2VIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjk5ODZhNTAzOGRkZTA3Mjc1NDc1NTNjMTI0Y2RmNWQxNzk0YzAxOWMzZDBiNGFkYWFiMTZmNmRkYWQ5YTZjMDZhZGUwOTQzMzNmZDI1NmNlZDY5OWJlZmNhOWZhOTdmZDNmMDYyOGQzMGI3NDQxODgxMmY5YmZjNDliYWM1NzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW50ZXJuYWwtdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ludGVybmFsLXR5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzk3OGZkMGE5OTBjYzI3ZjFkNzU4YWVhNDRlZDE2ZDJkMTg2MGYzYWFmNTAwOGE5NDVmYmRkY2E5OTJkNGMyMDI1MGI5ZjBjY2ZlOTNjZGZiZWM1ZDFlMWE1MmY4YzhiYWZmNTEwN2Y2M2IzZjg1MDc2MTI0ZGFmZDk4YTAyY2MiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZUhhbmRsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZUhhbmRsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzZDk1MjRhNTNiNzcyNzgyZGY1ZDQyZGU3ZjVjZTU5MDM5OTk0YWRjZDIwOWM4ZWE0ZDRkOWZkZWM4MmZlMjA2ZmVmMjEwZGQ0MTM1MDE0YzIyZGJmYjRjN2MxNjliNWMyYWYyMzFhMzA1YmQ4NzhmYjdjMzY1ZDJlMDhhN2NiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiYTkzYWE3MTVmMTQ4ZTlkNTNiODRkODFiODZkMmM1OTRlZTdhOTdjYjVlODg2N2M2MDM4M2NiMTJiNzU3YzViNGE2NjQ5ZTQzMzdhMDE0NGE5Y2M2MzQzZDQ0YjY0NGFlNmNkYjExOWQ4MWIxNjk0ZDk2YWU5MDgyODVmZmE1NCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy96b25lLXYwLjIuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvem9uZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3pvbmUtdjAuMi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3pvbmUtdjAuMi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9kdXJhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImR1cmFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzNGRmMjY0NjRiMGVkMWJmZDFlYzMwMjM1MjNhMzE4M2I3OWJjOWUwMzc2MDJkNmMxOTIyNmRiNzlmMmQ4OWNjMjkwYjE0YTVmNWI3NTc0M2ZmOWE4ZWExNjI0NTQwNjk3YzcwODU1ZGI3MDhmYTdhYjg0OTQxYmRkMzUzZWZjNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kdXJhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kdXJhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzQwYzgxODI4MmZhM2RlNmE0YmRhOThlZjlkZmY4ZDVlZGRhY2JkMDViZmU2MjUxOTI3Yzg1NTE3OThkNDc3YjUxNTM0YWQ4NmE5NjY1MzVlOGFiYmE3YWMzMDY0OGRiMmQ3NzhlNDcxMTM5MjUxNTEwMTZiMGJlNzU2NTE4MzkiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2NvbW1vbi12MS4yLjgiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2NvbW1vbiIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiYXBwbHktbGFiZWxpbmctZXJyb3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiYmE0N2E4OWRiZGVhZTRkMGZjYjdjOTQ0YjIzYWUxODlkNTUwYmIzNmQ2YWY0NmQwMzdhMDQ0Zjk3ODAyYWJlZWJmOTQzOGRjYzkxMTRhNGY2ZDEyNjk4YjAyZGRhMjhjOGNjNDE3M2QwNmE4NmYxNmMxNzQ5MTc3ZGI4NzU0YSIKICAgICAgICB9LAogICAgICAgICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiZnJvbS11bmlxdWUtZW50cmllcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRhNDBmZDBjN2IyOWQyZjQ2MTcxNTFlNTAzZjcyMGZkNTU0YjY0MWYxODJjMWIzY2Q1ZGE0ZjRlMTcxM2VmNTIxMmI1NzY1OGNlOGNmNTM2ZWEwODRiNjRkYTE5ODlhOWRmZGE1NWIyNDM4YjJiNmEzMDUyYWVjMWMzMzhlYmZkIgogICAgICAgIH0sCiAgICAgICAgIi4vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpZGVudC1jaGVja2VyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTAwNmEzZTQyMTJkODE3Mzc5YjRmMTcwMjA3OWNhZDI4NDM1ZDQ5MGQ4YzVhYjNiZGEwNjBjMTU3ZDE4Y2FjMDFjMWUzMTQ1Zjk0N2NjNGMyNDM2MzA5ZDA4OTU5MDExOWY5YmQ1YTVkNDIxMTcyMDBiYzg5NzRkOGIwZjJkMzciCiAgICAgICAgfSwKICAgICAgICAiLi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAibGlzdC1kaWZmZXJlbmNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjEzNjMxZmM0ZmFmOGJhYTY3NGJiNDgyODhlNmE0NmI3ZGFhZTJmZGU3ODdjNWYxYTA1MWY5NmQxMWZkODlhYmQyNWNkNmU4OTAwNTUwMTIxZjU2ZmUxZjUxMGQzMmZjOWU0NDczOGM4ZmY3ODFjYmE2N2JiZDFhY2U2NTFiMDgiCiAgICAgICAgfSwKICAgICAgICAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm1ha2UtYXJyYXktaXRlcmF0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODk4YzYyNjE2YjRjZGIzZmM4MWU5NzEyOTA4YTM3ZGRiNTdiZWY2YjFkNTgyM2UwNGNmMjgxY2E5NWU4NjA2MDUxMDIzZTU0NWRkNmJkZGMyOTZmZWRlYmU0ZTY2NTk0ZTk5ODY5OTgwNWUyMDllZTdkYTQxYTkxYWY4MTdjOCIKICAgICAgICB9LAogICAgICAgICIuL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAibWFrZS1pdGVyYXRvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI0MzZlYzRjNjY2YzJhNTU2NzQ1YzVmYTU0ZWM4NjQ4YTNlY2QwZjMxMjAxMDk2YTE1MTBjYTE0MzM0OTk4OTY2YTY0NmMxZDA2M2I2MTAxOWNjZjY0NTUxYjNjYjVmMTI5MGUwNmE1OTE0ZDhhMWQ1ZjAzZWM2YjE3MWEzMWRmIgogICAgICAgIH0sCiAgICAgICAgIi4vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJvYmplY3QtbWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGY0MzdiNWYzZTMzYjc3M2RlNmNiZWQxMGU1MGE5ZTBiOTQ4YzczYTZhZTE2NDY2NDAxNDljYzhmMGY4MTY5NTg1YWFmMjU3ZDEwMjY2ZmMyNmJlNWUxZGMzOTRmNWEzNTFlYzZhNmFmODVkM2I5OTIyODgxOTlkYjhkMTY2ZTgiCiAgICAgICAgfSwKICAgICAgICAiLi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAib2JqZWN0LW1ldGEtbWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWFmMDQ1MWIyZTZkMGVlNDEzMDU4OTFlZjZjZjVhOWVjNGEwMzQ1ZjE4NDhmZTliMmQ5YzUxMjMyNDM2NjljNTRhYzUxYzUzODgyNGMzMDE5MGQyMDdlNDhmNTBjMDg0NTYzZjkzOGRhNWU2NDFmYjc5YmM0NjUwZWQwZWNmMTciCiAgICAgICAgfSwKICAgICAgICAiLi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInRocm93LWxhYmVsZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YjVkMzQyNmExNGMwZjc1NjI1MDRmYjc4NmE5YjAyNDBkZTRjYjg1Mjc5NGEzOGIwNjAzMzAwYTk5MGU1MTAzOWQ1MzVlNTNhZTY3ZWM3MTA1YzlhMzI1M2Q0OTZhYWZjNzMyMDU0YjZhYzI1NTE3NjNjOTBkNzUzZjU5ZjZiYSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IjogewogICAgICAibmFtZSI6ICJAZW5kby9lbnYtb3B0aW9ucyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MTc3NmVlYjIxYjFjNTUxZGEzZjliOGRjZGY1YWJkODhiY2JmNWY4ZTM4Y2IwNGVkYWJjOGNiOTY0YmI5NzUxOGZmNGNhY2I3NDNlOGFiYmFhYzIyODYxNjgxNWZiZTQwZTg2YmUyZDdkNDI4MTU3ODk1MmY4YWE4NjZhMWI5NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbnYtb3B0aW9ucy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW52LW9wdGlvbnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxZGIxNWQ0YjY2OTMzMjVkMzQ1MjM4MGNhNjJkZDk3YTdhZTRkMDMzYmY2NzUzYWJmNDE3NWJmOGYyYTQwNWRjYzkzZDg3N2RkZGVjMTBhN2JlNWI0ZmMzMjM2N2Q3MmUzZTc2ODAwZjdmNDhjNjA4ZGE0NTNjM2QyZDExNDQ4NSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXJyb3JzLXYxLjIuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXJyb3JzIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDFmOGY0ZjU3ZjRmNmUyYzhiNWQyOTY3MzY3ZmZlNGQwN2M5Y2IxNzYxYTdjNWM4ODQ4NmY0YjI3YTRlM2ZlNTdkMjk4NGE1OTA4M2NmNTI5NzE5MThmZjk5ZWJmYTZiODJhOGMwZDljNWQzNGVjNWQ5NDhiMTVjOTlkMmViMTMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IjogewogICAgICAibmFtZSI6ICJAZW5kby9ldmVudHVhbC1zZW5kIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjlkM2U5MTA0YjZlMjViMDJhNzM0OTc5YWQ0ZjE5Nzg2YmE4NzE2OWU4MGY4YjBkOGE1MTE2NzgxZDkxNmNhMWNhYTBjY2FhZDllY2IzYTQ1YWYxMjAxNTYyZjAwNWVhOGEwYTJlMGFkMjYyMmMwN2E5NThlYzg3ZmU0NTgxMDliIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sb2NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbG9jYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhOTVkZjRjYTMyODIwOTY4ZjEyMDNhYjVlYTI3MmI5NjFhZTMxMTYzNDA3MGNmMTUyMGU4YWFhNjJjYThlYTIyMjk3MDQ0YWM0ZTg4OTI2NzRmYmI5MWEzNDNhNzY1MGRjYmFmNTNiN2M3NDUyMWFkNWU1NTZiOGYzM2EzM2E0ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjkxMTE0NmM4ZTA0NTIyNzAwZTIzYzkzOGU2YmE1NzBhYzdlYTFlOTE1ZDllN2M0ZGNiYzUzZmMwZjdhYjhhY2I4ZGQ3Y2ZjMDdjNTJlMDJmMmM2NTc0MDRlZTg5ZWY3MzExYTMyNzk0YTg3MTFhYTdhYjQzYTU0MjBiMzJjODgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm8tc2hpbS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm8tc2hpbS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5MjA1MWY2OTQ0MmRiMTNmOWUyYjZjMTlkZGQxODljNTFhYjIxYTg0MDQyMTAzMDFmOGQyNjFiM2IzMTk0OGJkNTBjYjZmODUyM2UwMzVjNGYzZGY3NjMxMTU4MjhmYzJlYWRjOWMyYjEyNzE3ZmEzOTM4ZmQ0ZjFkNzg0YjEwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYWNrLXR1cm5zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFjay10dXJucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgwY2JhNzU3OThiZGEzOTIwZDc1ZDY4NWRmMzgzYTZiYmEwNzE1ZTEzMjY0ODRjNjNhZjgxZWJkZTdlODRiMzg1ZjA3YTczNzdmYzUyZmMzYzgwZTgwMzFiYTdmOTFiNWJkMjVjODdjNDk5NDY5ZWExZDEzNzA3Nzc3OWFiMWU4IgogICAgICAgIH0sCiAgICAgICAgIi4vdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmZWEwNDExYjIxNmM3MTQxNTE0Mzk2NjY0ZjhmODIxM2FjZDExMmU5MzBjMGY0ZmFjMDM0MjdmNTczN2Q3MzdkMGU5NDZiNmNjNGM2MDg4NGQwNDA1N2I3N2Y4ODA4YTM5NjczNjg1OTU1ODg3MjQzNWVhZWVlZDJmMTMyNjQ3ZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXhvLXYxLjUuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXhvIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXhvLXYxLjUuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDQyOWM4NWMyYWZmNjc2OTlkMDZkMDdkZDBhOTcxYWMyMGY3NzI2MzVlNjk2OGE2ZWFjMGFhYTNkMzdjNzdkODk4NmFiMzI5N2Y5N2M2NjIxMzc0M2VjZDI1MzhmZDJjNWU4NjEyZjE1ZTJiZmNkNWQ2ZTU2NTY3YWNmMzdjYjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhvLW1ha2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhvLW1ha2Vycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFiNzk0MTUxMmVkZTA1MTI5ZjNiMjBjZDUwODA3ZDVhYTEwNTM5YjMwODlkYjQwZTRiZGVkZGQ2NjRiNTc5ZjdkNjQ4OTAzMjU3ZjBjMTVlZDA2NmJkYTk1ZTM2Zjg5MDgwMzgyZjZmNmE5MzExY2E2ZjJlZTA4NzNkMDY4YTdhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by10b29scy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhvLXRvb2xzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDUwYzY4YmFhZWIxMDY2YThhNWUzMjI2MGU0MmNmYTU3NWQ0OTM5MDgwNzRhZmNhMzZlYmY2ODJmMTgwZGQwMWZmN2I5ZWQ3YTJkMDBmNzczNDA4NGUwODZmZTZkZTM0ZWY3ZDFiZGVlOGEwMGM1ZWQ1NjFiOGMzNTg0MGU2MTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZ2V0LWludGVyZmFjZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImUwMDMzNzgyZDU3MDIzOTYzM2ExOTE5NDc4Yjc5YjZkMTRmYWU1MzhjMTBlNjkzN2ZmMDJkMmY0YWM2NjRjYTBlYzY5YmIyMzQ5MzEwNWQ2NGMwOGMzYWY2OWQwZGZhNWJkNTFiNzA4NTRkY2VjYzZiMDYxNTE5ZTczY2RiYzE1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9mYXItdjEuMS45IjogewogICAgICAibmFtZSI6ICJAZW5kby9mYXIiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwNDM1M2MxZTI4MmM3ZjA4YTQ5ZDE2YWMyZWVhMDY5YTFjMzI1MzQwNWJlNjNkODU1YTgzOWIwOGI4MGQ5YmQzYzI3NDQ1YWUxZGEyYmMzMWJmNDYyMTNkNWIyZDQxNDM5MTE3Y2YxZWMwZjExYWYwMjQ3ZDk1NWE3NjE3NzU2IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9tYXJzaGFsLXYxLjYuMiI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vbWFyc2hhbCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjk5NzFhNGJhZjkyYjU0OGUyNDc0ODgwYzA3ZGFiZjM2MWYyZmQwMzhjNDAwZGE1MWQwYTQ0NjgwOTJlMzY1NTU3Njk3YzhlYjFjYWUzMjVjZmQ5ZmFmNzJhYjg2YzEzZjA0MjQwYTZlMTQ3M2E3ZTM5Mzg2MmRkMDQxMWI1NGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVBhc3NhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzlkZDY0ZDZmZTJlMjU4NGE2OWEwNmYzNmI5OWQ2YmY4MDJkNDY0NDNjNTc1NDRmOGU1ZjQ0MGEyMDI2NGNiMGY4ZDRjNDM2MmFmM2M1OTc2MDNmMjQ3ZmQxMzM0Y2U5MmI5YThhMjEwYzhjNjBjMjM5ZGJiZjNiNDMyYmE2OTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVUb0NhcERhdGEuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMzJiNDhjN2IwYTdjNGFmMWYwNThjNDUwMzBjYzUxYTIxNjExNjA3NWMyNGU1MDhkYTllY2VmNmJkNmQ0MWM0ZGIwODBhMmE4MzgzMjI4N2ZmNjIwODczZTY3ZjMxOGVjYTQyMzE1NDFkMjEwYjk0YjQ0MjFjOWUzNGEzOTg4YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlVG9TbWFsbGNhcHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkY2JkZjlhYWUzMTZiYzNlMzQwNWVmZGY3MDAzY2FhZTE4N2E5MzI5ODk0ZDkyOTJkYWM2NmQ1OTkwY2M1ZGZiODExMmY0MzNhODdkYzNkMmQxZWMwMjZkZDg1NjYwZGRmYTNkMTllZGU0OWFlYmJhYTI4NGQxYzAwOWVmODFkOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC1qdXN0aW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MGI4YzFhOWM1YjY2ZDdkZjA2MTg0NWJiNzM4ZmVhZjMwZGU3NTQ4M2RkZDg1M2QyYjU1N2ZhYmQ4MzI3OWQ0MDRhYzQ5ZmY1NTNiMmUzM2ExOTAwMWY1MDExNjQyMzU4N2E5YzQyZDM2M2RkNWU5ZmMxNDUzMTIyOGVhOTQ2OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYzJiZDI0MWUyMjkzYmEyMWFlNmFiMmM0ZmZlMzYwNDcxZmQ1YjkxNWE0OTc2ZGE0MWYxNjhmOTgwMDI0MDJmZDQ3Y2VlYTgxOGI4ZDBiMzRjYjhjNTdhYTk1MDI5MmY3Mjk3M2ExMGI0N2MwOGIwNDE3YTRjY2IzZjA1ODJjNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmVlYzY1NmQ1ZDRmZDIzYzI5YTU0YmE2ODVlZmJiMDkyZGNmMmY5NGUwY2JjYzg4MThhMTEyOWNhYzY4MTZhOTNlMTUwNGM1YWVkMGZmYzMxZTY2MmVmNDA1NDIxYmE1YzllMWI4NGQ4ZDQzMzBjMDY4MDNhYzIyYzUwMWFkMTEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmFua09yZGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yYW5rT3JkZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzMGQ4ZmNmZTRjMzdiYjU3YmE2MjMwZGI2NTFmNjgzNWI2ZWQ0MjkyNDM2MWMyODRhOGZjNWVkYmEyOWJkNzFmOTAzMGQxZTVjZTA2ZjFiM2FjZDVlNGM3ODc5Mjc5MDk4OThkZGY2OTJhM2E2MTQwZGZhZTk0YmQzMmZiYmNkNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vbmF0LXY1LjAuMTMiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL25hdCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMjBhOTQ3ZjEyZmRkNTI2NjEwMmNmNmUyMDAzODNhNDI4OTdlOWRiMzk5YTI3MmI2Y2NkYzA1MDIzMjM1NjNlMjk5YzlkNjNmZmViZDcwNTFlMWNjNjg4ZWZhNWY5MWQ2OGU0M2U2NGM1YzkzMWYwYjdhNTQ4NTVlNDNhMDQ2ZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Bhc3Mtc3R5bGUiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY5OTMyZDU0ZjViNDFhYzdiMjQxYjA0NDdkZWJiNWY3OTM1OWE0Y2FjNTJkN2NiNjg0NTU0ZDI1MTUxOTliOTlhNDVmMDFmZWM5MmFjYTQ3YWE1YjcxNTllNGVkYjk0YWM3Y2M0YjFiYTg2MTViMjM5NDQyODgxZWQ4OTBmZTE1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvcHlBcnJheS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29weUFycmF5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2YwN2FiOWQxNzNjNTAzODM4ZWM1YWM5MzA2MWI5N2JjMWUwMjc5YzZiZTNjNGQ3YmE0NmMxZTlhY2Y0MWMwYzk4MDBkYWRiOWEyNWJiOWU3OWJhNzIyYTBkNDM0NGJjY2ZiOTBiMjBlYjY3ZjFjZjkwODU4ODRmMmM3MmZiYWEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29weVJlY29yZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29weVJlY29yZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImYxYzQ5Y2M2ZDU3N2FhYjJiZWE3OGQ0NDNjZThkZTcxMzhhNDhhZGQwMThhMjIxNTY0ZmExNDQ0YjE1ZWFhNjliNjIyMTYxMTgwODVlZTI2NTU1MmVlNDhjNmVkZjZlYTU5YTAwMzhlODM3NWU1NDE0OTgyZTIxMmE4OTFmZTI4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODNjMGJjMGJlYzE5NGZkOTExYjQ5Yzg3OTM5OTg4NmRmNmQ2NmRiNzlmNzUwZDI0M2Q2NjVkOWJhZmExY2NjNDQ3MmY4NDMzODY0MWIwZTE4NGNhYzM5YzU3N2RmYTExNWU4YjNkYmJmNjkyN2Y5Yjc3YjBkNzI4Mzc0YzcwNmYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXJyb3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vycm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmVjZDBlM2RlYTY0YTkxOTJjNTc4ZDA3OGJhZmRhNjhkMTVmM2JmOGM1ZjdmNzJkZWE1M2JmNjA0MmVkZTI2NjJhMWEzMGU1ZDVkYTRmMTYyNzY0ZTQxMTExZGIwNmRhOWI0YjI1YzQzYTkxNzlkYTI2MTJhYjA2ZDhhNWU4M2YiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXRlci1oZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pdGVyLWhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYThkN2NlMDUxYmVjODc1NjRlN2M0ZjZhZDEyMDM2MjY5ODJmNDFhMzIzOGE1MTAyNWZhYTUzMTAxZDYyN2E1MzAwY2JiNDA2NjFiMzhlOGRiMTIwMDAzMjJkN2FkZjk1OTJjZjBhNWJhN2NkNjMxNjljMjE3YjQwYmM0OGMzMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWtlLWZhci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZS1mYXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZWRhYjU5NjhiNjkxYTI5YTJmZDg1NGNhMzMxYmQ0NzVlMGY0N2Y1NTRiZjFmOWRkNjdjYzE3Y2YyN2ExMmM5ZDc2NTQ2YWQ2ZmI2ZTI5ZWI5OTYxNWY0NGNiNWYwMTU1MTQyODZhOWFiMjNmNDQ4YmJjNDViMDg0MWMxZGFmOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWtlVGFnZ2VkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlVGFnZ2VkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTAxZjgyZjliNDA2NDNmNTlhZGMyMDJkYTcxYTAxYTU3YWY2MDQ0ZmE1ZGU5ZjliZjg5M2I5MzI3OWNhMWExNWNiYTEwYmZkNTZjMGFkOTMwMDYzN2FlMmQ2MmQwOGViODNiYTcwNjNiYTgwNWRmZDFiZWFmMTI0YmMyZmVhMjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2U1NTYwNDdlZjAzMWRiNDM2Yzg0ZmEzMjhiMzczZmI0OGJhOWU0NjZlYzI0MmQ0MGYxZmYyZmZiMmU2ZmUwZDI5MGNiY2NkMDkwNWQxZjI4MTA5NmRkZDUzN2I4MGNmYWQwMTY3Y2EyNjE5NTM1OTk3YTIzMjg4YjM2ODhjYzIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFzc1N0eWxlT2YuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Bhc3NTdHlsZU9mLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQyYTllZmJiMjg1NmU2ZmZjMGYzODljODVkZmRkYTg0ZTYxMWMzYmY0N2JhNDc4MGYyMDc4MWI5NjM3YjYwMjIxYmUxNDgwMzhhODA5ZjJkNmZiNzZlMmRlNjQ2OWZkYWU2M2MwMDUyNTZiYTU0ZTQ5NmU3NGZiZWQ1Mzk3YWUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmVtb3RhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yZW1vdGFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjOTEwMDkzODc0NzVjYjk3MzdiYzhhZDUwZjk4YTQ4OGM4YTUxMTEwMzMyNmI1M2I0Mjk0OTE3YWQ2ODY4ODNhMGE0YmFkNmRiMDZhOTRjMDUwNmJlZjE0YWNiYWRmMzA4NTI4YjkxZGEyNGIyYTUwZTk1ODFhM2VjYTkyMDc1NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zYWZlLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3NhZmUtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFkNmNiZmIzYzNmOWUxOGEwMDU2ODdjNTk3ZjFlZmI3Nzk1ZGIzYWMzNjk3NDQ3Y2FhMmIyODI0Y2MxYmFiMTRjYjFiOGExYTcwNmFkYTEyOWQ3OThiMGE5MmQwOWE5MTNmMDgzYmZjN2I2MzY3NmU3MTM4ZjVmYmZlOWMwYzg1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0cmluZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RyaW5nLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzliMjEwMTcxZGZmMjk2ZjM4YjQ1NzcwNmFiMDIxZWFiYjc1NjBlMjU4ZDkzZmZmNjhiNTZlOTZjNmMyYTZjMmM5ZDk3MTZiOTY2MGVhOThjZWQ5ZmY0YWI2ZGYwMmFhMDFiOGY4MTg2YjcwNmU1ZjcwYmEyN2RmZTk1ZWQ4OWQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3ltYm9sLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zeW1ib2wuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2ODVjNGVhY2E3OWU4MWNlNzMwYzVjY2FjNDEyMGY5MmJmNDhiMzE3ZjM0ZDgzNWFkMjEzOWVjNzExMTU1OTNjZTRlOWY5YWM2OGQ3N2I5ZGQ2YjZiMzk3NWJmMTY2YmY0MWRlMzgyNGVlY2ZlNWJiMTY5ZTU3MWIzM2JhZmVjMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90YWdnZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RhZ2dlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNkZDBjZTkyZWU4YjVlNmQwMDk3YTU3ODgyNDJhODc5ZTcyNmM2N2M1NGZmYjBlM2JhNGVhZTM5OTY0MWRjNGQxYWM1ZTU2MTlmNWY1NjZlNmEzZWRkODQ2Y2Y4NzNiNWMxYzU5Nzg1YjI1MWZkMjA0ZTkwODliMTdhYzAxNDk2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzMjlmYzE1NDA1Mzc3MTVkZjg1NGEzOGE1ZTQ1YWU2ZDIyODZlOWZiMTUxYzUyODU2YzliOWRmYzFlMjJjZDYzMDllZDMyMjIzMGU2ZmVjYzZhMjQ4YTZiMzQ1MGEzZmYxNjRhNjc0ZWVmZjgyOGM5MTVlYzQ4MjAzYmRjNjY0NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcGF0dGVybnMtdjEuNC43IjogewogICAgICAibmFtZSI6ICJAZW5kby9wYXR0ZXJucyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NjllY2E5OTJhZTJjZjA5ZDQ2ZWFlN2VlYTAwN2U5NWJiNGM2NGFhYTM3YmE1ZTQ2NjI1ODZiOWZkZmNmMDk0NDhmOWYxZDVkYjlmNDE2N2UwYTdiNzk2ZmU5MjBhNWZkMGE5OGQwYzU0NjQ5ZTIxNzYzMDNkYWY3ZWE0NDk4ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NoZWNrS2V5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTk3MmZhMDA0YmJjZGVjMzNkMmIxZTNiN2Q5MTgwNDBmNWY4MmE0OGZmN2UwY2MzYTI0YzYwNjYyMjZkNjExMWVjYzc0OTQ2NGM4ZGVkNWE4NThmODVkOWQ2ODk0ZDY3OTFmMWIyNTc3Y2U4NTQ2YTU5ZDk2ZDUyMzdiNDI5MjYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb21wYXJlS2V5cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMxZDg1NDhiMzkwY2MyNjYxNzVjYzlmZTY3OTU4NjFhNDIzN2E5ZDk0MmEzZDg5Y2ZmNjI1OTQ2MjMwNDQ5MzQwZTQ2YzU3NWUzNmE3M2Y2YmEzODU1ZTBiZmU1OTJlMmE1ZGZiNjc1MmFjMDBlNjdlMTNhYzVkMDQwMzgxYjgyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29weUJhZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb3B5QmFnLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjU1OTQ4NThkZTgzZDM1N2M1Y2U4ZGIwY2VlZDZmMWZlYmJmMzVhZGYwYWY3MWNiNjcwYTQ4ZGYxNDM4OTdkYmI5Y2Q5YWVjNmZmN2IxYmM2M2U2ZDNlMmQ3MzIwMTdhODA4OGQ5ZmRiNGQ3NTZmYjIwZGE5NjlkOGU0MmU0NzQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb3B5U2V0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NvcHlTZXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwYmIxM2JhMDZhYzg2Y2FlNTE4YmNiYjRiZmI3NTY4OTgwMTBjN2ZiZjA4MTgwZTU0ZDZiMWRkNTQ0NzU2N2M4ODNkNGU4MGY4NTVmODE2M2JiOTYzZGY5NzkzYzM0NWU5YzNmZjJiMzRhYzAzYzQzYmUyZTJkNTYwYzJjOTM0NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGQ4ZmRjNzAwMzQ0NTg4N2VkYjdkYTIzMTc4NzdlN2RmNTNjNjNiZmM4ODRmZDVjZGI1ODdiYjY2ZTg3Yzc4MGRmMzdmZGViZDMyM2Q2ZWJjMGNkNjEzODZjOTI1NTI1MTlkNGVkYTk3MGUyZjhjNTAyYTFiN2RlZmJiYjMwZjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMWIzYTJmNDQ4ZjkwZjIzODI5YjQ2Yzk3M2NiNmM2OTZhOWZlMmMyMzRkNmYyZTBiZmNjZWUxZTdjOGU1MjdjNDg1MWY4YmQ1YmE4N2UwMGVlZWFhZjljYzQyNzNhZWRmNmZhMzcxNWRkMjc2NDA3ZTcyYjhjNjEzNDA2ZjA1MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNiODViODEwZTMzYTJjY2I5NTNhMDFmY2VhZjAwMzZiNjkxNDFhMWJlOWQ4MzI4ZWViNTkwYzk3MDk2ZGE2YzNmMTU3NDViYjAzNzgzOTFkZTJmNzkwMDg1YzBlYTZjZjU4MGFkOWQwZDA5NGEwMjQ0MjRiODJmYjhmY2E2Mjg3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMWI5ZTg1N2NlZTg4NGFiMDhiOGY5OGY4YzJmZDBlYzYyMDE5MmMyZjIxNDBlNzFhMmM5YzJhNGRiYWFkZDc4ZmRlZjc5YTY5NWQ3Zjk2MmNmOTE5YmQ2MDkxMTU0YmQ1Y2NiM2JjNDVkYjIzNGVlOTA1NTkwZjIzMWNkNTlmYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ1YzA3NWI3NGU3NGQ1YmIwODg4ODkxZTNjM2QyMWY0YjYzMjk1MTZmNDVhM2NjNThhYjQ3YzE0NDRmZDgxNjgyODUyY2JhOWI5MTJlOGQxOWFlNmNhMTM4ZDk5ZTA0MmFmNzk4ZWE0Njg5OTg1Mzc0MDZlMjE2NGU2MDNlYzEyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzNzY1MDVmNjhiZGMzY2I5NGU2NTc2NGUyZmUzMmVjZTkwMjZhMTM3N2U3MDQxZWVhZGM3NTAxODBhOTdlOTgyZjdjNGFiOGY3MzE4ODg0ODQyZGQyMjU4NTI5ZGI0MjU0NGY1OGJkMDk5MDkzOTQ4YjBjNWMzNDBiODZlZTlmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YzYyYjU4MDVjNDI1NTc2YmQxMWJhMzg3MTA2ZTcyYWQ2OTVhNzQyMjNmNThkNmY4OTFjYmYxOGE2NmNlNDI2ODExYjEyZjM4ZGIxMzg0ODc3MGM5MmZlOWE4MzQ3M2I0MmYxNzBkZjQ2Y2I4NmQyNTQ4OGI3ZjVmZDFkOWVhNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZW1vLXJhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lbW8tcmFjZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ2MjI1ZjFiNTNkZjFiMjhiMzllMzc3MjdiYTBkZjQ5MTU4YzEyNzJiZmMxMTUxZTNlZDk3OGRlNWU4MGJiNTM1ODBmOTA1YTM3MjU4NjIyYmFjM2ZjOGY4M2UwOTA0MWViZjc0MWQ4MDU2YWZmYjYxZDJiNjFkMmRiNGMzZWI5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdhOGM1MjM0NzVlZTA1ZGUyODAxYmQzNmQ5NzY3ZDY4MjVhYTYwZGRhMDRkNDdlNDQwNDllYzRmNDkwODYzNjFhMzllM2ZiMTk4ZmFjODQ4YzM1NjBmZjVmNTVjNzczNTIyNTUzNWVjYTU2M2VlYTI3Njc1YjE4YTRmOTQ3NmYxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjIiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzNzY1MDVmNjhiZGMzY2I5NGU2NTc2NGUyZmUzMmVjZTkwMjZhMTM3N2U3MDQxZWVhZGM3NTAxODBhOTdlOTgyZjdjNGFiOGY3MzE4ODg0ODQyZGQyMjU4NTI5ZGI0MjU0NGY1OGJkMDk5MDkzOTQ4YjBjNWMzNDBiODZlZTlmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YzYyYjU4MDVjNDI1NTc2YmQxMWJhMzg3MTA2ZTcyYWQ2OTVhNzQyMjNmNThkNmY4OTFjYmYxOGE2NmNlNDI2ODExYjEyZjM4ZGIxMzg0ODc3MGM5MmZlOWE4MzQ3M2I0MmYxNzBkZjQ2Y2I4NmQyNTQ4OGI3ZjVmZDFkOWVhNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZW1vLXJhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lbW8tcmFjZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ2MjI1ZjFiNTNkZjFiMjhiMzllMzc3MjdiYTBkZjQ5MTU4YzEyNzJiZmMxMTUxZTNlZDk3OGRlNWU4MGJiNTM1ODBmOTA1YTM3MjU4NjIyYmFjM2ZjOGY4M2UwOTA0MWViZjc0MWQ4MDU2YWZmYjYxZDJiNjFkMmRiNGMzZWI5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdhOGM1MjM0NzVlZTA1ZGUyODAxYmQzNmQ5NzY3ZDY4MjVhYTYwZGRhMDRkNDdlNDQwNDllYzRmNDkwODYzNjFhMzllM2ZiMTk4ZmFjODQ4YzM1NjBmZjVmNTVjNzczNTIyNTUzNWVjYTU2M2VlYTI3Njc1YjE4YTRmOTQ3NmYxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjYiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjYiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzNzY1MDVmNjhiZGMzY2I5NGU2NTc2NGUyZmUzMmVjZTkwMjZhMTM3N2U3MDQxZWVhZGM3NTAxODBhOTdlOTgyZjdjNGFiOGY3MzE4ODg0ODQyZGQyMjU4NTI5ZGI0MjU0NGY1OGJkMDk5MDkzOTQ4YjBjNWMzNDBiODZlZTlmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YzYyYjU4MDVjNDI1NTc2YmQxMWJhMzg3MTA2ZTcyYWQ2OTVhNzQyMjNmNThkNmY4OTFjYmYxOGE2NmNlNDI2ODExYjEyZjM4ZGIxMzg0ODc3MGM5MmZlOWE4MzQ3M2I0MmYxNzBkZjQ2Y2I4NmQyNTQ4OGI3ZjVmZDFkOWVhNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZW1vLXJhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lbW8tcmFjZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ2MjI1ZjFiNTNkZjFiMjhiMzllMzc3MjdiYTBkZjQ5MTU4YzEyNzJiZmMxMTUxZTNlZDk3OGRlNWU4MGJiNTM1ODBmOTA1YTM3MjU4NjIyYmFjM2ZjOGY4M2UwOTA0MWViZjc0MWQ4MDU2YWZmYjYxZDJiNjFkMmRiNGMzZWI5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdhOGM1MjM0NzVlZTA1ZGUyODAxYmQzNmQ5NzY3ZDY4MjVhYTYwZGRhMDRkNDdlNDQwNDllYzRmNDkwODYzNjFhMzllM2ZiMTk4ZmFjODQ4YzM1NjBmZjVmNTVjNzczNTIyNTUzNWVjYTU2M2VlYTI3Njc1YjE4YTRmOTQ3NmYxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzNzY1MDVmNjhiZGMzY2I5NGU2NTc2NGUyZmUzMmVjZTkwMjZhMTM3N2U3MDQxZWVhZGM3NTAxODBhOTdlOTgyZjdjNGFiOGY3MzE4ODg0ODQyZGQyMjU4NTI5ZGI0MjU0NGY1OGJkMDk5MDkzOTQ4YjBjNWMzNDBiODZlZTlmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YzYyYjU4MDVjNDI1NTc2YmQxMWJhMzg3MTA2ZTcyYWQ2OTVhNzQyMjNmNThkNmY4OTFjYmYxOGE2NmNlNDI2ODExYjEyZjM4ZGIxMzg0ODc3MGM5MmZlOWE4MzQ3M2I0MmYxNzBkZjQ2Y2I4NmQyNTQ4OGI3ZjVmZDFkOWVhNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZW1vLXJhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lbW8tcmFjZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ2MjI1ZjFiNTNkZjFiMjhiMzllMzc3MjdiYTBkZjQ5MTU4YzEyNzJiZmMxMTUxZTNlZDk3OGRlNWU4MGJiNTM1ODBmOTA1YTM3MjU4NjIyYmFjM2ZjOGY4M2UwOTA0MWViZjc0MWQ4MDU2YWZmYjYxZDJiNjFkMmRiNGMzZWI5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdhOGM1MjM0NzVlZTA1ZGUyODAxYmQzNmQ5NzY3ZDY4MjVhYTYwZGRhMDRkNDdlNDQwNDllYzRmNDkwODYzNjFhMzllM2ZiMTk4ZmFjODQ4YzM1NjBmZjVmNTVjNzczNTIyNTUzNWVjYTU2M2VlYTI3Njc1YjE4YTRmOTQ3NmYxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzIjogewogICAgICAibmFtZSI6ICJAZW5kby9wcm9taXNlLWtpdCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xMyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODM3NjUwNWY2OGJkYzNjYjk0ZTY1NzY0ZTJmZTMyZWNlOTAyNmExMzc3ZTcwNDFlZWFkYzc1MDE4MGE5N2U5ODJmN2M0YWI4ZjczMTg4ODQ4NDJkZDIyNTg1MjlkYjQyNTQ0ZjU4YmQwOTkwOTM5NDhiMGM1YzM0MGI4NmVlOWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdjNjJiNTgwNWM0MjU1NzZiZDExYmEzODcxMDZlNzJhZDY5NWE3NDIyM2Y1OGQ2Zjg5MWNiZjE4YTY2Y2U0MjY4MTFiMTJmMzhkYjEzODQ4NzcwYzkyZmU5YTgzNDczYjQyZjE3MGRmNDZjYjg2ZDI1NDg4YjdmNWZkMWQ5ZWE0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lbW8tcmFjZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWVtby1yYWNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDYyMjVmMWI1M2RmMWIyOGIzOWUzNzcyN2JhMGRmNDkxNThjMTI3MmJmYzExNTFlM2VkOTc4ZGU1ZTgwYmI1MzU4MGY5MDVhMzcyNTg2MjJiYWMzZmM4ZjgzZTA5MDQxZWJmNzQxZDgwNTZhZmZiNjFkMmI2MWQyZGI0YzNlYjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2E4YzUyMzQ3NWVlMDVkZTI4MDFiZDM2ZDk3NjdkNjgyNWFhNjBkZGEwNGQ0N2U0NDA0OWVjNGY0OTA4NjM2MWEzOWUzZmIxOThmYWM4NDhjMzU2MGZmNWY1NWM3NzM1MjI1NTM1ZWNhNTYzZWVhMjc2NzViMThhNGY5NDc2ZjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjE0IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4Mzc2NTA1ZjY4YmRjM2NiOTRlNjU3NjRlMmZlMzJlY2U5MDI2YTEzNzdlNzA0MWVlYWRjNzUwMTgwYTk3ZTk4MmY3YzRhYjhmNzMxODg4NDg0MmRkMjI1ODUyOWRiNDI1NDRmNThiZDA5OTA5Mzk0OGIwYzVjMzQwYjg2ZWU5ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pcy1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2M2MmI1ODA1YzQyNTU3NmJkMTFiYTM4NzEwNmU3MmFkNjk1YTc0MjIzZjU4ZDZmODkxY2JmMThhNjZjZTQyNjgxMWIxMmYzOGRiMTM4NDg3NzBjOTJmZTlhODM0NzNiNDJmMTcwZGY0NmNiODZkMjU0ODhiN2Y1ZmQxZDllYTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWVtby1yYWNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZW1vLXJhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0NjIyNWYxYjUzZGYxYjI4YjM5ZTM3NzI3YmEwZGY0OTE1OGMxMjcyYmZjMTE1MWUzZWQ5NzhkZTVlODBiYjUzNTgwZjkwNWEzNzI1ODYyMmJhYzNmYzhmODNlMDkwNDFlYmY3NDFkODA1NmFmZmI2MWQyYjYxZDJkYjRjM2ViOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YThjNTIzNDc1ZWUwNWRlMjgwMWJkMzZkOTc2N2Q2ODI1YWE2MGRkYTA0ZDQ3ZTQ0MDQ5ZWM0ZjQ5MDg2MzYxYTM5ZTNmYjE5OGZhYzg0OGMzNTYwZmY1ZjU1Yzc3MzUyMjU1MzVlY2E1NjNlZWEyNzY3NWIxOGE0Zjk0NzZmMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vc3RyZWFtLXYxLjIuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vc3RyZWFtIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3N0cmVhbS12MS4yLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vc3RyZWFtLXYxLjIuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyZGRmYTNhZWZhZDk0NmEyZTFhNGUzYWRkN2NlMThkMWMzZWMxM2ZkY2YxZDViNzRjMWM5ZmRiM2E1ZDVmODZlYTA1ZmJhMWE0NzRkOTAwZTdlZjhhMmFmYjUzN2JlOGZkYzNjOGJjNDI1NGYwNjA3Y2I0MTZmMmZkNTk0ZmM2OSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiamVzc2llLmpzLXYwLjMuNCI6IHsKICAgICAgIm5hbWUiOiAiamVzc2llLmpzIiwKICAgICAgImxhYmVsIjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAibG9jYXRpb24iOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMjdkN2RkNjIzZWZmYWRkZWUwN2Q1ZGEwNmIyMDE4ZTY2Y2YyOGFkMDk0NDRmMWZhNzJkYzFlMGU2OTJlM2JiMzRkOTdiODA1ZjM3NDYwNDlkZWM3ODUxYWJiYmVmMWI4NWIyZmYxMDBmMTY4ZWRlNDBmNDFmMTdhOTM3NGQ2NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTg5MjZhZmRiNTljNWU1YTA4NjNkNDcxMzI0OTNlYThiZTYzOTIxMzEwZWU2N2RhNmZmNDc5ZDU2M2M5NTUyZGQ5YTIyNDI1NWE4MTg3NjRmMjc4MTJiOGNiMzQ0N2ExZmM5Y2RiY2U3Yzc3MTE4YmYwMGI3MmQ5MzM2MzIzZjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDZjZWIxOTgzZmU0ZDEyYWM2MjdkOWYxYmQwNTY1MGRiYWNmMTQ0YjdmMzlmNjFlMGNhNzQyM2Y5OGNmOWIwNjE2NWRmY2Q4OGY2MTdhZjg2NmEwZDE1NzA3MGE5NzRlOGY5MmNlMWM1MDEwOWQwMDc3NDg4ZjQyOGMyZTA3OWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk2ZmVlMTZkYWIzOGEyMWYwYjVjOGEwYjFmMTBjM2I3M2EzMTU3ZjZlOWY1ODkzODA5NmI0Yjg3OWIyYTA5OTNmZDdjOWRkZDdiMzkzMGU4MDI2MGUxYTg3YWIxYTRhYzY3NjFjYjc1Nzk4NThmZTM5ZTAxMDlkYzVhMTYwNTNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL21ha2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFrZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDlhOGUzMzg0MGY1MGE3ZGEyMzJjODgzNmM2ZmJhMjRiM2Y3NTBlZjJiMzMxZGFiMTY1YWZlZDYwNTA4YmY3M2E3ODE4ZTI3OThjMmVlZGIzZDA0ZjNkNjcxN2Y5NDNmYjkzMDg4NmZlNjRlOGE3ODMwNDg2NTk2NzRhOTQyYTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGZmMzE4OTU5NjFmMmM5ZmRmMzE0NDVkZDY4OGYzZGNmN2ZmNTE1MDcyZjgyMjliZTQ1NTE4NTY4NDIyMjJmNzFjNjVjODUzMzFhYmJkYWQ5ZTNkNTU1ZDkxZDVmOWZiNmZmMTgxNmI5MmM2Y2YwOTdjYzlmMmM4Y2NjY2JkYTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzEvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhlZDM5YzQ1ZDk3YzBmZDJhMTQxYmRhMWNjNTQ4NDQ5NGNmNTlmNjYwYjQ3OGM0ZDM5YTNmNzJiZTBkMzRhZTAwMDkyM2U3ODNmNjBlY2IxZTcxMzI5YTMwZGU3MzE1MDQ4OTVhNmQ0Y2YwMjJlNmUxYzcyNmNlOWQ5ZGQ2ZDNkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJrcmVhZC1jb250cmFjdC12MC4xLjAiOiB7CiAgICAgICJuYW1lIjogImtyZWFkLWNvbnRyYWN0IiwKICAgICAgImxhYmVsIjogImtyZWFkLWNvbnRyYWN0LXYwLjEuMCIsCiAgICAgICJsb2NhdGlvbiI6ICJrcmVhZC1jb250cmFjdC12MC4xLjAiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9hc3NlcnQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9hc3NlcnQtdjAuNi4xLWRldi0wNzA1ZjJjLjArMDcwNWYyYyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2Fzc2VydC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9nb3Zlcm5hbmNlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lL2V4cG9ydGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9leHBvcnRlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L2R1cmFiaWxpdHkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9jb250cmFjdFN1cHBvcnQvZHVyYWJpbGl0eS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L2luZGV4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvY29udHJhY3RTdXBwb3J0L2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvcmF0aW8uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9jb250cmFjdFN1cHBvcnQvcmF0aW8uanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZS9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3R5cGVHdWFyZHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2R1cmFibGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vycm9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdkYTI0M2I4YzQ1M2E5ZDg4MWE4N2QyY2RlOGRlNzlmZmFhZjQwNjJlNGRjY2JiMGJjMTMwZGJkYjQ5OTQ3YzVkNWVmOWZkNDIxY2IwODg4NjgyMmY4YTI2ZmU0ZWZiNDFlOTgzYjVmNzE3MjdlNTAyZWJlYTU1ZTE5NzgwMzBmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc1YmQwMjY1OTM1YTAzMjhhNzkzZTQzNDU0MzMzZmE1ODY4MDg5ODM5ZjJmOTMzZjNjMjUzZmQ0MmMyMDMwNTc1MTMzOGY3NTk1ZTMyOWJmNmViYzcwNGY5NzFjNDc3NDk3YmZjNTMyMTZlOTBmMTJhMTUzOTJmZjJhNjk4Y2Q0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tyZWFkS2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rcmVhZEtpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImUyYjRkZDAzODY0OGI0MWJmMjY1NWZkNjA5MzI2YzE1NDRlMzE5MTczZTZiNjA4NDllYzQyNmI5NTBjMGJiNDJhYTA3YTY1NzliZGI0ZDUxNmJmNWNmOWM3MGIzOGJjYjAxNGY2MjQ1OGQ0NDAxOWUzMDkyMWM3YzYwNDYwZTYwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcmtldC1tZXRyaWNzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJrZXQtbWV0cmljcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI5NzUyZWI0ZmQzODMzODkwZDM5NjljZDZiNzVkMTE3MjEyYWIyZDFkMTEyMDRkYTAyY2E1YjRhMDgxMmM4N2E3Y2M4ZDcyNWYwNzRhNGFjZjhiODI0ZTI5YjU2MDVhM2JmNmFiZGJmYjY1NWU2MjUwZTIxOTBiMTM4ZGQ2N2FkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RleHQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RleHQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxMmYzNzkyMjFhZGRlOGIzMGJiYzRjODVhN2RkMDU0YjNjZGFjZTk1NjU5ODY5NGFkZGNhZDU0MDcyOTM0M2VmMjhjYWRkZDg3ODllNjVkMTExMDdhYzFiY2RlZDRmYzZiOTMxMTEzODBkMzkwODY3NWU4ODNhOTgyMmY1ZmE5YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlLWd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZS1ndWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNTM4YjhlNDlmMWViYzk2MWJkZDk5MWZhZjQzYWYxODdlN2YzMjViNjE1MzAyMDk1ZDY3OTcwZTVmY2Q1OWJlN2VjMDgyY2U3ODA2MWJiODA4MWE3NzRkNGEyMGUzZTVmNmJlZWYyZGQ2OTM1OGE4OWQwZWQyMWQ3OTYyNzUwMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy91dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxNmZhNDlhYmUyMzk0NTM3ZGVkMmE2MGUxODk2ZWJlNjYxYzRiNWI0ZmZkMDZmNTQ1YmFjOGYxNjc3OTVjNzFlMTE5NzExZGQzMWFiNTNmZGI1M2Q0OTk5NGVhZGM0Y2YxY2UxY2M3MzA5NjYzZDc1NmQ5YTczNGNlNjI2OTk3YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn1QSwMECgAAAAAAAAAAAOasG5lrBwAAawcAADkAAABAYWdvcmljL2Fzc2VydC12MC42LjEtZGV2LTA3MDVmMmMuMCswNzA1ZjJjL3NyYy9hc3NlcnQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkZhaWwiLCJOb25OdWxsaXNoIiwiYW4iLCJhc3NlcnQiLCJkZXRhaWxzIiwibWFrZUFzc2VydCIsInEiLCJxdW90ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFuLCAnbmFtZScsIHt2YWx1ZTogXCJhblwifSk7JGjNj19vbmNlLmFuKGFuKTsgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbmNvbnN0e2ZyZWV6ZX09T2JqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2xvYmFsQXNzZXJ0PWdsb2JhbFRoaXMuYXNzZXJ0OyRozY9fb25jZS5nbG9iYWxBc3NlcnQoZ2xvYmFsQXNzZXJ0KTtcblxuaWYoZ2xvYmFsQXNzZXJ0PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAYWdvcmljL2Fzc2VydCwgbWlzc2luZyBnbG9iYWxUaGlzLmFzc2VydCwgaW1wb3J0ICdzZXMnIGJlZm9yZSAnQGFnb3JpYy9hc3NlcnQnYCk7XG5cbiB9XG5cbmNvbnN0IG1pc3Npbmc9LyogICAgICAgICAgICAgICAgKi9bXG4nZmFpbCcsXG4nZXF1YWwnLFxuJ3R5cGVvZicsXG4nc3RyaW5nJyxcbidub3RlJyxcbidkZXRhaWxzJyxcbidGYWlsJyxcbidxdW90ZScsXG4nbWFrZUFzc2VydCddLlxuZmlsdGVyKChuYW1lKT0+Z2xvYmFsQXNzZXJ0W25hbWVdPT09dW5kZWZpbmVkKTtcbmlmKG1pc3NpbmcubGVuZ3RoPjApe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbml0aWFsaXplIEBhZ29yaWMvYXNzZXJ0LCBtaXNzaW5nIGdsb2JhbFRoaXMuYXNzZXJ0IG1ldGhvZHMgJHttaXNzaW5nLmpvaW4oXG4nLCAnKVxuIH1gKTtcblxuIH1cblxuY29uc3R7ZGV0YWlscyxGYWlsLHF1b3RlLG1ha2VBc3NlcnR9PWdsb2JhbEFzc2VydDskaM2PX29uY2UuZGV0YWlscyhkZXRhaWxzKTskaM2PX29uY2UuRmFpbChGYWlsKTskaM2PX29uY2UucXVvdGUocXVvdGUpOyRozY9fb25jZS5tYWtlQXNzZXJ0KG1ha2VBc3NlcnQpO1xuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgTm9uTnVsbGlzaD0odmFsLG9wdERldGFpbHM9IGB1bmV4cGVjdGVkICR7cXVvdGUodmFsKX1gKT0+e1xuaWYodmFsIT1udWxsKXtcbi8vXG5yZXR1cm4gdmFsO1xuIH1cbmFzc2VydC5mYWlsKG9wdERldGFpbHMpO1xuIH07JGjNj19vbmNlLk5vbk51bGxpc2goTm9uTnVsbGlzaCk7XG5oYXJkZW4oTm9uTnVsbGlzaCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGFuKHN0cil7XG5zdHI9IGAke3N0cn1gO1xuaWYoc3RyLmxlbmd0aD49MSYmJ2FlaW91QUVJT1UnLmluY2x1ZGVzKHN0clswXSkpe1xucmV0dXJuIGBhbiAke3N0cn1gO1xuIH1cbnJldHVybiBgYSAke3N0cn1gO1xuIH1cbmZyZWV6ZShhbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3NlcnQiOlsiZ2xvYmFsQXNzZXJ0Il0sImRldGFpbHMiOlsiZGV0YWlscyJdLCJGYWlsIjpbIkZhaWwiXSwicXVvdGUiOlsicXVvdGUiXSwicSI6WyJxdW90ZSJdLCJtYWtlQXNzZXJ0IjpbIm1ha2VBc3NlcnQiXSwiYW4iOlsiYW4iXSwiTm9uTnVsbGlzaCI6WyJOb25OdWxsaXNoIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAULvaB/AQAAfwEAADYAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL2hlYXAuanN7ImltcG9ydHMiOlsiLi9zcmMvaGVhcC5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL2hlYXAuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2hlYXAuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAPQAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2V4cG9ydHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABLcf+RZCgAAWQoAADoAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9oZWFwLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9leG8iLCJAYWdvcmljL3N0b3JlIiwiLi9tYWtlLW9uY2UuanMiLCIuL2tleXMuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiZXhwb3J0cyI6WyJtYWtlSGVhcFpvbmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFyLGlzUGFzc2FibGUsbWFrZUV4byxkZWZpbmVFeG9DbGFzcyxkZWZpbmVFeG9DbGFzc0tpdCxtYWtlU2NhbGFyTWFwU3RvcmUsbWFrZVNjYWxhclNldFN0b3JlLG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUsbWFrZVNjYWxhcldlYWtTZXRTdG9yZSxtYWtlT25jZUtpdCxrZXlzLHdhdGNoUHJvbWlzZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiaXNQYXNzYWJsZVwiLCBbJGjNj19hID0+IChpc1Bhc3NhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXhvXCIsIFtbXCJtYWtlRXhvXCIsIFskaM2PX2EgPT4gKG1ha2VFeG8gPSAkaM2PX2EpXV0sW1wiZGVmaW5lRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAoZGVmaW5lRXhvQ2xhc3MgPSAkaM2PX2EpXV0sW1wiZGVmaW5lRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAoZGVmaW5lRXhvQ2xhc3NLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJTZXRTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhcldlYWtNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyV2Vha01hcFN0b3JlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhcldlYWtTZXRTdG9yZSA9ICRozY9fYSldXV1dLFtcIi4vbWFrZS1vbmNlLmpzXCIsIFtbXCJtYWtlT25jZUtpdFwiLCBbJGjNj19hID0+IChtYWtlT25jZUtpdCA9ICRozY9fYSldXV1dLFtcIi4va2V5cy5qc1wiLCBbW1wiYWdvcmljVmF0RGF0YUtleXNcIiwgWyRozY9fYSA9PiAoa2V5cyA9ICRozY9fYSldXV1dLFtcIi4vd2F0Y2gtcHJvbWlzZS5qc1wiLCBbW1wid2F0Y2hQcm9taXNlXCIsIFskaM2PX2EgPT4gKHdhdGNoUHJvbWlzZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cbmNvbnN0IGRldGFjaGVkSGVhcFN0b3Jlcz1GYXIoJ2hlYXBTdG9yZXMnLHtcbmRldGFjaGVkOigpPT5kZXRhY2hlZEhlYXBTdG9yZXMsXG5pc1N0b3JhYmxlOmlzUGFzc2FibGUsXG5cbnNldFN0b3JlOm1ha2VTY2FsYXJTZXRTdG9yZSxcbm1hcFN0b3JlOm1ha2VTY2FsYXJNYXBTdG9yZSxcbndlYWtNYXBTdG9yZTptYWtlU2NhbGFyV2Vha01hcFN0b3JlLFxud2Vha1NldFN0b3JlOm1ha2VTY2FsYXJXZWFrU2V0U3RvcmV9KTtcblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSGVhcFpvbmU9KGJhc2VMYWJlbD0naGVhcFpvbmUnKT0+e1xuY29uc3R7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfT1tYWtlT25jZUtpdChiYXNlTGFiZWwsZGV0YWNoZWRIZWFwU3RvcmVzKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgbWFrZVN1YlpvbmU9KGxhYmVsLF9vcHRpb25zKT0+XG5tYWtlSGVhcFpvbmUoIGAke2Jhc2VMYWJlbH0uJHtsYWJlbH1gKTtcblxucmV0dXJuIEZhcignaGVhcFpvbmUnLHtcbmV4bzp3cmFwUHJvdmlkZXIobWFrZUV4byxrZXlzLmV4byksXG5leG9DbGFzczp3cmFwUHJvdmlkZXIoZGVmaW5lRXhvQ2xhc3Msa2V5cy5leG9DbGFzcyksXG5leG9DbGFzc0tpdDp3cmFwUHJvdmlkZXIoZGVmaW5lRXhvQ2xhc3NLaXQsa2V5cy5leG9DbGFzc0tpdCksXG5zdWJab25lOndyYXBQcm92aWRlcihtYWtlU3ViWm9uZSksXG5cbm1ha2VPbmNlLFxud2F0Y2hQcm9taXNlLFxuZGV0YWNoZWQ6ZGV0YWNoZWRIZWFwU3RvcmVzLmRldGFjaGVkLFxuaXNTdG9yYWJsZTpkZXRhY2hlZEhlYXBTdG9yZXMuaXNTdG9yYWJsZSxcblxubWFwU3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy5tYXBTdG9yZSksXG5zZXRTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLnNldFN0b3JlKSxcbndlYWtNYXBTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLndlYWtNYXBTdG9yZSksXG53ZWFrU2V0U3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy53ZWFrU2V0U3RvcmUpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlSGVhcFpvbmUobWFrZUhlYXBab25lKTtcbmhhcmRlbihtYWtlSGVhcFpvbmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUhlYXBab25lIjpbIm1ha2VIZWFwWm9uZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADuWrfPawIAAGsCAAA7AAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9leHBvcnRzLmpzIiwiLi9tYWtlLW9uY2UuanMiLCIuL2tleXMuanMiLCIuL2lzLXBhc3NhYmxlLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIiwiLi9pcy1wYXNzYWJsZS5qcyIsIi4va2V5cy5qcyIsIi4vbWFrZS1vbmNlLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2V4cG9ydHMuanNcIiwgW11dLFtcIi4vbWFrZS1vbmNlLmpzXCIsIFtdXSxbXCIuL2tleXMuanNcIiwgW11dLFtcIi4vaXMtcGFzc2FibGUuanNcIiwgW11dLFtcIi4vd2F0Y2gtcHJvbWlzZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB16UGuWAIAAFgCAABBAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaXMtcGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImlzUGFzc2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcmVhbElzUGFzc2FibGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJpc1Bhc3NhYmxlXCIsIFskaM2PX2EgPT4gKHJlYWxJc1Bhc3NhYmxlID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGU9KHNwZWNpbWVuKT0+cmVhbElzUGFzc2FibGUoc3BlY2ltZW4pOyRozY9fb25jZS5pc1Bhc3NhYmxlKGlzUGFzc2FibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQYXNzYWJsZSI6WyJpc1Bhc3NhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB5pTBl1AwAAdQMAADoAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9rZXlzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJhZ29yaWNWYXREYXRhS2V5cyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga2luZD0obGFiZWwpPT4gYCR7bGFiZWx9X2tpbmRIYW5kbGVgO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaW5nbGV0b249KGxhYmVsKT0+IGAke2xhYmVsfV9zaW5nbGV0b25gO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgYWdvcmljVmF0RGF0YUtleXM9e1xuZXhvQ2xhc3M6KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKV0pLFxuZXhvQ2xhc3NLaXQ6KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKV0pLFxuZXhvOihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCksc2luZ2xldG9uKGxhYmVsKV0pLFxuc3RvcmU6KGxhYmVsKT0+aGFyZGVuKFtsYWJlbF0pLFxuem9uZToobGFiZWwpPT5oYXJkZW4oW2xhYmVsXSl9OyRozY9fb25jZS5hZ29yaWNWYXREYXRhS2V5cyhhZ29yaWNWYXREYXRhS2V5cyk7XG5cbmhhcmRlbihhZ29yaWNWYXREYXRhS2V5cyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhZ29yaWNWYXREYXRhS2V5cyI6WyJhZ29yaWNWYXREYXRhS2V5cyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAfQoYp4gYAAOIGAAA/AAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbWFrZS1vbmNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VPbmNlS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdExhYmVsVG9LZXlzPShsYWJlbCk9PmhhcmRlbihbbGFiZWxdKTtcbmhhcmRlbihkZWZhdWx0TGFiZWxUb0tleXMpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU9uY2VLaXQ9KGRlYnVnTmFtZSxzdG9yZXMsYmFja2luZ1N0b3JlPXVuZGVmaW5lZCk9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgdXNlZEtleXM9c3RvcmVzLmRldGFjaGVkKCkuc2V0U3RvcmUoIGAke2RlYnVnTmFtZX0gdXNlZCBrZXlzYCk7XG5cbi8qXG5cbiAgICovXG5jb25zdCBhc3NlcnRPbmx5T25jZT0oa2V5KT0+e1xudHlwZW9mIGtleT09PSdzdHJpbmcnfHxGYWlsIGBrZXkgJHtrZXl9IG11c3QgYmUgYSBzdHJpbmdgO1xuIXVzZWRLZXlzLmhhcyhrZXkpfHxcbkZhaWwgYGtleSAke2tleX0gaGFzIGFscmVhZHkgYmVlbiB1c2VkIGluIHRoaXMgem9uZSBhbmQgaW5jYXJuYXRpb25gO1xuXG4vL1xuLy9cbnVzZWRLZXlzLmFkZChrZXkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB3cmFwUHJvdmlkZXI9KHByb3ZpZGVyLGxhYmVsVG9LZXlzPWRlZmF1bHRMYWJlbFRvS2V5cyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3cmFwcGVyPShsYWJlbCwuLi5yZXN0KT0+e1xuZm9yKGNvbnN0IGtleSBvZiBsYWJlbFRvS2V5cyhsYWJlbCkpe1xuYXNzZXJ0T25seU9uY2Uoa2V5KTtcbiB9XG5yZXR1cm4gcHJvdmlkZXIobGFiZWwsLi4ucmVzdCk7XG4gfTtcbnJldHVybiAoLyogICAgICAgICAgICAqL3dyYXBwZXIpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlT25jZT0oa2V5LG1ha2VyKT0+e1xuYXNzZXJ0T25seU9uY2Uoa2V5KTtcbmlmKGJhY2tpbmdTdG9yZSYmYmFja2luZ1N0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBiYWNraW5nU3RvcmUuZ2V0KGtleSk7XG4gfVxuY29uc3QgdmFsdWU9bWFrZXIoa2V5KTtcbnN0b3Jlcy5pc1N0b3JhYmxlKHZhbHVlKXx8XG5GYWlsIGBtYWtlciByZXR1cm4gdmFsdWUgJHt2YWx1ZX0gaXMgbm90IHN0b3JhYmxlYDtcbmJhY2tpbmdTdG9yZSYmYmFja2luZ1N0b3JlLmluaXQoa2V5LHZhbHVlKTtcbnJldHVybiB2YWx1ZTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9KTtcbiB9OyRozY9fb25jZS5tYWtlT25jZUtpdChtYWtlT25jZUtpdCk7XG5oYXJkZW4obWFrZU9uY2VLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU9uY2VLaXQiOlsibWFrZU9uY2VLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWsTixkoKAABKCgAARwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3ByZXBhcmUtcmV2b2NhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUmV2b2NhYmxlTWFrZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLGZyb21VbmlxdWVFbnRyaWVzLE07JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qc1wiLCBbW1wiZnJvbVVuaXF1ZUVudHJpZXNcIiwgWyRozY9fYSA9PiAoZnJvbVVuaXF1ZUVudHJpZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVJldm9jYWJsZU1ha2VyS2l0PShcbnpvbmUsXG51S2luZE5hbWUsXG51TWV0aG9kTmFtZXMsXG5vcHRpb25zPXt9KT0+XG57XG5jb25zdHtcbnVJbnRlcmZhY2VOYW1lPXVLaW5kTmFtZSxcbmV4dHJhTWV0aG9kR3VhcmRzPXVuZGVmaW5lZCxcbmV4dHJhTWV0aG9kcz11bmRlZmluZWR9PVxub3B0aW9ucztcbmNvbnN0IFJldm9jYWJsZUlLaXQ9aGFyZGVuKHtcbnJldm9rZXI6TS5pbnRlcmZhY2UoIGAke3VJbnRlcmZhY2VOYW1lfV9yZXZva2VyYCx7XG5yZXZva2U6TS5jYWxsKCkucmV0dXJucyhNLmJvb2xlYW4oKSl9KSxcblxucmV2b2NhYmxlOk0uaW50ZXJmYWNlKFxuIGAke3VJbnRlcmZhY2VOYW1lfV9yZXZvY2FibGVgLFxue1xuLi4uZXh0cmFNZXRob2RHdWFyZHN9LFxuXG57XG5kZWZhdWx0R3VhcmRzOidyYXcnfSl9KTtcblxuXG5cblxuY29uc3QgcmV2b2NhYmxlS2luZE5hbWU9IGAke3VLaW5kTmFtZX1fY2FyZXRha2VyYDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgYW1wbGlmaWVyO1xuXG5jb25zdCBtYWtlUmV2b2NhYmxlS2l0PXpvbmUuZXhvQ2xhc3NLaXQoXG5yZXZvY2FibGVLaW5kTmFtZSxcblJldm9jYWJsZUlLaXQsXG4odW5kZXJseWluZyk9Pih7XG51bmRlcmx5aW5nfSksXG5cbntcbnJldm9rZXI6e1xucmV2b2tlKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmlmKHN0YXRlLnVuZGVybHlpbmc9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnN0YXRlLnVuZGVybHlpbmc9dW5kZWZpbmVkO1xucmV0dXJuIHRydWU7XG4gfX0sXG5cbnJldm9jYWJsZTp7XG4uLi5mcm9tVW5pcXVlRW50cmllcyhcbnVNZXRob2ROYW1lcy5tYXAoKG5hbWUpPT5bXG5uYW1lLFxue1xuLy9cbltuYW1lXSguLi5hcmdzKXtcbi8vXG5jb25zdHt1bmRlcmx5aW5nfT10aGlzLnN0YXRlO1xudW5kZXJseWluZyE9PXVuZGVmaW5lZHx8XG5GYWlsIGAke3EocmV2b2NhYmxlS2luZE5hbWUpfSByZXZva2VkYDtcbnJldHVybiB1bmRlcmx5aW5nW25hbWVdKC4uLmFyZ3MpO1xuIH1cbi8vXG59W25hbWVdXSkpLFxuXG5cbi4uLmV4dHJhTWV0aG9kc319LFxuXG5cbntcbnN0YXRlU2hhcGU6e1xudW5kZXJseWluZzpNLm9wdChNLnJlbW90YWJsZSgndW5kZXJseWluZycpKX0sXG5cbnJlY2VpdmVBbXBsaWZpZXI6KGFtcCk9PntcbmFtcGxpZmllcj1hbXA7XG4gfX0pO1xuXG5cblxuLypcblxuXG4gICAqL1xuY29uc3QgbWFrZVJldm9jYWJsZT0odW5kZXJseWluZyk9PlxuLy9cbm1ha2VSZXZvY2FibGVLaXQodW5kZXJseWluZykucmV2b2NhYmxlO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCByZXZva2U9KHJldm9jYWJsZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZmFjZXRzPWFtcGxpZmllcihyZXZvY2FibGUpO1xuaWYoZmFjZXRzPT09dW5kZWZpbmVkKXtcbnJldHVybiBmYWxzZTtcbiB9XG5yZXR1cm4gZmFjZXRzLnJldm9rZXIucmV2b2tlKCk7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7XG5yZXZva2UsXG5tYWtlUmV2b2NhYmxlfSk7XG5cbiB9OyRozY9fb25jZS5wcmVwYXJlUmV2b2NhYmxlTWFrZXJLaXQocHJlcGFyZVJldm9jYWJsZU1ha2VyS2l0KTtcbmhhcmRlbihwcmVwYXJlUmV2b2NhYmxlTWFrZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVJldm9jYWJsZU1ha2VyS2l0IjpbInByZXBhcmVSZXZvY2FibGVNYWtlcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADvarSSXwkAAF8JAABDAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvd2F0Y2gtcHJvbWlzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSIsIlByb21pc2VXYXRjaGVySGFuZGxlciIsIlByb21pc2VXYXRjaGVySSIsIlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJIiwid2F0Y2hQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTSxFOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJIYW5kbGVyPU0uY2FsbChNLnJhdygpKS5yZXN0KE0ucmF3KCkpLnJldHVybnMoKTtcblxuLypcblxuICovJGjNj19vbmNlLlByb21pc2VXYXRjaGVySGFuZGxlcihQcm9taXNlV2F0Y2hlckhhbmRsZXIpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXInLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcixcbm9uUmVqZWN0ZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyfSk7XG5cblxuLypcblxuICovJGjNj19vbmNlLlByb21pc2VXYXRjaGVySShQcm9taXNlV2F0Y2hlckkpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyRnVsZmlsbGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWQnLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcn0pO1xuXG5cbi8qXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkoUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJKTtcbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlclJlamVjdGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJSZWplY3RlZCcse1xub25SZWplY3RlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXJ9KTtcblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlclJlamVjdGVkSShQcm9taXNlV2F0Y2hlclJlamVjdGVkSSk7XG5jb25zdCBjYWxsTWVNYXliZT0odGhhdCxwcm9wLHBvc3RBcmdzKT0+e1xuY29uc3QgZm49dGhhdFtwcm9wXTtcbmlmKCFmbil7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmFzc2VydC50eXBlb2YoZm4sJ2Z1bmN0aW9uJyk7XG4vKlxuXG4gICAqL1xuY29uc3Qgd3JhcHBlZD0oYXJnKT0+e1xuLy9cbi8vXG5hcHBseShmbix0aGF0LFthcmcsLi4ucG9zdEFyZ3NdKTtcbiB9O1xucmV0dXJuIHdyYXBwZWQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHdhdGNoUHJvbWlzZT0ocCx3YXRjaGVyLC4uLndhdGNoZXJBcmdzKT0+e1xuUHJvbWlzZS5yZXNvbHZlKHApPT09cHx8RmFpbCBgd2F0Y2hQcm9taXNlIG9ubHkgd2F0Y2hlcyBwcm9taXNlc2A7XG5jb25zdCBvbkZ1bGZpbGxlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvbkZ1bGZpbGxlZCcsd2F0Y2hlckFyZ3MpO1xuY29uc3Qgb25SZWplY3RlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvblJlamVjdGVkJyx3YXRjaGVyQXJncyk7XG5vbkZ1bGZpbGxlZHx8XG5vblJlamVjdGVkfHxcbkZhaWwgYHByb21pc2Ugd2F0Y2hlciBtdXN0IGltcGxlbWVudCBhdCBsZWFzdCBvbmUgaGFuZGxlciBtZXRob2RgO1xudm9pZCBFLndoZW4ocCxvbkZ1bGZpbGxlZCxvblJlamVjdGVkKTtcbiB9OyRozY9fb25jZS53YXRjaFByb21pc2Uod2F0Y2hQcm9taXNlKTtcbmhhcmRlbih3YXRjaFByb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHJvbWlzZVdhdGNoZXJIYW5kbGVyIjpbIlByb21pc2VXYXRjaGVySGFuZGxlciJdLCJQcm9taXNlV2F0Y2hlckkiOlsiUHJvbWlzZVdhdGNoZXJJIl0sIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiXSwiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiOlsiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAx+aYwpgEAAKYBAAA+AAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMS96b25lLWhlbHBlcnMuanN7ImltcG9ydHMiOlsiLi9zcmMvcHJlcGFyZS1yZXZvY2FibGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9wcmVwYXJlLXJldm9jYWJsZS5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvcHJlcGFyZS1yZXZvY2FibGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAXM2qhwAdAAAAHQAAPAAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvYW1vdW50TWF0aC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSIsIi4vbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanMiLCIuL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanMiLCIuL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkFtb3VudE1hdGgiLCJBc3NldEtpbmQiLCJhc3NlcnRBc3NldEtpbmQiLCJhc3NlcnRWYWx1ZUdldEhlbHBlcnMiLCJnZXRBc3NldEtpbmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLHBhc3NTdHlsZU9mLGFzc2VydFJlbW90YWJsZSxhc3NlcnRSZWNvcmQsTSxtYXRjaGVzLG5hdE1hdGhIZWxwZXJzLHNldE1hdGhIZWxwZXJzLGNvcHlTZXRNYXRoSGVscGVycyxjb3B5QmFnTWF0aEhlbHBlcnM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJhc3NlcnRSZW1vdGFibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVtb3RhYmxlID0gJGjNj19hKV1dLFtcImFzc2VydFJlY29yZFwiLCBbJGjNj19hID0+IChhc3NlcnRSZWNvcmQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qc1wiLCBbW1wibmF0TWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAobmF0TWF0aEhlbHBlcnMgPSAkaM2PX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzXCIsIFtbXCJzZXRNYXRoSGVscGVyc1wiLCBbJGjNj19hID0+IChzZXRNYXRoSGVscGVycyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzXCIsIFtbXCJjb3B5U2V0TWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoY29weVNldE1hdGhIZWxwZXJzID0gJGjNj19hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanNcIiwgW1tcImNvcHlCYWdNYXRoSGVscGVyc1wiLCBbJGjNj19hID0+IChjb3B5QmFnTWF0aEhlbHBlcnMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgQXNzZXRLaW5kPS8qICAgICAgICAgICAgICAgICove1xuTkFUOiduYXQnLFxuU0VUOidzZXQnLFxuQ09QWV9TRVQ6J2NvcHlTZXQnLFxuQ09QWV9CQUc6J2NvcHlCYWcnfTskaM2PX29uY2UuQXNzZXRLaW5kKEFzc2V0S2luZCk7XG5cbmhhcmRlbihBc3NldEtpbmQpO1xuY29uc3QgYXNzZXRLaW5kTmFtZXM9aGFyZGVuKE9iamVjdC52YWx1ZXMoQXNzZXRLaW5kKS5zb3J0KCkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydEFzc2V0S2luZD0oYWxsZWdlZEFLKT0+e1xuYXNzZXRLaW5kTmFtZXMuaW5jbHVkZXMoYWxsZWdlZEFLKXx8XG5GYWlsIGBUaGUgYXNzZXRLaW5kICR7YWxsZWdlZEFLfSBtdXN0IGJlIG9uZSBvZiAke3EoYXNzZXRLaW5kTmFtZXMpfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0QXNzZXRLaW5kKGFzc2VydEFzc2V0S2luZCk7XG5oYXJkZW4oYXNzZXJ0QXNzZXRLaW5kKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGhlbHBlcnM9e1xubmF0Om5hdE1hdGhIZWxwZXJzLFxuc2V0OnNldE1hdGhIZWxwZXJzLFxuY29weVNldDpjb3B5U2V0TWF0aEhlbHBlcnMsXG5jb3B5QmFnOmNvcHlCYWdNYXRoSGVscGVyc307XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFzc2VydFZhbHVlR2V0QXNzZXRLaW5kPSh2YWx1ZSk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZih2YWx1ZSk7XG5pZihwYXNzU3R5bGU9PT0nYmlnaW50Jyl7XG5yZXR1cm4nbmF0JztcbiB9XG5pZihwYXNzU3R5bGU9PT0nY29weUFycmF5Jyl7XG5yZXR1cm4nc2V0JztcbiB9XG5pZihtYXRjaGVzKHZhbHVlLE0uc2V0KCkpKXtcbnJldHVybidjb3B5U2V0JztcbiB9XG5pZihtYXRjaGVzKHZhbHVlLE0uYmFnKCkpKXtcbnJldHVybidjb3B5QmFnJztcbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnRocm93IEZhaWwgYHZhbHVlICR7dmFsdWV9IG11c3QgYmUgYSBiaWdpbnQsIGNvcHlTZXQsIGNvcHlCYWcsIG9yIGFuIGFycmF5LCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFZhbHVlR2V0SGVscGVycz0odmFsdWUpPT5cbi8vXG5oZWxwZXJzW2Fzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKV07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLmFzc2VydFZhbHVlR2V0SGVscGVycyhhc3NlcnRWYWx1ZUdldEhlbHBlcnMpO1xuY29uc3Qgb3B0aW9uYWxCcmFuZENoZWNrPShhbGxlZ2VkQnJhbmQsYnJhbmQpPT57XG5pZihicmFuZCE9PXVuZGVmaW5lZCl7XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hbGxlZ2VkQnJhbmQ9PT1icmFuZHx8XG5GYWlsIGBhbW91bnQncyBicmFuZCAke3EoYWxsZWdlZEJyYW5kKX0gZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBicmFuZCAke3EoXG5icmFuZClcbiB9YDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrTFJBbmRHZXRIZWxwZXJzPShsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmFzc2VydFJlY29yZChsZWZ0QW1vdW50LCdsZWZ0QW1vdW50Jyk7XG5hc3NlcnRSZWNvcmQocmlnaHRBbW91bnQsJ3JpZ2h0QW1vdW50Jyk7XG5jb25zdHt2YWx1ZTpsZWZ0VmFsdWUsYnJhbmQ6bGVmdEJyYW5kfT1sZWZ0QW1vdW50O1xuY29uc3R7dmFsdWU6cmlnaHRWYWx1ZSxicmFuZDpyaWdodEJyYW5kfT1yaWdodEFtb3VudDtcbmFzc2VydFJlbW90YWJsZShsZWZ0QnJhbmQsJ2xlZnRCcmFuZCcpO1xuYXNzZXJ0UmVtb3RhYmxlKHJpZ2h0QnJhbmQsJ3JpZ2h0QnJhbmQnKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhsZWZ0QnJhbmQsYnJhbmQpO1xub3B0aW9uYWxCcmFuZENoZWNrKHJpZ2h0QnJhbmQsYnJhbmQpO1xubGVmdEJyYW5kPT09cmlnaHRCcmFuZHx8XG5GYWlsIGBCcmFuZHMgaW4gbGVmdCAke3EobGVmdEJyYW5kKX0gYW5kIHJpZ2h0ICR7cShcbnJpZ2h0QnJhbmQpXG4gfSBzaG91bGQgbWF0Y2ggYnV0IGRvIG5vdGA7XG5jb25zdCBsZWZ0SGVscGVycz1hc3NlcnRWYWx1ZUdldEhlbHBlcnMobGVmdFZhbHVlKTtcbmNvbnN0IHJpZ2h0SGVscGVycz1hc3NlcnRWYWx1ZUdldEhlbHBlcnMocmlnaHRWYWx1ZSk7XG5sZWZ0SGVscGVycz09PXJpZ2h0SGVscGVyc3x8XG5GYWlsIGBUaGUgbGVmdCAke2xlZnRBbW91bnR9IGFuZCByaWdodCBhbW91bnQgJHtyaWdodEFtb3VudH0gaGFkIGRpZmZlcmVudCBhc3NldEtpbmRzYDtcbnJldHVybiBsZWZ0SGVscGVycztcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29lcmNlTFI9KGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCk9Pntcbi8vXG5yZXR1cm5baC5kb0NvZXJjZShsZWZ0QW1vdW50LnZhbHVlKSxoLmRvQ29lcmNlKHJpZ2h0QW1vdW50LnZhbHVlKV07XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzR1RFPShsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5yZXR1cm4gaC5kb0lzR1RFKC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBBbW91bnRNYXRoPXtcbi8vXG4vL1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbm1ha2U6KGJyYW5kLGFsbGVnZWRWYWx1ZSk9PntcbmFzc2VydFJlbW90YWJsZShicmFuZCwnYnJhbmQnKTtcbmNvbnN0IGg9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKGFsbGVnZWRWYWx1ZSk7XG5jb25zdCB2YWx1ZT1oLmRvQ29lcmNlKGFsbGVnZWRWYWx1ZSk7XG4vL1xucmV0dXJuIGhhcmRlbih7YnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvZXJjZTooYnJhbmQsYWxsZWdlZEFtb3VudCk9PntcbmFzc2VydFJlbW90YWJsZShicmFuZCwnYnJhbmQnKTtcbmFzc2VydFJlY29yZChhbGxlZ2VkQW1vdW50LCdhbW91bnQnKTtcbmNvbnN0e2JyYW5kOmFsbGVnZWRCcmFuZCx2YWx1ZTphbGxlZ2VkVmFsdWV9PWFsbGVnZWRBbW91bnQ7XG5icmFuZD09PWFsbGVnZWRCcmFuZHx8XG5GYWlsIGBUaGUgYnJhbmQgaW4gdGhlIGFsbGVnZWRBbW91bnQgJHthbGxlZ2VkQW1vdW50fSBpbiAnY29lcmNlJyBkaWRuJ3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBicmFuZCAke2JyYW5kfS5gO1xuLy9cbi8vXG5yZXR1cm4gQW1vdW50TWF0aC5tYWtlKGJyYW5kLGFsbGVnZWRWYWx1ZSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG4gICAqL1xuZ2V0VmFsdWU6KGJyYW5kLGFtb3VudCk9PkFtb3VudE1hdGguY29lcmNlKGJyYW5kLGFtb3VudCkudmFsdWUsXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xubWFrZUVtcHR5OihicmFuZCxhc3NldEtpbmQ9LyogICAgICAgICAgICAgICAgKi8nbmF0Jyk9PntcbmFzc2VydFJlbW90YWJsZShicmFuZCwnYnJhbmQnKTtcbmFzc2VydEFzc2V0S2luZChhc3NldEtpbmQpO1xuY29uc3QgdmFsdWU9aGVscGVyc1thc3NldEtpbmRdLmRvTWFrZUVtcHR5KCk7XG4vL1xucmV0dXJuIGhhcmRlbih7YnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cbiAgICovXG5tYWtlRW1wdHlGcm9tQW1vdW50OihhbW91bnQpPT57XG5hc3NlcnRSZWNvcmQoYW1vdW50LCdhbW91bnQnKTtcbmNvbnN0e2JyYW5kLHZhbHVlfT1hbW91bnQ7XG5jb25zdCBhc3NldEtpbmQ9YXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQodmFsdWUpO1xuLy9cbnJldHVybiBBbW91bnRNYXRoLm1ha2VFbXB0eShicmFuZCxhc3NldEtpbmQpO1xuIH0sXG4vKlxuXG5cblxuXG5cbiAgICovXG5pc0VtcHR5OihhbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZDphbGxlZ2VkQnJhbmQsdmFsdWV9PWFtb3VudDtcbmFzc2VydFJlbW90YWJsZShhbGxlZ2VkQnJhbmQsJ2JyYW5kJyk7XG5vcHRpb25hbEJyYW5kQ2hlY2soYWxsZWdlZEJyYW5kLGJyYW5kKTtcbmNvbnN0IGg9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKHZhbHVlKTtcbnJldHVybiBoLmRvSXNFbXB0eShoLmRvQ29lcmNlKHZhbHVlKSk7XG4gfSxcbmlzR1RFLFxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuaXNFcXVhbDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xucmV0dXJuIGguZG9Jc0VxdWFsKC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5hZGQ6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbmNvbnN0IHZhbHVlPWguZG9BZGQoLi4uY29lcmNlTFIoaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KSk7XG4vL1xucmV0dXJuIGhhcmRlbih7YnJhbmQ6bGVmdEFtb3VudC5icmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbnN1YnRyYWN0OihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5jb25zdCB2YWx1ZT1oLmRvU3VidHJhY3QoLi4uY29lcmNlTFIoaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KSk7XG4vL1xucmV0dXJuIGhhcmRlbih7YnJhbmQ6bGVmdEFtb3VudC5icmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xubWluOih4LHksYnJhbmQ9dW5kZWZpbmVkKT0+XG4vL1xuaXNHVEUoeCx5LGJyYW5kKT9cbnk6XG5pc0dURSh5LHgsYnJhbmQpP1xueDpcbkZhaWwgYCR7eH0gYW5kICR7eX0gYXJlIGluY29tcGFyYWJsZWAsXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xubWF4Oih4LHksYnJhbmQ9dW5kZWZpbmVkKT0+XG4vL1xuaXNHVEUoeCx5LGJyYW5kKT9cbng6XG5pc0dURSh5LHgpP1xueTpcbkZhaWwgYCR7eH0gYW5kICR7eX0gYXJlIGluY29tcGFyYWJsZWB9OyRozY9fb25jZS5BbW91bnRNYXRoKEFtb3VudE1hdGgpO1xuXG5oYXJkZW4oQW1vdW50TWF0aCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgZ2V0QXNzZXRLaW5kPShhbW91bnQpPT57XG5hc3NlcnRSZWNvcmQoYW1vdW50LCdhbW91bnQnKTtcbmNvbnN0e3ZhbHVlfT1hbW91bnQ7XG5yZXR1cm4gYXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQodmFsdWUpO1xuIH07JGjNj19vbmNlLmdldEFzc2V0S2luZChnZXRBc3NldEtpbmQpO1xuaGFyZGVuKGdldEFzc2V0S2luZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJBc3NldEtpbmQiOlsiQXNzZXRLaW5kIl0sImFzc2VydEFzc2V0S2luZCI6WyJhc3NlcnRBc3NldEtpbmQiXSwiYXNzZXJ0VmFsdWVHZXRIZWxwZXJzIjpbImFzc2VydFZhbHVlR2V0SGVscGVycyJdLCJBbW91bnRNYXRoIjpbIkFtb3VudE1hdGgiXSwiZ2V0QXNzZXRLaW5kIjpbImdldEFzc2V0S2luZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACBRsWF1AMAANQDAAA9AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9hbW91bnRTdG9yZS5qc3siaW1wb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiXSwiZXhwb3J0cyI6WyJtYWtlQW1vdW50U3RvcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQW1vdW50TWF0aDskaM2PX2ltcG9ydHMoW1tcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV1dKTsgICBcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQW1vdW50U3RvcmU9KHN0YXRlLGtleSk9PntcbnJldHVybiBoYXJkZW4oe1xuZ2V0QW1vdW50OigpPT5zdGF0ZVtrZXldLFxuaW5jcmVtZW50OihkZWx0YSk9PntcbnN0YXRlW2tleV09QW1vdW50TWF0aC5hZGQoc3RhdGVba2V5XSxkZWx0YSk7XG4gfSxcbmRlY3JlbWVudDooZGVsdGEpPT57XG5pZihBbW91bnRNYXRoLmlzR1RFKHN0YXRlW2tleV0sZGVsdGEpKXtcbnN0YXRlW2tleV09QW1vdW50TWF0aC5zdWJ0cmFjdChzdGF0ZVtrZXldLGRlbHRhKTtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlQW1vdW50U3RvcmUobWFrZUFtb3VudFN0b3JlKTtcbmhhcmRlbihtYWtlQW1vdW50U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFtb3VudFN0b3JlIjpbIm1ha2VBbW91bnRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADood0axwUAAMcFAAA9AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9kaXNwbGF5SW5mby5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsiY29lcmNlRGlzcGxheUluZm8iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtdXN0TWF0Y2gsRGlzcGxheUluZm9TaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiRGlzcGxheUluZm9TaGFwZVwiLCBbJGjNj19hID0+IChEaXNwbGF5SW5mb1NoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VEaXNwbGF5SW5mbz0oYWxsZWdlZERpc3BsYXlJbmZvLGFzc2V0S2luZCk9Pntcbm11c3RNYXRjaChhbGxlZ2VkRGlzcGxheUluZm8sRGlzcGxheUluZm9TaGFwZSwnZGlzcGxheUluZm8nKTtcblxuaWYoYWxsZWdlZERpc3BsYXlJbmZvLmFzc2V0S2luZCE9PXVuZGVmaW5lZCl7XG5hbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kPT09YXNzZXRLaW5kfHxcbkZhaWwgYGRpc3BsYXlJbmZvLmFzc2V0S2luZCB3YXMgcHJlc2VudCAoJHthbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kfSkgYW5kIGRpZCBub3QgbWF0Y2ggdGhlIGFzc2V0S2luZCBhcmd1bWVudCAoJHthc3NldEtpbmR9KWA7XG4gfVxuY29uc3QgZGlzcGxheUluZm89aGFyZGVuKHsuLi5hbGxlZ2VkRGlzcGxheUluZm8sYXNzZXRLaW5kfSk7XG5cbmlmKGRpc3BsYXlJbmZvLmRlY2ltYWxQbGFjZXMhPT11bmRlZmluZWQpe1xuTnVtYmVyLmlzU2FmZUludGVnZXIoZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlcyl8fFxuRmFpbCBgZGVjaW1hbFBsYWNlcyAke2Rpc3BsYXlJbmZvLmRlY2ltYWxQbGFjZXN9IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmA7XG4gfVxuXG5yZXR1cm4gZGlzcGxheUluZm87XG4gfTskaM2PX29uY2UuY29lcmNlRGlzcGxheUluZm8oY29lcmNlRGlzcGxheUluZm8pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29lcmNlRGlzcGxheUluZm8iOlsiY29lcmNlRGlzcGxheUluZm8iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAI44yaj8CAAA/AgAANwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9hbW91bnRNYXRoLmpzIiwiLi9pc3N1ZXJLaXQuanMiLCIuL3R5cGVHdWFyZHMuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9hbW91bnRNYXRoLmpzIiwiLi9pc3N1ZXJLaXQuanMiLCIuL3R5cGVHdWFyZHMuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2Ftb3VudE1hdGguanNcIiwgW11dLFtcIi4vaXNzdWVyS2l0LmpzXCIsIFtdXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW11dLFtcIi4vdHlwZXMtaW5kZXguanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAaJTTyWoWAABqFgAAOwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaXNzdWVyS2l0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b25lL2R1cmFibGUuanMiLCIuL2Ftb3VudE1hdGguanMiLCIuL2Rpc3BsYXlJbmZvLmpzIiwiLi9wYXltZW50TGVkZ2VyLmpzIl0sImV4cG9ydHMiOlsiaGFzSXNzdWVyIiwibWFrZUR1cmFibGVJc3N1ZXJLaXQiLCJtYWtlSXNzdWVyS2l0IiwicHJlcGFyZUlzc3VlcktpdCIsInVwZ3JhZGVJc3N1ZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwsYXNzZXJ0UGF0dGVybixtYWtlU2NhbGFyQmlnTWFwU3RvcmUsbWFrZUR1cmFibGVab25lLEFzc2V0S2luZCxhc3NlcnRBc3NldEtpbmQsY29lcmNlRGlzcGxheUluZm8scHJlcGFyZVBheW1lbnRMZWRnZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzXCIsIFtbXCJtYWtlRHVyYWJsZVpvbmVcIiwgWyRozY9fYSA9PiAobWFrZUR1cmFibGVab25lID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBc3NldEtpbmRcIiwgWyRozY9fYSA9PiAoQXNzZXRLaW5kID0gJGjNj19hKV1dLFtcImFzc2VydEFzc2V0S2luZFwiLCBbJGjNj19hID0+IChhc3NlcnRBc3NldEtpbmQgPSAkaM2PX2EpXV1dXSxbXCIuL2Rpc3BsYXlJbmZvLmpzXCIsIFtbXCJjb2VyY2VEaXNwbGF5SW5mb1wiLCBbJGjNj19hID0+IChjb2VyY2VEaXNwbGF5SW5mbyA9ICRozY9fYSldXV1dLFtcIi4vcGF5bWVudExlZGdlci5qc1wiLCBbW1wicHJlcGFyZVBheW1lbnRMZWRnZXJcIiwgWyRozY9fYSA9PiAocHJlcGFyZVBheW1lbnRMZWRnZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzZXR1cElzc3VlcktpdD0oXG57bmFtZSxhc3NldEtpbmQsZGlzcGxheUluZm8sZWxlbWVudFNoYXBlfSxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkKT0+XG57XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5cbi8vXG5jb25zdCBjbGVhbkRpc3BsYXlJbmZvPWNvZXJjZURpc3BsYXlJbmZvKGRpc3BsYXlJbmZvLGFzc2V0S2luZCk7XG5pZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2Yob3B0U2h1dGRvd25XaXRoRmFpbHVyZSwnZnVuY3Rpb24nKTtcbiB9XG5cbmlmKGVsZW1lbnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGVsZW1lbnRTaGFwZSk7XG4gfVxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0e2lzc3VlcixtaW50LGJyYW5kLG1pbnRSZWNvdmVyeVB1cnNlfT1wcmVwYXJlUGF5bWVudExlZGdlcihcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuY2xlYW5EaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5icmFuZCxcbmlzc3Vlcixcbm1pbnQsXG5taW50UmVjb3ZlcnlQdXJzZSxcbmRpc3BsYXlJbmZvOmNsZWFuRGlzcGxheUluZm99KTtcblxuIH07XG5oYXJkZW4oc2V0dXBJc3N1ZXJLaXQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBJTlNUQU5DRV9LRVk9J2lzc3Vlcic7XG4vKlxuXG5cblxuICovXG5jb25zdCBSRUNPVkVSWV9TRVRTX1NUQVRFPSdyZWNvdmVyeVNldHNTdGF0ZSc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1cGdyYWRlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbnJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWQpPT5cbntcbmNvbnN0IGlzc3VlclJlY29yZD1pc3N1ZXJCYWdnYWdlLmdldChJTlNUQU5DRV9LRVkpO1xuY29uc3QgaXNzdWVyWm9uZT1tYWtlRHVyYWJsZVpvbmUoaXNzdWVyQmFnZ2FnZSk7XG5jb25zdCBvbGRSZWNvdmVyeVNldHNTdGF0ZT1pc3N1ZXJCYWdnYWdlLmhhcyhSRUNPVkVSWV9TRVRTX1NUQVRFKT9cbmlzc3VlckJhZ2dhZ2UuZ2V0KFJFQ09WRVJZX1NFVFNfU1RBVEUpOlxuJ2hhc1JlY292ZXJ5U2V0cyc7XG5pZihcbm9sZFJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyYmXG5yZWNvdmVyeVNldHNPcHRpb249PT0naGFzUmVjb3ZlcnlTZXRzJylcbntcbkZhaWwgYENhbm5vdCAoeWV0PykgdXBncmFkZSBmcm9tICdub1JlY292ZXJ5U2V0cycgdG8gJ2hhc1JlY292ZXJ5U2V0cydgO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8b2xkUmVjb3ZlcnlTZXRzU3RhdGU7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJSZWNvcmQsXG5pc3N1ZXJab25lLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKTtcblxuIH07JGjNj19vbmNlLnVwZ3JhZGVJc3N1ZXJLaXQodXBncmFkZUlzc3VlcktpdCk7XG5oYXJkZW4odXBncmFkZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBoYXNJc3N1ZXI9KGJhZ2dhZ2UpPT5iYWdnYWdlLmhhcyhJTlNUQU5DRV9LRVkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaGFzSXNzdWVyKGhhc0lzc3Vlcik7XG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVJc3N1ZXJLaXQ9KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz1oYXJkZW4oe30pLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG57ZWxlbWVudFNoYXBlPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QgaXNzdWVyRGF0YT1oYXJkZW4oe1xubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlfSk7XG5cbmlzc3VlckJhZ2dhZ2UuaW5pdChJTlNUQU5DRV9LRVksaXNzdWVyRGF0YSk7XG5jb25zdCBpc3N1ZXJab25lPW1ha2VEdXJhYmxlWm9uZShpc3N1ZXJCYWdnYWdlKTtcbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8J2hhc1JlY292ZXJ5U2V0cyc7XG5pc3N1ZXJCYWdnYWdlLmluaXQoUkVDT1ZFUllfU0VUU19TVEFURSxyZWNvdmVyeVNldHNTdGF0ZSk7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJEYXRhLFxuaXNzdWVyWm9uZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRHVyYWJsZUlzc3VlcktpdChtYWtlRHVyYWJsZUlzc3VlcktpdCk7XG5oYXJkZW4obWFrZUR1cmFibGVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxub3B0aW9ucz17fSk9Plxue1xuaWYoaGFzSXNzdWVyKGlzc3VlckJhZ2dhZ2UpKXtcbmNvbnN0e2VsZW1lbnRTaGFwZTpfPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdCBpc3N1ZXJLaXQ9dXBncmFkZUlzc3VlcktpdChcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxucmVjb3ZlcnlTZXRzT3B0aW9uKTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbnJldHVybiBpc3N1ZXJLaXQ7XG4gfWVsc2V7XG5jb25zdCBpc3N1ZXJLaXQ9bWFrZUR1cmFibGVJc3N1ZXJLaXQoXG5pc3N1ZXJCYWdnYWdlLFxubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gaXNzdWVyS2l0O1xuIH1cbiB9OyRozY9fb25jZS5wcmVwYXJlSXNzdWVyS2l0KHByZXBhcmVJc3N1ZXJLaXQpO1xuaGFyZGVuKHByZXBhcmVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJc3N1ZXJLaXQ9KFxubmFtZSxcbi8vXG5hc3NldEtpbmQ9QXNzZXRLaW5kLk5BVCxcbmRpc3BsYXlJbmZvPWhhcmRlbih7fSksXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbntlbGVtZW50U2hhcGU9dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PXt9KT0+XG5cbm1ha2VEdXJhYmxlSXNzdWVyS2l0KFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCdkcm9wcGVkIGlzc3VlciBraXQnLHtkdXJhYmxlOnRydWV9KSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG57ZWxlbWVudFNoYXBlLHJlY292ZXJ5U2V0c09wdGlvbn0pOyRozY9fb25jZS5tYWtlSXNzdWVyS2l0KG1ha2VJc3N1ZXJLaXQpO1xuXG5oYXJkZW4obWFrZUlzc3VlcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ1cGdyYWRlSXNzdWVyS2l0IjpbInVwZ3JhZGVJc3N1ZXJLaXQiXSwiaGFzSXNzdWVyIjpbImhhc0lzc3VlciJdLCJtYWtlRHVyYWJsZUlzc3VlcktpdCI6WyJtYWtlRHVyYWJsZUlzc3VlcktpdCJdLCJwcmVwYXJlSXNzdWVyS2l0IjpbInByZXBhcmVJc3N1ZXJLaXQiXSwibWFrZUlzc3VlcktpdCI6WyJtYWtlSXNzdWVyS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOSrY+7hBQAA4QUAAFAAAABAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGtleUVRLG1ha2VDb3B5QmFnLG11c3RNYXRjaCxNLGdldENvcHlCYWdFbnRyaWVzLGJhZ0lzU3VwZXJiYWcsYmFnVW5pb24sYmFnRGlzam9pbnRTdWJ0cmFjdDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImtleUVRXCIsIFskaM2PX2EgPT4gKGtleUVRID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5QmFnXCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5QmFnID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImdldENvcHlCYWdFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlCYWdFbnRyaWVzID0gJGjNj19hKV1dLFtcImJhZ0lzU3VwZXJiYWdcIiwgWyRozY9fYSA9PiAoYmFnSXNTdXBlcmJhZyA9ICRozY9fYSldXSxbXCJiYWdVbmlvblwiLCBbJGjNj19hID0+IChiYWdVbmlvbiA9ICRozY9fYSldXSxbXCJiYWdEaXNqb2ludFN1YnRyYWN0XCIsIFskaM2PX2EgPT4gKGJhZ0Rpc2pvaW50U3VidHJhY3QgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PW1ha2VDb3B5QmFnKFtdKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29weUJhZ01hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZTooYmFnKT0+e1xubXVzdE1hdGNoKGJhZyxNLmJhZygpLCdiYWcgb2YgYW1vdW50Jyk7XG5yZXR1cm4gYmFnO1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KGJhZyk9PmdldENvcHlCYWdFbnRyaWVzKGJhZykubGVuZ3RoPT09MCxcbmRvSXNHVEU6YmFnSXNTdXBlcmJhZyxcbmRvSXNFcXVhbDprZXlFUSxcbmRvQWRkOmJhZ1VuaW9uLFxuZG9TdWJ0cmFjdDpiYWdEaXNqb2ludFN1YnRyYWN0fSk7JGjNj19vbmNlLmNvcHlCYWdNYXRoSGVscGVycyhjb3B5QmFnTWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29weUJhZ01hdGhIZWxwZXJzIjpbImNvcHlCYWdNYXRoSGVscGVycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABBhY94nwUAAJ8FAABQAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbImNvcHlTZXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBrZXlFUSxtYWtlQ29weVNldCxtdXN0TWF0Y2gsTSxnZXRDb3B5U2V0S2V5cyxzZXRJc1N1cGVyc2V0LHNldERpc2pvaW50VW5pb24sc2V0RGlzam9pbnRTdWJ0cmFjdDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImtleUVRXCIsIFskaM2PX2EgPT4gKGtleUVRID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5U2V0XCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImdldENvcHlTZXRLZXlzXCIsIFskaM2PX2EgPT4gKGdldENvcHlTZXRLZXlzID0gJGjNj19hKV1dLFtcInNldElzU3VwZXJzZXRcIiwgWyRozY9fYSA9PiAoc2V0SXNTdXBlcnNldCA9ICRozY9fYSldXSxbXCJzZXREaXNqb2ludFVuaW9uXCIsIFskaM2PX2EgPT4gKHNldERpc2pvaW50VW5pb24gPSAkaM2PX2EpXV0sW1wic2V0RGlzam9pbnRTdWJ0cmFjdFwiLCBbJGjNj19hID0+IChzZXREaXNqb2ludFN1YnRyYWN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PW1ha2VDb3B5U2V0KFtdKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5U2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihzZXQpPT57XG5tdXN0TWF0Y2goc2V0LE0uc2V0KCksJ3NldCBvZiBhbW91bnQnKTtcbnJldHVybiBzZXQ7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooc2V0KT0+Z2V0Q29weVNldEtleXMoc2V0KS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpzZXRJc1N1cGVyc2V0LFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6c2V0RGlzam9pbnRVbmlvbixcbmRvU3VidHJhY3Q6c2V0RGlzam9pbnRTdWJ0cmFjdH0pOyRozY9fb25jZS5jb3B5U2V0TWF0aEhlbHBlcnMoY29weVNldE1hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImNvcHlTZXRNYXRoSGVscGVycyI6WyJjb3B5U2V0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAlStwyWcEAABnBAAATAAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbmF0Il0sImV4cG9ydHMiOlsibmF0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxOYXQsaXNOYXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXSxbXCJpc05hdFwiLCBbJGjNj19hID0+IChpc05hdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBlbXB0eT0wbjtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG5hdE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZToobmF0KT0+e1xuLy9cbmFzc2VydC50eXBlb2YobmF0LCdiaWdpbnQnKTtcbmlzTmF0KG5hdCl8fEZhaWwgYHZhbHVlICR7bmF0fSBtdXN0IGJlIGEgbmF0dXJhbCBudW1iZXJgO1xucmV0dXJuIE5hdChuYXQpO1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KG5hdCk9Pm5hdD09PWVtcHR5LFxuZG9Jc0dURToobGVmdCxyaWdodCk9PmxlZnQ+PXJpZ2h0LFxuZG9Jc0VxdWFsOihsZWZ0LHJpZ2h0KT0+bGVmdD09PXJpZ2h0LFxuLy9cbmRvQWRkOihsZWZ0LHJpZ2h0KT0+bGVmdCtyaWdodCxcbmRvU3VidHJhY3Q6KGxlZnQscmlnaHQpPT5OYXQobGVmdC1yaWdodCl9KTskaM2PX29uY2UubmF0TWF0aEhlbHBlcnMobmF0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibmF0TWF0aEhlbHBlcnMiOlsibmF0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAARwq540gGAABIBgAATAAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJzZXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixhc3NlcnRLZXksZWxlbWVudHNJc1N1cGVyc2V0LGVsZW1lbnRzRGlzam9pbnRVbmlvbixlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QsY29lcmNlVG9FbGVtZW50cyxlbGVtZW50c0NvbXBhcmU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImFzc2VydEtleVwiLCBbJGjNj19hID0+IChhc3NlcnRLZXkgPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNJc1N1cGVyc2V0XCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzSXNTdXBlcnNldCA9ICRozY9fYSldXSxbXCJlbGVtZW50c0Rpc2pvaW50VW5pb25cIiwgWyRozY9fYSA9PiAoZWxlbWVudHNEaXNqb2ludFVuaW9uID0gJGjNj19hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdFwiLCBbJGjNj19hID0+IChlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QgPSAkaM2PX2EpXV0sW1wiY29lcmNlVG9FbGVtZW50c1wiLCBbJGjNj19hID0+IChjb2VyY2VUb0VsZW1lbnRzID0gJGjNj19hKV1dLFtcImVsZW1lbnRzQ29tcGFyZVwiLCBbJGjNj19hID0+IChlbGVtZW50c0NvbXBhcmUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbXB0eT1oYXJkZW4oW10pO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNldE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZToobGlzdCk9Pntcbmxpc3Q9Y29lcmNlVG9FbGVtZW50cyhsaXN0KTtcbi8vXG4vL1xuLy9cbi8vXG5hc3NlcnRLZXkobGlzdCk7XG5yZXR1cm4gbGlzdDtcbiB9LFxuZG9NYWtlRW1wdHk6KCk9PmVtcHR5LFxuZG9Jc0VtcHR5OihsaXN0KT0+cGFzc1N0eWxlT2YobGlzdCk9PT0nY29weUFycmF5JyYmbGlzdC5sZW5ndGg9PT0wLFxuZG9Jc0dURTplbGVtZW50c0lzU3VwZXJzZXQsXG5kb0lzRXF1YWw6KHgseSk9PmVsZW1lbnRzQ29tcGFyZSh4LHkpPT09MCxcbmRvQWRkOmVsZW1lbnRzRGlzam9pbnRVbmlvbixcbmRvU3VidHJhY3Q6ZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0fSk7JGjNj19vbmNlLnNldE1hdGhIZWxwZXJzKHNldE1hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InNldE1hdGhIZWxwZXJzIjpbInNldE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADY/StV/AwAAfwMAADkAAABAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3BheW1lbnQuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbInByZXBhcmVQYXltZW50S2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpbml0RW1wdHk7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJpbml0RW1wdHlcIiwgWyRozY9fYSA9PiAoaW5pdEVtcHR5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vL1xuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQYXltZW50S2luZD0oaXNzdWVyWm9uZSxuYW1lLGJyYW5kLFBheW1lbnRJKT0+e1xuY29uc3QgbWFrZVBheW1lbnQ9aXNzdWVyWm9uZS5leG9DbGFzcyhcbiBgJHtuYW1lfSBwYXltZW50YCxcblBheW1lbnRJLFxuaW5pdEVtcHR5LFxue1xuZ2V0QWxsZWdlZEJyYW5kKCl7XG5yZXR1cm4gYnJhbmQ7XG4gfX0pO1xuXG5cbnJldHVybiBtYWtlUGF5bWVudDtcbiB9OyRozY9fb25jZS5wcmVwYXJlUGF5bWVudEtpbmQocHJlcGFyZVBheW1lbnRLaW5kKTtcbmhhcmRlbihwcmVwYXJlUGF5bWVudEtpbmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVBheW1lbnRLaW5kIjpbInByZXBhcmVQYXltZW50S2luZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC4xE1m7R8AAO0fAAA/AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9wYXltZW50TGVkZ2VyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGFnb3JpYy9zdG9yZSIsIi4vYW1vdW50TWF0aC5qcyIsIi4vcGF5bWVudC5qcyIsIi4vcHVyc2UuanMiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudExlZGdlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRmFpbCxhbm5vdGF0ZUVycm9yLGlzUHJvbWlzZSxtdXN0TWF0Y2gsTSxrZXlFUSxBbW91bnRNYXRoLHByZXBhcmVQYXltZW50S2luZCxwcmVwYXJlUHVyc2VLaW5kLEJyYW5kSSxtYWtlSXNzdWVySW50ZXJmYWNlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXV1dLFtcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV0sW1wiLi9wYXltZW50LmpzXCIsIFtbXCJwcmVwYXJlUGF5bWVudEtpbmRcIiwgWyRozY9fYSA9PiAocHJlcGFyZVBheW1lbnRLaW5kID0gJGjNj19hKV1dXV0sW1wiLi9wdXJzZS5qc1wiLCBbW1wicHJlcGFyZVB1cnNlS2luZFwiLCBbJGjNj19hID0+IChwcmVwYXJlUHVyc2VLaW5kID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJCcmFuZElcIiwgWyRozY9fYSA9PiAoQnJhbmRJID0gJGjNj19hKV1dLFtcIm1ha2VJc3N1ZXJJbnRlcmZhY2VzXCIsIFskaM2PX2EgPT4gKG1ha2VJc3N1ZXJJbnRlcmZhY2VzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgYW1vdW50U2hhcGVGcm9tRWxlbWVudFNoYXBlPShicmFuZCxhc3NldEtpbmQsZWxlbWVudFNoYXBlKT0+e1xubGV0IHZhbHVlU2hhcGU7XG5zd2l0Y2goYXNzZXRLaW5kKXtcbmNhc2UnbmF0Jzp7XG52YWx1ZVNoYXBlPU0ubmF0KCk7XG5lbGVtZW50U2hhcGU9PT11bmRlZmluZWR8fFxuRmFpbCBgRnVuZ2libGUgYXNzZXRzIGNhbm5vdCBoYXZlIGFuIGVsZW1lbnRTaGFwZTogJHtxKGVsZW1lbnRTaGFwZSl9YDtcbmJyZWFrO1xuIH1cbmNhc2Unc2V0Jzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLmFycmF5T2YoTS5rZXkoKSk7XG4gfWVsc2V7XG52YWx1ZVNoYXBlPU0uYXJyYXlPZihNLmFuZChNLmtleSgpLGVsZW1lbnRTaGFwZSkpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVNldCc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5zZXQoKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5zZXRPZihlbGVtZW50U2hhcGUpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weUJhZyc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5iYWcoKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5iYWdPZihlbGVtZW50U2hhcGUpO1xuIH1cbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuRmFpbCBgdW5leHBlY3RlZCBhc3NldCBraW5kICR7cShhc3NldEtpbmQpfWA7XG4gfX1cblxuXG5jb25zdCBhbW91bnRTaGFwZT1oYXJkZW4oe1xuYnJhbmQsLy9cbnZhbHVlOnZhbHVlU2hhcGV9KTtcblxucmV0dXJuIGFtb3VudFNoYXBlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUGF5bWVudExlZGdlcj0oXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCk9Plxue1xuLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBicmFuZD1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gYnJhbmRgLEJyYW5kSSx7XG5pc015SXNzdWVyKGFsbGVnZWRJc3N1ZXIpe1xuLy9cbnJldHVybiBhbGxlZ2VkSXNzdWVyPT09aXNzdWVyO1xuIH0sXG5nZXRBbGxlZ2VkTmFtZSgpe1xucmV0dXJuIG5hbWU7XG4gfSxcbi8vXG5nZXREaXNwbGF5SW5mbygpe1xucmV0dXJuIGRpc3BsYXlJbmZvO1xuIH0sXG5nZXRBbW91bnRTaGFwZSgpe1xucmV0dXJuIGFtb3VudFNoYXBlO1xuIH19KTtcblxuXG5jb25zdCBhbW91bnRTaGFwZT1hbW91bnRTaGFwZUZyb21FbGVtZW50U2hhcGUoXG5icmFuZCxcbmFzc2V0S2luZCxcbmVsZW1lbnRTaGFwZSk7XG5cblxuY29uc3R7SXNzdWVySSxNaW50SSxQYXltZW50SSxQdXJzZUlLaXR9PW1ha2VJc3N1ZXJJbnRlcmZhY2VzKFxuYnJhbmQsXG5hc3NldEtpbmQsXG5hbW91bnRTaGFwZSk7XG5cblxuY29uc3QgbWFrZVBheW1lbnQ9cHJlcGFyZVBheW1lbnRLaW5kKGlzc3VlclpvbmUsbmFtZSxicmFuZCxQYXltZW50SSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmU9KHJlYXNvbik9Pntcbi8vXG4vL1xuaWYob3B0U2h1dGRvd25XaXRoRmFpbHVyZSE9PXVuZGVmaW5lZCl7XG50cnl7XG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKHJlYXNvbik7XG4gfWNhdGNoKGVyckluU2h1dGRvd24pe1xuYW5ub3RhdGVFcnJvcihlcnJJblNodXRkb3duLFggYENhdXNlZCBieTogJHtyZWFzb259YCk7XG50aHJvdyBlcnJJblNodXRkb3duO1xuIH1cbiB9XG50aHJvdyByZWFzb247XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBheW1lbnRMZWRnZXI9aXNzdWVyWm9uZS53ZWFrTWFwU3RvcmUoJ3BheW1lbnRMZWRnZXInLHtcbnZhbHVlU2hhcGU6YW1vdW50U2hhcGV9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwYXltZW50UmVjb3ZlcnlTZXRzPWlzc3VlclpvbmUud2Vha01hcFN0b3JlKCdwYXltZW50UmVjb3ZlcnlTZXRzJyk7XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgaW5pdFBheW1lbnQ9KHBheW1lbnQsYW1vdW50LG9wdFJlY292ZXJ5U2V0PXVuZGVmaW5lZCk9PntcbmlmKHJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyl7XG5vcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZHx8XG5GYWlsIGB3aGVuIHJlY292ZXJTZXRzU3RhdGUgPT09ICdub1JlY292ZXJ5U2V0cycsIG9wdFJlY292ZXJ5U2V0IG11c3QgYmUgZW1wdHlgO1xuIH1cbmlmKG9wdFJlY292ZXJ5U2V0IT09dW5kZWZpbmVkJiYhQW1vdW50TWF0aC5pc0VtcHR5KGFtb3VudCkpe1xub3B0UmVjb3ZlcnlTZXQuYWRkKHBheW1lbnQpO1xucGF5bWVudFJlY292ZXJ5U2V0cy5pbml0KHBheW1lbnQsb3B0UmVjb3ZlcnlTZXQpO1xuIH1cbnBheW1lbnRMZWRnZXIuaW5pdChwYXltZW50LGFtb3VudCk7XG4gfTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGRlbGV0ZVBheW1lbnQ9KHBheW1lbnQpPT57XG5wYXltZW50TGVkZ2VyLmRlbGV0ZShwYXltZW50KTtcbmlmKHBheW1lbnRSZWNvdmVyeVNldHMuaGFzKHBheW1lbnQpKXtcbmNvbnN0IHJlY292ZXJ5U2V0PXBheW1lbnRSZWNvdmVyeVNldHMuZ2V0KHBheW1lbnQpO1xucGF5bWVudFJlY292ZXJ5U2V0cy5kZWxldGUocGF5bWVudCk7XG5yZWNvdmVyeVNldC5kZWxldGUocGF5bWVudCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29lcmNlPShhbGxlZ2VkQW1vdW50KT0+QW1vdW50TWF0aC5jb2VyY2UoYnJhbmQsYWxsZWdlZEFtb3VudCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYXNzZXJ0QW1vdW50Q29uc2lzdGVudD0ocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpPT57XG5pZihvcHRBbW91bnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2gocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUsJ2Ftb3VudCcpO1xuIH1cbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBhc3NlcnRMaXZlUGF5bWVudD0ocGF5bWVudCk9PntcbnBheW1lbnRMZWRnZXIuaGFzKHBheW1lbnQpfHxcbkZhaWwgYCR7cGF5bWVudH0gd2FzIG5vdCBhIGxpdmUgcGF5bWVudCBmb3IgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfS4gSXQgY291bGQgYmUgYSB1c2VkLXVwIHBheW1lbnQsIGEgcGF5bWVudCBmb3IgYW5vdGhlciBicmFuZCwgb3IgaXQgbWlnaHQgbm90IGJlIGEgcGF5bWVudCBhdCBhbGwuYDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlcG9zaXRJbnRlcm5hbD0oXG5iYWxhbmNlU3RvcmUsXG5zcmNQYXltZW50LFxub3B0QW1vdW50U2hhcGU9dW5kZWZpbmVkKT0+XG57XG4haXNQcm9taXNlKHNyY1BheW1lbnQpfHxcbmFzc2VydC5mYWlsKFxuIGBkZXBvc2l0IGRvZXMgbm90IGFjY2VwdCBwcm9taXNlcyBhcyBmaXJzdCBhcmd1bWVudC4gSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBwcm9taXNlIChkZXBvc2l0KHBheW1lbnRQcm9taXNlKSksIGNvbnNpZGVyIHVud3JhcHBpbmcgdGhlIHByb21pc2UgZmlyc3Q6IEUud2hlbihwYXltZW50UHJvbWlzZSwgKGFjdHVhbFBheW1lbnQgPT4gZGVwb3NpdChhY3R1YWxQYXltZW50KSlgLFxuVHlwZUVycm9yKTtcblxuYXNzZXJ0TGl2ZVBheW1lbnQoc3JjUGF5bWVudCk7XG5jb25zdCBzcmNQYXltZW50QmFsYW5jZT1wYXltZW50TGVkZ2VyLmdldChzcmNQYXltZW50KTtcbmFzc2VydEFtb3VudENvbnNpc3RlbnQoc3JjUGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpO1xudHJ5e1xuLy9cbi8vXG4vL1xuZGVsZXRlUGF5bWVudChzcmNQYXltZW50KTtcbmJhbGFuY2VTdG9yZS5pbmNyZW1lbnQoc3JjUGF5bWVudEJhbGFuY2UpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBzcmNQYXltZW50QmFsYW5jZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHdpdGhkcmF3SW50ZXJuYWw9KGJhbGFuY2VTdG9yZSxhbW91bnQscmVjb3ZlcnlTZXQ9dW5kZWZpbmVkKT0+e1xuYW1vdW50PWNvZXJjZShhbW91bnQpO1xuY29uc3QgcGF5bWVudD1tYWtlUGF5bWVudCgpO1xuLy9cbi8vXG5iYWxhbmNlU3RvcmUuZGVjcmVtZW50KGFtb3VudCl8fFxuRmFpbCBgV2l0aGRyYXdhbCBvZiAke2Ftb3VudH0gZmFpbGVkIGJlY2F1c2UgdGhlIHB1cnNlIG9ubHkgY29udGFpbmVkICR7YmFsYW5jZVN0b3JlLmdldEFtb3VudCgpfWA7XG50cnl7XG5pbml0UGF5bWVudChwYXltZW50LGFtb3VudCxyZWNvdmVyeVNldCk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHBheW1lbnQ7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBtYWtlRW1wdHlQdXJzZT1wcmVwYXJlUHVyc2VLaW5kKFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5icmFuZCxcblB1cnNlSUtpdCxcbmhhcmRlbih7XG5kZXBvc2l0SW50ZXJuYWwsXG53aXRoZHJhd0ludGVybmFsfSksXG5cbnJlY292ZXJ5U2V0c1N0YXRlLFxucGF5bWVudFJlY292ZXJ5U2V0cyk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaXNzdWVyPWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBpc3N1ZXJgLElzc3Vlckkse1xuZ2V0QnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9LFxuZ2V0QWxsZWdlZE5hbWUoKXtcbnJldHVybiBuYW1lO1xuIH0sXG5nZXRBc3NldEtpbmQoKXtcbnJldHVybiBhc3NldEtpbmQ7XG4gfSxcbmdldERpc3BsYXlJbmZvKCl7XG5yZXR1cm4gZGlzcGxheUluZm87XG4gfSxcbm1ha2VFbXB0eVB1cnNlKCl7XG5yZXR1cm4gbWFrZUVtcHR5UHVyc2UoKTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5pc0xpdmUocGF5bWVudCl7XG4vL1xucmV0dXJuIHBheW1lbnRMZWRnZXIuaGFzKHBheW1lbnQpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEFtb3VudE9mKHBheW1lbnQpe1xuLy9cbmFzc2VydExpdmVQYXltZW50KHBheW1lbnQpO1xucmV0dXJuIHBheW1lbnRMZWRnZXIuZ2V0KHBheW1lbnQpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmJ1cm4ocGF5bWVudCxvcHRBbW91bnRTaGFwZT11bmRlZmluZWQpe1xuLy9cbmFzc2VydExpdmVQYXltZW50KHBheW1lbnQpO1xuY29uc3QgcGF5bWVudEJhbGFuY2U9cGF5bWVudExlZGdlci5nZXQocGF5bWVudCk7XG5hc3NlcnRBbW91bnRDb25zaXN0ZW50KHBheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlKTtcbnRyeXtcbi8vXG5kZWxldGVQYXltZW50KHBheW1lbnQpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBwYXltZW50QmFsYW5jZTtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWludFJlY292ZXJ5UHVyc2U9LyogICAgICAgICAgICAgICAgICAgKi9cbmlzc3VlclpvbmUubWFrZU9uY2UoJ21pbnRSZWNvdmVyeVB1cnNlJywoKT0+bWFrZUVtcHR5UHVyc2UoKSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWludD1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gbWludGAsTWludEkse1xuZ2V0SXNzdWVyKCl7XG5yZXR1cm4gaXNzdWVyO1xuIH0sXG5taW50UGF5bWVudChuZXdBbW91bnQpe1xubmV3QW1vdW50PWNvZXJjZShuZXdBbW91bnQpO1xubXVzdE1hdGNoKG5ld0Ftb3VudCxhbW91bnRTaGFwZSwnbWludGVkIGFtb3VudCcpO1xuLy9cbi8vXG5jb25zdCByYXdQYXltZW50PW1ha2VQYXltZW50KCk7XG5pbml0UGF5bWVudChyYXdQYXltZW50LG5ld0Ftb3VudCx1bmRlZmluZWQpO1xuXG5jb25zdCBtaW50UmVjb3ZlcnlQdXJzZUJlZm9yZT1taW50UmVjb3ZlcnlQdXJzZS5nZXRDdXJyZW50QW1vdW50KCk7XG5taW50UmVjb3ZlcnlQdXJzZS5kZXBvc2l0KHJhd1BheW1lbnQsbmV3QW1vdW50KTtcbmNvbnN0IHBheW1lbnQ9bWludFJlY292ZXJ5UHVyc2Uud2l0aGRyYXcobmV3QW1vdW50KTtcbmNvbnN0IG1pbnRSZWNvdmVyeVB1cnNlQWZ0ZXI9bWludFJlY292ZXJ5UHVyc2UuZ2V0Q3VycmVudEFtb3VudCgpO1xuYXNzZXJ0KGtleUVRKG1pbnRSZWNvdmVyeVB1cnNlQmVmb3JlLG1pbnRSZWNvdmVyeVB1cnNlQWZ0ZXIpKTtcbnJldHVybiBwYXltZW50O1xuIH19KTtcblxuXG5jb25zdCBpc3N1ZXJLaXQ9aGFyZGVuKHtpc3N1ZXIsbWludCxicmFuZCxtaW50UmVjb3ZlcnlQdXJzZX0pO1xucmV0dXJuIGlzc3VlcktpdDtcbiB9OyRozY9fb25jZS5wcmVwYXJlUGF5bWVudExlZGdlcihwcmVwYXJlUGF5bWVudExlZGdlcik7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRMZWRnZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVBheW1lbnRMZWRnZXIiOlsicHJlcGFyZVBheW1lbnRMZWRnZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAHcTRCroQAAC6EAAANwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvcHVyc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSIsIi4vYW1vdW50TWF0aC5qcyIsIi4vdHJhbnNpZW50Tm90aWZpZXIuanMiLCIuL2Ftb3VudFN0b3JlLmpzIl0sImV4cG9ydHMiOlsicHJlcGFyZVB1cnNlS2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLE0sbWFrZUNvcHlTZXQsQW1vdW50TWF0aCxtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQsbWFrZUFtb3VudFN0b3JlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlTZXQgPSAkaM2PX2EpXV1dXSxbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dLFtcIi4vdHJhbnNpZW50Tm90aWZpZXIuanNcIiwgW1tcIm1ha2VUcmFuc2llbnROb3RpZmllcktpdFwiLCBbJGjNj19hID0+IChtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL2Ftb3VudFN0b3JlLmpzXCIsIFtbXCJtYWtlQW1vdW50U3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZUFtb3VudFN0b3JlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBFTVBUWV9DT1BZX1NFVD1tYWtlQ29weVNldChbXSk7XG5cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQdXJzZUtpbmQ9KFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5icmFuZCxcblB1cnNlSUtpdCxcbnB1cnNlTWV0aG9kcyxcbnJlY292ZXJ5U2V0c1N0YXRlLFxucGF5bWVudFJlY292ZXJ5U2V0cyk9Plxue1xuY29uc3QgYW1vdW50U2hhcGU9YnJhbmQuZ2V0QW1vdW50U2hhcGUoKTtcblxuLy9cbi8vXG4vL1xuY29uc3R7cHJvdmlkZU5vdGlmaWVyLHVwZGF0ZTp1cGRhdGVCYWxhbmNlfT1tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlUmVjb3ZlcnlTZXQ9KHN0YXRlKT0+e1xuY29uc3R7cmVjb3ZlcnlTZXR9PXN0YXRlO1xuaWYocmVjb3ZlcnlTZXRzU3RhdGU9PT0naGFzUmVjb3ZlcnlTZXRzJyl7XG5yZXR1cm4gcmVjb3ZlcnlTZXQ7XG4gfWVsc2V7XG5yZWNvdmVyeVNldHNTdGF0ZT09PSdub1JlY292ZXJ5U2V0cyd8fFxuRmFpbCBgcmVjb3ZlclNldHNTdGF0ZSBtdXN0IGJlIG5vUmVjb3ZlcnlTZXRzIGlmIGl0IGlzbid0IGhhc1JlY292ZXJTZXRzYDtcbnBheW1lbnRSZWNvdmVyeVNldHMhPT11bmRlZmluZWR8fFxuRmFpbCBgcGF5bWVudFJlY292ZXJ5U2V0cyBtdXN0IGFsd2F5cyBiZSBkZWZpbmVkYDtcbnJlY292ZXJ5U2V0LmdldFNpemUoKT09PTB8fFxuRmFpbCBgV2l0aCBub1JlY292ZXJ5U2V0cywgcmVjb3ZlcnlTZXQgbXVzdCBiZSBlbXB0eWA7XG5cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0e2RlcG9zaXRJbnRlcm5hbCx3aXRoZHJhd0ludGVybmFsfT1wdXJzZU1ldGhvZHM7XG5jb25zdCBtYWtlUHVyc2VLaXQ9aXNzdWVyWm9uZS5leG9DbGFzc0tpdChcbiBgJHtuYW1lfSBQdXJzZWAsXG5QdXJzZUlLaXQsXG4oKT0+e1xuY29uc3QgY3VycmVudEJhbGFuY2U9QW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlY292ZXJ5U2V0PWlzc3VlclpvbmUuZGV0YWNoZWQoKS5zZXRTdG9yZSgncmVjb3Zlcnkgc2V0Jyk7XG5cbnJldHVybntcbmN1cnJlbnRCYWxhbmNlLFxucmVjb3ZlcnlTZXR9O1xuXG4gfSxcbntcbnB1cnNlOntcbmRlcG9zaXQoc3JjUGF5bWVudCxvcHRBbW91bnRTaGFwZT11bmRlZmluZWQpe1xuLy9cbi8vXG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0e3B1cnNlfT10aGlzLmZhY2V0cztcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG4vL1xuY29uc3Qgc3JjUGF5bWVudEJhbGFuY2U9ZGVwb3NpdEludGVybmFsKFxuYmFsYW5jZVN0b3JlLFxuc3JjUGF5bWVudCxcbm9wdEFtb3VudFNoYXBlKTtcblxudXBkYXRlQmFsYW5jZShwdXJzZSxiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCkpO1xucmV0dXJuIHNyY1BheW1lbnRCYWxhbmNlO1xuIH0sXG53aXRoZHJhdyhhbW91bnQpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdHtwdXJzZX09dGhpcy5mYWNldHM7XG5cbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuY29uc3QgYmFsYW5jZVN0b3JlPW1ha2VBbW91bnRTdG9yZShzdGF0ZSwnY3VycmVudEJhbGFuY2UnKTtcbi8vXG5jb25zdCBwYXltZW50PXdpdGhkcmF3SW50ZXJuYWwoXG5iYWxhbmNlU3RvcmUsXG5hbW91bnQsXG5vcHRSZWNvdmVyeVNldCk7XG5cbnVwZGF0ZUJhbGFuY2UocHVyc2UsYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpKTtcbnJldHVybiBwYXltZW50O1xuIH0sXG5nZXRDdXJyZW50QW1vdW50KCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG5yZXR1cm4gYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpO1xuIH0sXG5nZXRDdXJyZW50QW1vdW50Tm90aWZpZXIoKXtcbnJldHVybiBwcm92aWRlTm90aWZpZXIodGhpcy5mYWNldHMucHVyc2UpO1xuIH0sXG5nZXRBbGxlZ2VkQnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9LFxuXG5nZXREZXBvc2l0RmFjZXQoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5kZXBvc2l0RmFjZXQ7XG4gfSxcblxuZ2V0UmVjb3ZlcnlTZXQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3Qgb3B0UmVjb3ZlcnlTZXQ9bWF5YmVSZWNvdmVyeVNldChzdGF0ZSk7XG5pZihvcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gRU1QVFlfQ09QWV9TRVQ7XG4gfVxucmV0dXJuIG9wdFJlY292ZXJ5U2V0LnNuYXBzaG90KCk7XG4gfSxcbnJlY292ZXJBbGwoKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcbmxldCBhbW91bnQ9QW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuaWYob3B0UmVjb3ZlcnlTZXQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGFtb3VudDsvL1xuIH1cbmZvcihjb25zdCBwYXltZW50IG9mIG9wdFJlY292ZXJ5U2V0LmtleXMoKSl7XG4vL1xuLy9cbmNvbnN0IGRlbHRhPWZhY2V0cy5wdXJzZS5kZXBvc2l0KHBheW1lbnQpO1xuYW1vdW50PUFtb3VudE1hdGguYWRkKGFtb3VudCxkZWx0YSxicmFuZCk7XG4gfVxub3B0UmVjb3ZlcnlTZXQuZ2V0U2l6ZSgpPT09MHx8XG5GYWlsIGBpbnRlcm5hbDogUmVtYWluaW5nIHVucmVjb3ZlcmVkIHBheW1lbnRzOiAke2ZhY2V0cy5wdXJzZS5nZXRSZWNvdmVyeVNldCgpfWA7XG5yZXR1cm4gYW1vdW50O1xuIH19LFxuXG5kZXBvc2l0RmFjZXQ6e1xucmVjZWl2ZSguLi5hcmdzKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdXJzZS5kZXBvc2l0KC4uLmFyZ3MpO1xuIH19fSxcblxuXG57XG5zdGF0ZVNoYXBlOntcbmN1cnJlbnRCYWxhbmNlOmFtb3VudFNoYXBlLFxucmVjb3ZlcnlTZXQ6TS5yZW1vdGFibGUoJ3JlY292ZXJ5U2V0Jyl9fSk7XG5cblxuXG5yZXR1cm4oKT0+bWFrZVB1cnNlS2l0KCkucHVyc2U7XG4gfTskaM2PX29uY2UucHJlcGFyZVB1cnNlS2luZChwcmVwYXJlUHVyc2VLaW5kKTtcbmhhcmRlbihwcmVwYXJlUHVyc2VLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQdXJzZUtpbmQiOlsicHJlcGFyZVB1cnNlS2luZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACKmWPI1gUAANYFAABDAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90cmFuc2llbnROb3RpZmllci5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvbm90aWZpZXIiXSwiZXhwb3J0cyI6WyJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSxwcm92aWRlTGF6eSxtYWtlTm90aWZpZXJLaXQ7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJwcm92aWRlTGF6eVwiLCBbJGjNj19hID0+IChwcm92aWRlTGF6eSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIm1ha2VOb3RpZmllcktpdFwiLCBbJGjNj19hID0+IChtYWtlTm90aWZpZXJLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VUcmFuc2llbnROb3RpZmllcktpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdHJhbnNpZW50Tm90aWZlcktpdHM9bWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZShcbid0cmFuc2llbnROb3RpZmVyS2l0cycpO1xuXG5cbmNvbnN0IHByb3ZpZGVOb3RpZmllcktpdD0oa2V5KT0+XG5wcm92aWRlTGF6eSh0cmFuc2llbnROb3RpZmVyS2l0cyxrZXksKCk9PlxubWFrZU5vdGlmaWVyS2l0KGtleS5nZXRDdXJyZW50QW1vdW50KCkpKTtcblxuXG5jb25zdCBwcm92aWRlTm90aWZpZXI9KGtleSk9PnByb3ZpZGVOb3RpZmllcktpdChrZXkpLm5vdGlmaWVyO1xuY29uc3QgdXBkYXRlPShrZXksbmV3VmFsdWUpPT57XG5pZih0cmFuc2llbnROb3RpZmVyS2l0cy5oYXMoa2V5KSl7XG5jb25zdHt1cGRhdGVyfT10cmFuc2llbnROb3RpZmVyS2l0cy5nZXQoa2V5KTtcbnVwZGF0ZXIudXBkYXRlU3RhdGUobmV3VmFsdWUpO1xuIH1cbiB9O1xuXG5yZXR1cm57cHJvdmlkZU5vdGlmaWVyLHVwZGF0ZX07XG4gfTskaM2PX29uY2UubWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KG1ha2VUcmFuc2llbnROb3RpZmllcktpdCk7XG5oYXJkZW4obWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VUcmFuc2llbnROb3RpZmllcktpdCI6WyJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAEjBwTswYAADMGAAAPAAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIkFtb3VudFBhdHRlcm5TaGFwZSIsIkFtb3VudFNoYXBlIiwiQXNzZXRLaW5kU2hhcGUiLCJCcmFuZEkiLCJCcmFuZFNoYXBlIiwiRGVwb3NpdEZhY2V0U2hhcGUiLCJEaXNwbGF5SW5mb1NoYXBlIiwiSXNzdWVyS2l0U2hhcGUiLCJJc3N1ZXJTaGFwZSIsIk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyIsIk1pbnRTaGFwZSIsIk5vdGlmaWVyU2hhcGUiLCJQYXltZW50U2hhcGUiLCJQdXJzZVNoYXBlIiwiUmF0aW9TaGFwZSIsImlzQ29weUJhZ1ZhbHVlIiwiaXNDb3B5U2V0VmFsdWUiLCJpc05hdFZhbHVlIiwiaXNTZXRWYWx1ZSIsIm1ha2VJc3N1ZXJJbnRlcmZhY2VzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE0sbWF0Y2hlcyxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgQnJhbmRTaGFwZT1NLnJlbW90YWJsZSgnQnJhbmQnKTskaM2PX29uY2UuQnJhbmRTaGFwZShCcmFuZFNoYXBlKTtcbmNvbnN0ICAgICAgICBJc3N1ZXJTaGFwZT1NLnJlbW90YWJsZSgnSXNzdWVyJyk7JGjNj19vbmNlLklzc3VlclNoYXBlKElzc3VlclNoYXBlKTtcbmNvbnN0ICAgICAgICBQYXltZW50U2hhcGU9TS5yZW1vdGFibGUoJ1BheW1lbnQnKTskaM2PX29uY2UuUGF5bWVudFNoYXBlKFBheW1lbnRTaGFwZSk7XG5jb25zdCAgICAgICAgUHVyc2VTaGFwZT1NLnJlbW90YWJsZSgnUHVyc2UnKTskaM2PX29uY2UuUHVyc2VTaGFwZShQdXJzZVNoYXBlKTtcbmNvbnN0ICAgICAgICBEZXBvc2l0RmFjZXRTaGFwZT1NLnJlbW90YWJsZSgnRGVwb3NpdEZhY2V0Jyk7JGjNj19vbmNlLkRlcG9zaXRGYWNldFNoYXBlKERlcG9zaXRGYWNldFNoYXBlKTtcbmNvbnN0ICAgICAgICBOb3RpZmllclNoYXBlPU0ucmVtb3RhYmxlKCdOb3RpZmllcicpOyRozY9fb25jZS5Ob3RpZmllclNoYXBlKE5vdGlmaWVyU2hhcGUpO1xuY29uc3QgICAgICAgIE1pbnRTaGFwZT1NLnJlbW90YWJsZSgnTWludCcpO1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuTWludFNoYXBlKE1pbnRTaGFwZSk7XG5jb25zdCBOYXRWYWx1ZVNoYXBlPU0ubmF0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBDb3B5U2V0VmFsdWVTaGFwZT1NLnNldCgpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgU2V0VmFsdWVTaGFwZT1NLmFycmF5T2YoTS5rZXkoKSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IENvcHlCYWdWYWx1ZVNoYXBlPU0uYmFnKCk7XG5cbmNvbnN0IEFtb3VudFZhbHVlU2hhcGU9TS5vcihcbk5hdFZhbHVlU2hhcGUsXG5Db3B5U2V0VmFsdWVTaGFwZSxcblNldFZhbHVlU2hhcGUsXG5Db3B5QmFnVmFsdWVTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIEFtb3VudFNoYXBlPXticmFuZDpCcmFuZFNoYXBlLHZhbHVlOkFtb3VudFZhbHVlU2hhcGV9OyRozY9fb25jZS5BbW91bnRTaGFwZShBbW91bnRTaGFwZSk7XG5oYXJkZW4oQW1vdW50U2hhcGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQW1vdW50UGF0dGVyblNoYXBlPU0ucGF0dGVybigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLkFtb3VudFBhdHRlcm5TaGFwZShBbW91bnRQYXR0ZXJuU2hhcGUpO1xuY29uc3QgICAgICAgIFJhdGlvU2hhcGU9e251bWVyYXRvcjpBbW91bnRTaGFwZSxkZW5vbWluYXRvcjpBbW91bnRTaGFwZX07JGjNj19vbmNlLlJhdGlvU2hhcGUoUmF0aW9TaGFwZSk7XG5oYXJkZW4oUmF0aW9TaGFwZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzTmF0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxOYXRWYWx1ZVNoYXBlKTskaM2PX29uY2UuaXNOYXRWYWx1ZShpc05hdFZhbHVlKTtcbmhhcmRlbihpc05hdFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5U2V0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxDb3B5U2V0VmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzQ29weVNldFZhbHVlKGlzQ29weVNldFZhbHVlKTtcbmhhcmRlbihpc0NvcHlTZXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzU2V0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxTZXRWYWx1ZVNoYXBlKTskaM2PX29uY2UuaXNTZXRWYWx1ZShpc1NldFZhbHVlKTtcbmhhcmRlbihpc1NldFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5QmFnVmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxDb3B5QmFnVmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzQ29weUJhZ1ZhbHVlKGlzQ29weUJhZ1ZhbHVlKTtcbmhhcmRlbihpc0NvcHlCYWdWYWx1ZSk7XG5cbi8vXG5jb25zdCAgICAgICAgTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTPTEwMDskaM2PX29uY2UuTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyk7XG5cbmNvbnN0ICAgICAgICBBc3NldEtpbmRTaGFwZT1NLm9yKCduYXQnLCdzZXQnLCdjb3B5U2V0JywnY29weUJhZycpOyRozY9fb25jZS5Bc3NldEtpbmRTaGFwZShBc3NldEtpbmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBEaXNwbGF5SW5mb1NoYXBlPU0uc3BsaXRSZWNvcmQoXG57fSxcbntcbmRlY2ltYWxQbGFjZXM6TS5hbmQoXG5NLmd0ZSgtTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKSxcbk0ubHRlKE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUykpLFxuXG5hc3NldEtpbmQ6QXNzZXRLaW5kU2hhcGV9LFxuXG57XG4vL1xuLy9cbn0pOyRozY9fb25jZS5EaXNwbGF5SW5mb1NoYXBlKERpc3BsYXlJbmZvU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBJc3N1ZXJLaXRTaGFwZT17XG5icmFuZDpCcmFuZFNoYXBlLFxubWludDpNaW50U2hhcGUsXG5taW50UmVjb3ZlcnlQdXJzZTpQdXJzZVNoYXBlLFxuaXNzdWVyOklzc3VlclNoYXBlLFxuZGlzcGxheUluZm86RGlzcGxheUluZm9TaGFwZX07JGjNj19vbmNlLklzc3VlcktpdFNoYXBlKElzc3VlcktpdFNoYXBlKTtcblxuaGFyZGVuKElzc3VlcktpdFNoYXBlKTtcblxuLy9cblxuY29uc3QgICAgICAgIEJyYW5kST1NLmludGVyZmFjZSgnQnJhbmQnLHtcbmlzTXlJc3N1ZXI6TS5jYWxsV2hlbihNLmF3YWl0KElzc3VlclNoYXBlKSkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5nZXRBbGxlZ2VkTmFtZTpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0RGlzcGxheUluZm86TS5jYWxsKCkucmV0dXJucyhEaXNwbGF5SW5mb1NoYXBlKSxcbmdldEFtb3VudFNoYXBlOk0uY2FsbCgpLnJldHVybnMoTS5wYXR0ZXJuKCkpfSk7XG5cblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5CcmFuZEkoQnJhbmRJKTtcbmNvbnN0ICAgICAgICBtYWtlSXNzdWVySW50ZXJmYWNlcz0oXG5icmFuZFNoYXBlPUJyYW5kU2hhcGUsXG5hc3NldEtpbmRTaGFwZT1Bc3NldEtpbmRTaGFwZSxcbmFtb3VudFNoYXBlPUFtb3VudFNoYXBlKT0+XG57XG5jb25zdCBJc3N1ZXJJPU0uaW50ZXJmYWNlKCdJc3N1ZXInLHtcbmdldEJyYW5kOk0uY2FsbCgpLnJldHVybnMoYnJhbmRTaGFwZSksXG5nZXRBbGxlZ2VkTmFtZTpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0QXNzZXRLaW5kOk0uY2FsbCgpLnJldHVybnMoYXNzZXRLaW5kU2hhcGUpLFxuZ2V0RGlzcGxheUluZm86TS5jYWxsKCkucmV0dXJucyhEaXNwbGF5SW5mb1NoYXBlKSxcbm1ha2VFbXB0eVB1cnNlOk0uY2FsbCgpLnJldHVybnMoUHVyc2VTaGFwZSksXG5cbmlzTGl2ZTpNLmNhbGxXaGVuKE0uYXdhaXQoUGF5bWVudFNoYXBlKSkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5nZXRBbW91bnRPZjpNLmNhbGxXaGVuKE0uYXdhaXQoUGF5bWVudFNoYXBlKSkucmV0dXJucyhhbW91bnRTaGFwZSksXG5idXJuOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5cbm9wdGlvbmFsKEFtb3VudFBhdHRlcm5TaGFwZSkuXG5yZXR1cm5zKGFtb3VudFNoYXBlKX0pO1xuXG5cbmNvbnN0IE1pbnRJPU0uaW50ZXJmYWNlKCdNaW50Jyx7XG5nZXRJc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJTaGFwZSksXG5taW50UGF5bWVudDpNLmNhbGwoYW1vdW50U2hhcGUpLnJldHVybnMoUGF5bWVudFNoYXBlKX0pO1xuXG5cbmNvbnN0IFBheW1lbnRJPU0uaW50ZXJmYWNlKCdQYXltZW50Jyx7XG5nZXRBbGxlZ2VkQnJhbmQ6TS5jYWxsKCkucmV0dXJucyhicmFuZFNoYXBlKX0pO1xuXG5cbmNvbnN0IFB1cnNlST1NLmludGVyZmFjZSgnUHVyc2UnLHtcbmdldEFsbGVnZWRCcmFuZDpNLmNhbGwoKS5yZXR1cm5zKGJyYW5kU2hhcGUpLFxuZ2V0Q3VycmVudEFtb3VudDpNLmNhbGwoKS5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmdldEN1cnJlbnRBbW91bnROb3RpZmllcjpNLmNhbGwoKS5yZXR1cm5zKE5vdGlmaWVyU2hhcGUpLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcG9zaXQ6TS5jYWxsKFBheW1lbnRTaGFwZSkuXG5vcHRpb25hbChBbW91bnRQYXR0ZXJuU2hhcGUpLlxucmV0dXJucyhhbW91bnRTaGFwZSksXG5nZXREZXBvc2l0RmFjZXQ6TS5jYWxsKCkucmV0dXJucyhEZXBvc2l0RmFjZXRTaGFwZSksXG53aXRoZHJhdzpNLmNhbGwoYW1vdW50U2hhcGUpLnJldHVybnMoUGF5bWVudFNoYXBlKSxcbmdldFJlY292ZXJ5U2V0Ok0uY2FsbCgpLnJldHVybnMoTS5zZXRPZihQYXltZW50U2hhcGUpKSxcbnJlY292ZXJBbGw6TS5jYWxsKCkucmV0dXJucyhhbW91bnRTaGFwZSl9KTtcblxuXG5jb25zdCBEZXBvc2l0RmFjZXRJPU0uaW50ZXJmYWNlKCdEZXBvc2l0RmFjZXQnLHtcbnJlY2VpdmU6Z2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKFB1cnNlSSkubWV0aG9kR3VhcmRzLmRlcG9zaXR9KTtcblxuXG5jb25zdCBQdXJzZUlLaXQ9e1xucHVyc2U6UHVyc2VJLFxuZGVwb3NpdEZhY2V0OkRlcG9zaXRGYWNldEl9O1xuXG5oYXJkZW4oUHVyc2VJS2l0KTtcblxucmV0dXJuIGhhcmRlbih7XG5Jc3N1ZXJJLFxuTWludEksXG5QYXltZW50SSxcblB1cnNlSUtpdH0pO1xuXG4gfTskaM2PX29uY2UubWFrZUlzc3VlckludGVyZmFjZXMobWFrZUlzc3VlckludGVyZmFjZXMpO1xuaGFyZGVuKG1ha2VJc3N1ZXJJbnRlcmZhY2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJyYW5kU2hhcGUiOlsiQnJhbmRTaGFwZSJdLCJJc3N1ZXJTaGFwZSI6WyJJc3N1ZXJTaGFwZSJdLCJQYXltZW50U2hhcGUiOlsiUGF5bWVudFNoYXBlIl0sIlB1cnNlU2hhcGUiOlsiUHVyc2VTaGFwZSJdLCJEZXBvc2l0RmFjZXRTaGFwZSI6WyJEZXBvc2l0RmFjZXRTaGFwZSJdLCJOb3RpZmllclNoYXBlIjpbIk5vdGlmaWVyU2hhcGUiXSwiTWludFNoYXBlIjpbIk1pbnRTaGFwZSJdLCJBbW91bnRTaGFwZSI6WyJBbW91bnRTaGFwZSJdLCJBbW91bnRQYXR0ZXJuU2hhcGUiOlsiQW1vdW50UGF0dGVyblNoYXBlIl0sIlJhdGlvU2hhcGUiOlsiUmF0aW9TaGFwZSJdLCJpc05hdFZhbHVlIjpbImlzTmF0VmFsdWUiXSwiaXNDb3B5U2V0VmFsdWUiOlsiaXNDb3B5U2V0VmFsdWUiXSwiaXNTZXRWYWx1ZSI6WyJpc1NldFZhbHVlIl0sImlzQ29weUJhZ1ZhbHVlIjpbImlzQ29weUJhZ1ZhbHVlIl0sIk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyI6WyJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiXSwiQXNzZXRLaW5kU2hhcGUiOlsiQXNzZXRLaW5kU2hhcGUiXSwiRGlzcGxheUluZm9TaGFwZSI6WyJEaXNwbGF5SW5mb1NoYXBlIl0sIklzc3VlcktpdFNoYXBlIjpbIklzc3VlcktpdFNoYXBlIl0sIkJyYW5kSSI6WyJCcmFuZEkiXSwibWFrZUlzc3VlckludGVyZmFjZXMiOlsibWFrZUlzc3VlckludGVyZmFjZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAPQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALUPZ5pmAwAAZgMAAEEAAABAYWdvcmljL2dvdmVybmFuY2UtdjAuMTAuNC1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnN0YW50cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiUGFyYW1UeXBlIiwiUGFyYW1UeXBlcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFBhcmFtVHlwZT0vKiAgICAgICAgICAgICAgICAqL3tcbkFNT1VOVDonYW1vdW50JyxcbkJSQU5EOidicmFuZCcsXG5JTlNUQUxMQVRJT046J2luc3RhbGxhdGlvbicsXG5JTlNUQU5DRTonaW5zdGFuY2UnLFxuSU5WSVRBVElPTjonaW52aXRhdGlvbicsXG5OQVQ6J25hdCcsXG5SQVRJTzoncmF0aW8nLFxuU1RSSU5HOidzdHJpbmcnLFxuUEFTU0FCTEVfUkVDT1JEOidyZWNvcmQnLFxuVElNRVNUQU1QOid0aW1lc3RhbXAnLFxuUkVMQVRJVkVfVElNRToncmVsYXRpdmVUaW1lJyxcblVOS05PV046J3Vua25vd24nfTskaM2PX29uY2UuUGFyYW1UeXBlKFBhcmFtVHlwZSk7XG5cbmhhcmRlbihQYXJhbVR5cGUpO1xuXG4vL1xuLy9cbmNvbnN0ICAgICAgICBQYXJhbVR5cGVzPXsuLi5QYXJhbVR5cGV9OyRozY9fb25jZS5QYXJhbVR5cGVzKFBhcmFtVHlwZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUGFyYW1UeXBlIjpbIlBhcmFtVHlwZSJdLCJQYXJhbVR5cGVzIjpbIlBhcmFtVHlwZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAg0zIAbcLAAC3CwAAVQAAAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RHb3Zlcm5hbmNlL2Fzc2VydGlvbnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvcmF0aW8uanMiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy90aW1lIl0sImV4cG9ydHMiOlsiYXNzZXJ0UmVsYXRpdmVUaW1lIiwiYXNzZXJ0VGltZXN0YW1wIiwibWFrZUFzc2VydEJyYW5kZWRSYXRpbyIsIm1ha2VBc3NlcnRJbnN0YWxsYXRpb24iLCJtYWtlQXNzZXJ0SW5zdGFuY2UiLCJtYWtlTG9va3NMaWtlQnJhbmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxpc1JlbW90YWJsZSxhc3NlcnRJc1JhdGlvLG11c3RNYXRjaCxSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSxUaW1lc3RhbXBSZWNvcmRTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiaXNSZW1vdGFibGVcIiwgWyRozY9fYSA9PiAoaXNSZW1vdGFibGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L3JhdGlvLmpzXCIsIFtbXCJhc3NlcnRJc1JhdGlvXCIsIFskaM2PX2EgPT4gKGFzc2VydElzUmF0aW8gPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy90aW1lXCIsIFtbXCJSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJUaW1lc3RhbXBSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChUaW1lc3RhbXBSZWNvcmRTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuY29uc3QgbWFrZUxvb2tzTGlrZUJyYW5kPShuYW1lKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5yZXR1cm4oYnJhbmQpPT57XG5pc1JlbW90YWJsZShicmFuZCl8fEZhaWwgYHZhbHVlIGZvciAke25hbWV9IG11c3QgYmUgYSBicmFuZCwgd2FzICR7YnJhbmR9YDtcbiB9O1xuIH07JGjNj19vbmNlLm1ha2VMb29rc0xpa2VCcmFuZChtYWtlTG9va3NMaWtlQnJhbmQpO1xuaGFyZGVuKG1ha2VMb29rc0xpa2VCcmFuZCk7XG5cbmNvbnN0IG1ha2VBc3NlcnRJbnN0YWxsYXRpb249KG5hbWUpPT57XG5yZXR1cm4oaW5zdGFsbGF0aW9uKT0+e1xuLy9cbnR5cGVvZiBpbnN0YWxsYXRpb249PT0nb2JqZWN0J3x8XG5GYWlsIGB2YWx1ZSBmb3IgJHtuYW1lfSBtdXN0IGJlIGFuIEluc3RhbGxhdGlvbiwgd2FzICR7aW5zdGFsbGF0aW9ufWA7XG4gfTtcbiB9OyRozY9fb25jZS5tYWtlQXNzZXJ0SW5zdGFsbGF0aW9uKG1ha2VBc3NlcnRJbnN0YWxsYXRpb24pO1xuaGFyZGVuKG1ha2VBc3NlcnRJbnN0YWxsYXRpb24pO1xuXG5jb25zdCBtYWtlQXNzZXJ0SW5zdGFuY2U9KG5hbWUpPT57XG5yZXR1cm4oaW5zdGFuY2UpPT57XG4vL1xudHlwZW9mIGluc3RhbmNlPT09J29iamVjdCd8fFxuRmFpbCBgdmFsdWUgZm9yICR7bmFtZX0gbXVzdCBiZSBhbiBJbnN0YW5jZSwgd2FzICR7aW5zdGFuY2V9YDtcbiB9O1xuIH07JGjNj19vbmNlLm1ha2VBc3NlcnRJbnN0YW5jZShtYWtlQXNzZXJ0SW5zdGFuY2UpO1xuaGFyZGVuKG1ha2VBc3NlcnRJbnN0YW5jZSk7XG5cbmNvbnN0IG1ha2VBc3NlcnRCcmFuZGVkUmF0aW89KG5hbWUsbW9kZWxSYXRpbyk9PntcbnJldHVybihyYXRpbyk9PntcbmFzc2VydElzUmF0aW8ocmF0aW8pO1xucmF0aW8ubnVtZXJhdG9yLmJyYW5kPT09bW9kZWxSYXRpby5udW1lcmF0b3IuYnJhbmR8fFxuRmFpbCBgTnVtZXJhdG9yIGJyYW5kIGZvciAke25hbWV9IG11c3QgYmUgJHttb2RlbFJhdGlvLm51bWVyYXRvci5icmFuZH1gO1xucmF0aW8uZGVub21pbmF0b3IuYnJhbmQ9PT1tb2RlbFJhdGlvLmRlbm9taW5hdG9yLmJyYW5kfHxcbkZhaWwgYERlbm9taW5hdG9yIGJyYW5kIGZvciAke25hbWV9IG11c3QgYmUgJHttb2RlbFJhdGlvLmRlbm9taW5hdG9yLmJyYW5kfWA7XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuIH07JGjNj19vbmNlLm1ha2VBc3NlcnRCcmFuZGVkUmF0aW8obWFrZUFzc2VydEJyYW5kZWRSYXRpbyk7XG5oYXJkZW4obWFrZUFzc2VydEJyYW5kZWRSYXRpbyk7XG5cbmNvbnN0IGFzc2VydFJlbGF0aXZlVGltZT0odmFsdWUpPT57XG5tdXN0TWF0Y2godmFsdWUsUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUpO1xuIH07JGjNj19vbmNlLmFzc2VydFJlbGF0aXZlVGltZShhc3NlcnRSZWxhdGl2ZVRpbWUpO1xuaGFyZGVuKGFzc2VydFJlbGF0aXZlVGltZSk7XG5cbmNvbnN0IGFzc2VydFRpbWVzdGFtcD0odmFsdWUpPT57XG5tdXN0TWF0Y2godmFsdWUsVGltZXN0YW1wUmVjb3JkU2hhcGUsJ3RpbWVzdGFtcCcpO1xuIH07JGjNj19vbmNlLmFzc2VydFRpbWVzdGFtcChhc3NlcnRUaW1lc3RhbXApO1xuaGFyZGVuKGFzc2VydFRpbWVzdGFtcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTG9va3NMaWtlQnJhbmQiOlsibWFrZUxvb2tzTGlrZUJyYW5kIl0sIm1ha2VBc3NlcnRJbnN0YWxsYXRpb24iOlsibWFrZUFzc2VydEluc3RhbGxhdGlvbiJdLCJtYWtlQXNzZXJ0SW5zdGFuY2UiOlsibWFrZUFzc2VydEluc3RhbmNlIl0sIm1ha2VBc3NlcnRCcmFuZGVkUmF0aW8iOlsibWFrZUFzc2VydEJyYW5kZWRSYXRpbyJdLCJhc3NlcnRSZWxhdGl2ZVRpbWUiOlsiYXNzZXJ0UmVsYXRpdmVUaW1lIl0sImFzc2VydFRpbWVzdGFtcCI6WyJhc3NlcnRUaW1lc3RhbXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkmCiu2ENAABhDQAAVAAAAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RHb3Zlcm5hbmNlL2dvdmVybkFwaS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiLCIuLi9xdWVzdGlvbi5qcyJdLCJleHBvcnRzIjpbIm1ha2VBcGlJbnZvY2F0aW9uUG9zaXRpb25zIiwic2V0dXBBcGlHb3Zlcm5hbmNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxFLEZhcixrZXlFUSxDaG9pY2VNZXRob2QsUXVvcnVtUnVsZSxFbGVjdGlvblR5cGUsY29lcmNlUXVlc3Rpb25TcGVjOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImtleUVRXCIsIFskaM2PX2EgPT4gKGtleUVRID0gJGjNj19hKV1dXV0sW1wiLi4vcXVlc3Rpb24uanNcIiwgW1tcIkNob2ljZU1ldGhvZFwiLCBbJGjNj19hID0+IChDaG9pY2VNZXRob2QgPSAkaM2PX2EpXV0sW1wiUXVvcnVtUnVsZVwiLCBbJGjNj19hID0+IChRdW9ydW1SdWxlID0gJGjNj19hKV1dLFtcIkVsZWN0aW9uVHlwZVwiLCBbJGjNj19hID0+IChFbGVjdGlvblR5cGUgPSAkaM2PX2EpXV0sW1wiY29lcmNlUXVlc3Rpb25TcGVjXCIsIFskaM2PX2EgPT4gKGNvZXJjZVF1ZXN0aW9uU3BlYyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUFwaUludm9jYXRpb25Qb3NpdGlvbnM9KGFwaU1ldGhvZE5hbWUsbWV0aG9kQXJncyk9PntcbmNvbnN0IHBvc2l0aXZlPWhhcmRlbih7YXBpTWV0aG9kTmFtZSxtZXRob2RBcmdzfSk7XG5jb25zdCBuZWdhdGl2ZT1oYXJkZW4oe2RvbnRJbnZva2U6YXBpTWV0aG9kTmFtZX0pO1xucmV0dXJuIGhhcmRlbih7cG9zaXRpdmUsbmVnYXRpdmV9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZUFwaUludm9jYXRpb25Qb3NpdGlvbnMobWFrZUFwaUludm9jYXRpb25Qb3NpdGlvbnMpO1xuY29uc3Qgc2V0dXBBcGlHb3Zlcm5hbmNlPShcbmdvdmVybmVkQXBpcyxcbmdvdmVybmVkTmFtZXMsXG50aW1lcixcbmdldFVwZGF0ZWRQb3NlckZhY2V0KT0+XG57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgdm90ZUNvdW50ZXJzPW5ldyBXZWFrU2V0KCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZvdGVPbkFwaUludm9jYXRpb249YXN5bmMoXG5hcGlNZXRob2ROYW1lLFxubWV0aG9kQXJncyxcbnZvdGVDb3VudGVySW5zdGFsbGF0aW9uLFxuZGVhZGxpbmUpPT5cbntcbmdvdmVybmVkTmFtZXMuaW5jbHVkZXMoYXBpTWV0aG9kTmFtZSl8fFxuRmFpbCBgJHthcGlNZXRob2ROYW1lfSBpcyBub3QgYSBnb3Zlcm5lZCBBUEkuYDtcblxuY29uc3R7cG9zaXRpdmUsbmVnYXRpdmV9PW1ha2VBcGlJbnZvY2F0aW9uUG9zaXRpb25zKFxuYXBpTWV0aG9kTmFtZSxcbm1ldGhvZEFyZ3MpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNzdWU9aGFyZGVuKHthcGlNZXRob2ROYW1lLG1ldGhvZEFyZ3N9KTtcbmNvbnN0IHF1ZXN0aW9uU3BlYz1jb2VyY2VRdWVzdGlvblNwZWMoe1xubWV0aG9kOkNob2ljZU1ldGhvZC5VTlJBTktFRCxcbmlzc3VlLFxucG9zaXRpb25zOltwb3NpdGl2ZSxuZWdhdGl2ZV0sXG5lbGVjdGlvblR5cGU6RWxlY3Rpb25UeXBlLkFQSV9JTlZPQ0FUSU9OLFxubWF4Q2hvaWNlczoxLFxubWF4V2lubmVyczoxLFxuY2xvc2luZ1J1bGU6e3RpbWVyLGRlYWRsaW5lfSxcbnF1b3J1bVJ1bGU6UXVvcnVtUnVsZS5NQUpPUklUWSxcbnRpZU91dGNvbWU6bmVnYXRpdmV9KTtcblxuXG5jb25zdHtwdWJsaWNGYWNldDpjb3VudGVyUHVibGljRmFjZXQsaW5zdGFuY2U6dm90ZUNvdW50ZXJ9PWF3YWl0IEUoXG5nZXRVcGRhdGVkUG9zZXJGYWNldCgpKS5cbmFkZFF1ZXN0aW9uKHZvdGVDb3VudGVySW5zdGFsbGF0aW9uLHF1ZXN0aW9uU3BlYyk7XG5cbnZvdGVDb3VudGVycy5hZGQodm90ZUNvdW50ZXIpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IG91dGNvbWVPZlVwZGF0ZT1FKGNvdW50ZXJQdWJsaWNGYWNldCkuXG5nZXRPdXRjb21lKCkuXG50aGVuKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuKG91dGNvbWUpPT57XG5pZihrZXlFUShwb3NpdGl2ZSxvdXRjb21lKSl7XG5rZXlFUShvdXRjb21lLGhhcmRlbih7YXBpTWV0aG9kTmFtZSxtZXRob2RBcmdzfSkpfHxcbkZhaWwgYFRoZSBxdWVzdGlvbidzIG1ldGhvZCBuYW1lICgke3EoXG5hcGlNZXRob2ROYW1lKVxuIH0pIGFuZCBhcmdzICgke21ldGhvZEFyZ3N9KSBkaWRuJ3QgbWF0Y2ggdGhlIG91dGNvbWUgJHtvdXRjb21lfWA7XG5cbi8vXG5yZXR1cm4gRShnb3Zlcm5lZEFwaXMpW1xuYXBpTWV0aG9kTmFtZV0oLi4ubWV0aG9kQXJncykuXG50aGVuKCgpPT57XG5yZXR1cm4gcG9zaXRpdmU7XG4gfSk7XG4gfWVsc2V7XG5yZXR1cm4gbmVnYXRpdmU7XG4gfVxuIH0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xub3V0Y29tZU9mVXBkYXRlLFxuaW5zdGFuY2U6dm90ZUNvdW50ZXIsXG5kZXRhaWxzOkUoY291bnRlclB1YmxpY0ZhY2V0KS5nZXREZXRhaWxzKCl9KTtcblxuIH07XG5cbnJldHVybiBGYXIoJ3BhcmFtR292ZXJub3InLHtcbnZvdGVPbkFwaUludm9jYXRpb24sXG5jcmVhdGVkUXVlc3Rpb246KGIpPT52b3RlQ291bnRlcnMuaGFzKGIpfSk7XG5cbiB9OyRozY9fb25jZS5zZXR1cEFwaUdvdmVybmFuY2Uoc2V0dXBBcGlHb3Zlcm5hbmNlKTtcblxuaGFyZGVuKHNldHVwQXBpR292ZXJuYW5jZSk7XG5oYXJkZW4obWFrZUFwaUludm9jYXRpb25Qb3NpdGlvbnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFwaUludm9jYXRpb25Qb3NpdGlvbnMiOlsibWFrZUFwaUludm9jYXRpb25Qb3NpdGlvbnMiXSwic2V0dXBBcGlHb3Zlcm5hbmNlIjpbInNldHVwQXBpR292ZXJuYW5jZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD/2E8mMQwAADEMAABXAAAAQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdEdvdmVybmFuY2UvZ292ZXJuRmlsdGVyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCIuLi9xdWVzdGlvbi5qcyJdLCJleHBvcnRzIjpbIm1ha2VPZmZlckZpbHRlclBvc2l0aW9ucyIsInNldHVwRmlsdGVyR292ZXJuYW5jZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixtdXN0TWF0Y2gsa2V5RVEsTSxDaG9pY2VNZXRob2QsUXVvcnVtUnVsZSxFbGVjdGlvblR5cGUsY29lcmNlUXVlc3Rpb25TcGVjOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXSxbXCIuLi9xdWVzdGlvbi5qc1wiLCBbW1wiQ2hvaWNlTWV0aG9kXCIsIFskaM2PX2EgPT4gKENob2ljZU1ldGhvZCA9ICRozY9fYSldXSxbXCJRdW9ydW1SdWxlXCIsIFskaM2PX2EgPT4gKFF1b3J1bVJ1bGUgPSAkaM2PX2EpXV0sW1wiRWxlY3Rpb25UeXBlXCIsIFskaM2PX2EgPT4gKEVsZWN0aW9uVHlwZSA9ICRozY9fYSldXSxbXCJjb2VyY2VRdWVzdGlvblNwZWNcIiwgWyRozY9fYSA9PiAoY29lcmNlUXVlc3Rpb25TcGVjID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VPZmZlckZpbHRlclBvc2l0aW9ucz0oc3RyaW5ncyk9PntcbmNvbnN0IHBvc2l0aXZlPWhhcmRlbih7c3RyaW5nc30pO1xuY29uc3QgbmVnYXRpdmU9aGFyZGVuKHtkb250VXBkYXRlOnN0cmluZ3N9KTtcbnJldHVybntwb3NpdGl2ZSxuZWdhdGl2ZX07XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlT2ZmZXJGaWx0ZXJQb3NpdGlvbnMobWFrZU9mZmVyRmlsdGVyUG9zaXRpb25zKTtcbmNvbnN0IHNldHVwRmlsdGVyR292ZXJuYW5jZT0odGltZXIsZ2V0VXBkYXRlZFBvc2VyRmFjZXQsZ292ZXJuZWRDRik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB2b3RlQ291bnRlcnM9bmV3IFdlYWtTZXQoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZvdGVPbkZpbHRlcj1hc3luYyh2b3RlQ291bnRlckluc3RhbGxhdGlvbixkZWFkbGluZSxzdHJpbmdzKT0+e1xubXVzdE1hdGNoKHN0cmluZ3MsTS5hcnJheU9mKE0uc3RyaW5nKCkpKTtcbmNvbnN0e3Bvc2l0aXZlLG5lZ2F0aXZlfT1tYWtlT2ZmZXJGaWx0ZXJQb3NpdGlvbnMoc3RyaW5ncyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlPWhhcmRlbih7c3RyaW5nc30pO1xuY29uc3QgcXVlc3Rpb25TcGVjPWNvZXJjZVF1ZXN0aW9uU3BlYyh7XG5tZXRob2Q6Q2hvaWNlTWV0aG9kLlVOUkFOS0VELFxuaXNzdWUsXG5wb3NpdGlvbnM6W3Bvc2l0aXZlLG5lZ2F0aXZlXSxcbmVsZWN0aW9uVHlwZTpFbGVjdGlvblR5cGUuT0ZGRVJfRklMVEVSLFxubWF4Q2hvaWNlczoxLFxubWF4V2lubmVyczoxLFxuY2xvc2luZ1J1bGU6e3RpbWVyLGRlYWRsaW5lfSxcbnF1b3J1bVJ1bGU6UXVvcnVtUnVsZS5NQUpPUklUWSxcbnRpZU91dGNvbWU6bmVnYXRpdmV9KTtcblxuXG5jb25zdHtwdWJsaWNGYWNldDpjb3VudGVyUHVibGljRmFjZXQsaW5zdGFuY2U6dm90ZUNvdW50ZXJ9PWF3YWl0IEUoXG5nZXRVcGRhdGVkUG9zZXJGYWNldCgpKS5cbmFkZFF1ZXN0aW9uKHZvdGVDb3VudGVySW5zdGFsbGF0aW9uLHF1ZXN0aW9uU3BlYyk7XG5cbnZvdGVDb3VudGVycy5hZGQodm90ZUNvdW50ZXIpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IG91dGNvbWVPZlVwZGF0ZT1FKGNvdW50ZXJQdWJsaWNGYWNldCkuXG5nZXRPdXRjb21lKCkuXG50aGVuKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuKG91dGNvbWUpPT57XG5pZihrZXlFUShvdXRjb21lLHBvc2l0aXZlKSl7XG5yZXR1cm4gRShnb3Zlcm5lZENGKS5cbnNldE9mZmVyRmlsdGVyKHN0cmluZ3MpLlxudGhlbigoKT0+e1xucmV0dXJuIHBvc2l0aXZlO1xuIH0pO1xuIH1lbHNlIGlmKGtleUVRKG91dGNvbWUsbmVnYXRpdmUpKXtcbnJldHVybiBuZWdhdGl2ZTtcbiB9ZWxzZXtcbmFzc2VydC5mYWlsKCd1bnJlY29nbml6ZWQgb3V0Y29tZScpO1xuIH1cbiB9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbm91dGNvbWVPZlVwZGF0ZSxcbmluc3RhbmNlOnZvdGVDb3VudGVyLFxuZGV0YWlsczpFKGNvdW50ZXJQdWJsaWNGYWNldCkuZ2V0RGV0YWlscygpfSk7XG5cbiB9O1xuXG5yZXR1cm4gRmFyKCdmaWx0ZXJHb3Zlcm5vcicse1xudm90ZU9uRmlsdGVyLFxuY3JlYXRlZFF1ZXN0aW9uOihiKT0+dm90ZUNvdW50ZXJzLmhhcyhiKX0pO1xuXG4gfTskaM2PX29uY2Uuc2V0dXBGaWx0ZXJHb3Zlcm5hbmNlKHNldHVwRmlsdGVyR292ZXJuYW5jZSk7XG5cbmhhcmRlbihzZXR1cEZpbHRlckdvdmVybmFuY2UpO1xuaGFyZGVuKG1ha2VPZmZlckZpbHRlclBvc2l0aW9ucyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlT2ZmZXJGaWx0ZXJQb3NpdGlvbnMiOlsibWFrZU9mZmVyRmlsdGVyUG9zaXRpb25zIl0sInNldHVwRmlsdGVyR292ZXJuYW5jZSI6WyJzZXR1cEZpbHRlckdvdmVybmFuY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQzZE8SoSAAAqEgAAVgAAAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RHb3Zlcm5hbmNlL2dvdmVyblBhcmFtLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSIsIi4uL3F1ZXN0aW9uLmpzIiwiLi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbIkNPTlRSQUNUX0VMRUNUT1JBVEUiLCJhc3NlcnRCYWxsb3RDb25jZXJuc1BhcmFtIiwibWFrZVBhcmFtQ2hhbmdlUG9zaXRpb25zIiwic2V0dXBQYXJhbUdvdmVybmFuY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxFLGRlZXBseUZ1bGZpbGxlZCxGYXIsbXVzdE1hdGNoLGtleUVRLENob2ljZU1ldGhvZCxjb2VyY2VRdWVzdGlvblNwZWMsRWxlY3Rpb25UeXBlLFF1b3J1bVJ1bGUsUGFyYW1DaGFuZ2VzUXVlc3Rpb25EZXRhaWxzU2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjNj19hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV1dXSxbXCIuLi9xdWVzdGlvbi5qc1wiLCBbW1wiQ2hvaWNlTWV0aG9kXCIsIFskaM2PX2EgPT4gKENob2ljZU1ldGhvZCA9ICRozY9fYSldXSxbXCJjb2VyY2VRdWVzdGlvblNwZWNcIiwgWyRozY9fYSA9PiAoY29lcmNlUXVlc3Rpb25TcGVjID0gJGjNj19hKV1dLFtcIkVsZWN0aW9uVHlwZVwiLCBbJGjNj19hID0+IChFbGVjdGlvblR5cGUgPSAkaM2PX2EpXV0sW1wiUXVvcnVtUnVsZVwiLCBbJGjNj19hID0+IChRdW9ydW1SdWxlID0gJGjNj19hKV1dXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiUGFyYW1DaGFuZ2VzUXVlc3Rpb25EZXRhaWxzU2hhcGVcIiwgWyRozY9fYSA9PiAoUGFyYW1DaGFuZ2VzUXVlc3Rpb25EZXRhaWxzU2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCBDT05UUkFDVF9FTEVDVE9SQVRFPSdFbGVjdG9yYXRlJztcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuQ09OVFJBQ1RfRUxFQ1RPUkFURShDT05UUkFDVF9FTEVDVE9SQVRFKTtcbmNvbnN0IG1ha2VQYXJhbUNoYW5nZVBvc2l0aW9ucz0oY2hhbmdlcyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwb3NpdGl2ZT17Y2hhbmdlc307XG5jb25zdCBuYW1lc09ubHk9T2JqZWN0LmtleXMoY2hhbmdlcyk7XG5jb25zdCBuZWdhdGl2ZT17bm9DaGFuZ2U6bmFtZXNPbmx5fTtcbnJldHVybiBoYXJkZW4oe3Bvc2l0aXZlLG5lZ2F0aXZlfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVBhcmFtQ2hhbmdlUG9zaXRpb25zKG1ha2VQYXJhbUNoYW5nZVBvc2l0aW9ucyk7XG5jb25zdCBhc3NlcnRCYWxsb3RDb25jZXJuc1BhcmFtPShwYXJhbVNwZWMscXVlc3Rpb25TcGVjKT0+e1xubXVzdE1hdGNoKHF1ZXN0aW9uU3BlYyxQYXJhbUNoYW5nZXNRdWVzdGlvbkRldGFpbHNTaGFwZSk7XG5cbmNvbnN0e3BhcmFtZXRlck5hbWUscGFyYW1QYXRofT1wYXJhbVNwZWM7XG5jb25zdHtpc3N1ZX09cXVlc3Rpb25TcGVjO1xuaXNzdWUuc3BlYy5jaGFuZ2VzW3BhcmFtZXRlck5hbWVdfHxcbkZhaWwgYFF1ZXN0aW9uICgke2lzc3VlLnNwZWMuY2hhbmdlc30pIGRvZXMgbm90IGNvbmNlcm4gJHtwYXJhbWV0ZXJOYW1lfWA7XG5rZXlFUShpc3N1ZS5zcGVjLnBhcmFtUGF0aCxwYXJhbVBhdGgpfHxcbkZhaWwgYFF1ZXN0aW9uIHBhdGggKCR7aXNzdWUuc3BlYy5wYXJhbVBhdGh9KSBkb2Vzbid0IG1hdGNoIHJlcXVlc3QgKCR7cGFyYW1QYXRofSlgO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmFzc2VydEJhbGxvdENvbmNlcm5zUGFyYW0oYXNzZXJ0QmFsbG90Q29uY2VybnNQYXJhbSk7XG5jb25zdCBzZXR1cFBhcmFtR292ZXJuYW5jZT0oXG5wYXJhbU1hbmFnZXJSZXRyaWV2ZXJBY2Nlc3NvcixcbmNvbnRyYWN0SW5zdGFuY2UsXG50aW1lcixcbmdldFVwZGF0ZWRQb3NlckZhY2V0KT0+XG57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgdm90ZUNvdW50ZXJzPW5ldyBXZWFrU2V0KCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgdm90ZU9uUGFyYW1DaGFuZ2VzPWFzeW5jKFxudm90ZUNvdW50ZXJJbnN0YWxsYXRpb24sXG5kZWFkbGluZSxcbnBhcmFtU3BlYyk9Plxue1xuY29uc3QgcGFyYW1NYW5hZ2VyUmV0cmlldmVyPXBhcmFtTWFuYWdlclJldHJpZXZlckFjY2Vzc29yKCk7XG5jb25zdCBwYXJhbU1ncj1hd2FpdCBFKHBhcmFtTWFuYWdlclJldHJpZXZlcikuZ2V0KHBhcmFtU3BlYy5wYXJhbVBhdGgpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNoYW5nZVBzPXt9O1xuZm9yKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMocGFyYW1TcGVjLmNoYW5nZXMpKXtcbmNvbnN0IHByb3Bvc2VkVmFsdWU9RShwYXJhbU1ncikuZ2V0VmlzaWJsZVZhbHVlKFxubmFtZSxcbnBhcmFtU3BlYy5jaGFuZ2VzW25hbWVdKTtcblxuY2hhbmdlUHNbbmFtZV09cHJvcG9zZWRWYWx1ZTtcbiB9XG5jb25zdCBjaGFuZ2VzPWF3YWl0IGRlZXBseUZ1bGZpbGxlZChoYXJkZW4oY2hhbmdlUHMpKTtcblxuY29uc3R7cG9zaXRpdmUsbmVnYXRpdmV9PW1ha2VQYXJhbUNoYW5nZVBvc2l0aW9ucyhjaGFuZ2VzKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNzdWU9aGFyZGVuKHtcbnNwZWM6e1xucGFyYW1QYXRoOnBhcmFtU3BlYy5wYXJhbVBhdGgsXG5jaGFuZ2VzfSxcblxuY29udHJhY3Q6Y29udHJhY3RJbnN0YW5jZX0pO1xuXG5cbmNvbnN0IHF1ZXN0aW9uU3BlYz1jb2VyY2VRdWVzdGlvblNwZWMoe1xubWV0aG9kOkNob2ljZU1ldGhvZC5VTlJBTktFRCxcbmlzc3VlLFxucG9zaXRpb25zOltwb3NpdGl2ZSxuZWdhdGl2ZV0sXG5lbGVjdGlvblR5cGU6RWxlY3Rpb25UeXBlLlBBUkFNX0NIQU5HRSxcbm1heENob2ljZXM6MSxcbm1heFdpbm5lcnM6MSxcbmNsb3NpbmdSdWxlOnt0aW1lcixkZWFkbGluZX0sXG5xdW9ydW1SdWxlOlF1b3J1bVJ1bGUuTUFKT1JJVFksXG50aWVPdXRjb21lOm5lZ2F0aXZlfSk7XG5cblxuY29uc3R7cHVibGljRmFjZXQ6Y291bnRlclB1YmxpY0ZhY2V0LGluc3RhbmNlOnZvdGVDb3VudGVyfT1hd2FpdCBFKFxuZ2V0VXBkYXRlZFBvc2VyRmFjZXQoKSkuXG5hZGRRdWVzdGlvbih2b3RlQ291bnRlckluc3RhbGxhdGlvbixxdWVzdGlvblNwZWMpO1xuXG52b3RlQ291bnRlcnMuYWRkKHZvdGVDb3VudGVyKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBvdXRjb21lT2ZVcGRhdGU9RShjb3VudGVyUHVibGljRmFjZXQpLlxuZ2V0T3V0Y29tZSgpLlxudGhlbihhc3luYyhvdXRjb21lKT0+e1xuaWYoa2V5RVEocG9zaXRpdmUsb3V0Y29tZSkpe1xucmV0dXJuIEUud2hlbihcbkUocGFyYW1NZ3IpLnVwZGF0ZVBhcmFtcyhwYXJhbVNwZWMuY2hhbmdlcyksXG4oKT0+cG9zaXRpdmUpO1xuXG4gfVxucmV0dXJuIG5lZ2F0aXZlO1xuIH0pO1xuXG5yZXR1cm57XG5vdXRjb21lT2ZVcGRhdGUsXG5pbnN0YW5jZTp2b3RlQ291bnRlcixcbmRldGFpbHM6RShjb3VudGVyUHVibGljRmFjZXQpLmdldERldGFpbHMoKX07XG5cbiB9O1xuXG5yZXR1cm4gRmFyKCdwYXJhbUdvdmVybm9yJyx7XG52b3RlT25QYXJhbUNoYW5nZXMsXG5jcmVhdGVkUXVlc3Rpb246KGIpPT52b3RlQ291bnRlcnMuaGFzKGIpfSk7XG5cbiB9OyRozY9fb25jZS5zZXR1cFBhcmFtR292ZXJuYW5jZShzZXR1cFBhcmFtR292ZXJuYW5jZSk7XG5cbmhhcmRlbihzZXR1cFBhcmFtR292ZXJuYW5jZSk7XG5oYXJkZW4obWFrZVBhcmFtQ2hhbmdlUG9zaXRpb25zKTtcbmhhcmRlbihhc3NlcnRCYWxsb3RDb25jZXJuc1BhcmFtKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNPTlRSQUNUX0VMRUNUT1JBVEUiOlsiQ09OVFJBQ1RfRUxFQ1RPUkFURSJdLCJtYWtlUGFyYW1DaGFuZ2VQb3NpdGlvbnMiOlsibWFrZVBhcmFtQ2hhbmdlUG9zaXRpb25zIl0sImFzc2VydEJhbGxvdENvbmNlcm5zUGFyYW0iOlsiYXNzZXJ0QmFsbG90Q29uY2VybnNQYXJhbSJdLCJzZXR1cFBhcmFtR292ZXJuYW5jZSI6WyJzZXR1cFBhcmFtR292ZXJuYW5jZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACVTh7CXDEAAFwxAABXAAAAQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdEdvdmVybmFuY2UvcGFyYW1NYW5hZ2VyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2VydHAiLCJAYWdvcmljL3pvZS9zcmMvY2xlYW5Qcm9wb3NhbC5qcyIsIkBlbmRvL25hdCIsIkBhZ29yaWMvc3RvcmUiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9pbnRlcm5hbCIsIi4uL2NvbnN0YW50cy5qcyIsIi4vYXNzZXJ0aW9ucy5qcyIsIi4vZ292ZXJuUGFyYW0uanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRFbGVjdG9yYXRlTWF0Y2hlcyIsIm1ha2VQYXJhbU1hbmFnZXJCdWlsZGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxGYXIscGFzc1N0eWxlT2YsQW1vdW50TWF0aCxhc3NlcnRLZXl3b3JkTmFtZSxOYXQsa2V5RVEsbWFrZVNjYWxhck1hcFN0b3JlLEUsYXNzZXJ0QWxsRGVmaW5lZCxQYXJhbVR5cGVzLGFzc2VydFRpbWVzdGFtcCxhc3NlcnRSZWxhdGl2ZVRpbWUsbWFrZUFzc2VydEJyYW5kZWRSYXRpbyxtYWtlQXNzZXJ0SW5zdGFsbGF0aW9uLG1ha2VBc3NlcnRJbnN0YW5jZSxtYWtlTG9va3NMaWtlQnJhbmQsQ09OVFJBQ1RfRUxFQ1RPUkFURTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvem9lL3NyYy9jbGVhblByb3Bvc2FsLmpzXCIsIFtbXCJhc3NlcnRLZXl3b3JkTmFtZVwiLCBbJGjNj19hID0+IChhc3NlcnRLZXl3b3JkTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImtleUVRXCIsIFskaM2PX2EgPT4gKGtleUVRID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJhc3NlcnRBbGxEZWZpbmVkXCIsIFskaM2PX2EgPT4gKGFzc2VydEFsbERlZmluZWQgPSAkaM2PX2EpXV1dXSxbXCIuLi9jb25zdGFudHMuanNcIiwgW1tcIlBhcmFtVHlwZXNcIiwgWyRozY9fYSA9PiAoUGFyYW1UeXBlcyA9ICRozY9fYSldXV1dLFtcIi4vYXNzZXJ0aW9ucy5qc1wiLCBbW1wiYXNzZXJ0VGltZXN0YW1wXCIsIFskaM2PX2EgPT4gKGFzc2VydFRpbWVzdGFtcCA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWxhdGl2ZVRpbWVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVsYXRpdmVUaW1lID0gJGjNj19hKV1dLFtcIm1ha2VBc3NlcnRCcmFuZGVkUmF0aW9cIiwgWyRozY9fYSA9PiAobWFrZUFzc2VydEJyYW5kZWRSYXRpbyA9ICRozY9fYSldXSxbXCJtYWtlQXNzZXJ0SW5zdGFsbGF0aW9uXCIsIFskaM2PX2EgPT4gKG1ha2VBc3NlcnRJbnN0YWxsYXRpb24gPSAkaM2PX2EpXV0sW1wibWFrZUFzc2VydEluc3RhbmNlXCIsIFskaM2PX2EgPT4gKG1ha2VBc3NlcnRJbnN0YW5jZSA9ICRozY9fYSldXSxbXCJtYWtlTG9va3NMaWtlQnJhbmRcIiwgWyRozY9fYSA9PiAobWFrZUxvb2tzTGlrZUJyYW5kID0gJGjNj19hKV1dXV0sW1wiLi9nb3Zlcm5QYXJhbS5qc1wiLCBbW1wiQ09OVFJBQ1RfRUxFQ1RPUkFURVwiLCBbJGjNj19hID0+IChDT05UUkFDVF9FTEVDVE9SQVRFID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCBhc3NlcnRFbGVjdG9yYXRlTWF0Y2hlcz0ocGFyYW1NYW5hZ2VyLGdvdmVybmVkUGFyYW1zKT0+e1xuY29uc3QgbWFuYWdlckVsZWN0b3JhdGU9XG5wYXJhbU1hbmFnZXIuZ2V0SW52aXRhdGlvbkFtb3VudChDT05UUkFDVF9FTEVDVE9SQVRFKTtcbmNvbnN0e1xuW0NPTlRSQUNUX0VMRUNUT1JBVEVdOnt2YWx1ZTpwYXJhbUVsZWN0b3JhdGV9fT1cbmdvdmVybmVkUGFyYW1zO1xucGFyYW1FbGVjdG9yYXRlfHxcbkZhaWwgYE1pc3NpbmcgJHtxKENPTlRSQUNUX0VMRUNUT1JBVEUpfSB0ZXJtIGluICR7cShnb3Zlcm5lZFBhcmFtcyl9YDtcbmtleUVRKG1hbmFnZXJFbGVjdG9yYXRlLHBhcmFtRWxlY3RvcmF0ZSl8fFxuRmFpbCBgRWxlY3RvcmF0ZSBpbiBtYW5hZ2VyICgke21hbmFnZXJFbGVjdG9yYXRlfSl9IGluY29tcGF0aWJsZSB3aXRoIHRlcm1zICgke3BhcmFtRWxlY3RvcmF0ZX1gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovJGjNj19vbmNlLmFzc2VydEVsZWN0b3JhdGVNYXRjaGVzKGFzc2VydEVsZWN0b3JhdGVNYXRjaGVzKTtcbmNvbnN0IG1ha2VQYXJhbU1hbmFnZXJCdWlsZGVyPShwdWJsaXNoZXJLaXQsem9lKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbmFtZXNUb1BhcmFtcz1tYWtlU2NhbGFyTWFwU3RvcmUoJ1BhcmFtZXRlciBOYW1lJyk7XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09cHVibGlzaGVyS2l0O1xuYXNzZXJ0QWxsRGVmaW5lZCh7cHVibGlzaGVyLHN1YnNjcmliZXJ9KTtcblxuY29uc3QgZ2V0dGVycz17fTtcbmNvbnN0IHNldHRlcnM9e307XG5jb25zdCB1bmZpbmlzaGVkUGFyYW1zPVtdO1xuXG4vL1xuLy9cbmNvbnN0IGZpbmlzaEJ1aWxkaW5nPWFzeW5jKCk9PntcbmF3YWl0IFByb21pc2UuYWxsKHVuZmluaXNoZWRQYXJhbXMpO1xudW5maW5pc2hlZFBhcmFtcy5sZW5ndGg9MDtcbiB9O1xuXG5jb25zdCBwdWJsaXNoPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjdXJyZW50PU9iamVjdC5mcm9tRW50cmllcyhcblsuLi5uYW1lc1RvUGFyYW1zLmVudHJpZXMoKV0ubWFwKChbayx2XSk9PltrLHYubWFrZURlc2NyaXB0aW9uKCldKSk7XG5cbnB1Ymxpc2hlci51cGRhdGVTdGF0ZSh7Y3VycmVudH0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGJ1aWxkQ29weVBhcmFtPShuYW1lLHZhbHVlLGFzc2VydGlvbix0eXBlKT0+e1xubGV0IGN1cnJlbnQ7XG5hc3NlcnRLZXl3b3JkTmFtZShuYW1lKTtcbnZhbHVlIT09dW5kZWZpbmVkfHxGYWlsIGBwYXJhbSAke3EobmFtZSl9IG11c3QgYmUgZGVmaW5lZGA7XG5cbmNvbnN0IHNldFBhcmFtVmFsdWU9KG5ld1ZhbHVlKT0+e1xuYXNzZXJ0aW9uKG5ld1ZhbHVlKTtcbmN1cnJlbnQ9bmV3VmFsdWU7XG5yZXR1cm4gaGFyZGVuKHtbbmFtZV06bmV3VmFsdWV9KTtcbiB9O1xuc2V0UGFyYW1WYWx1ZSh2YWx1ZSk7XG5cbmNvbnN0IGdldFZpc2libGVWYWx1ZT0ocHJvcG9zZWQpPT57XG5hc3NlcnRpb24ocHJvcG9zZWQpO1xucmV0dXJuIHByb3Bvc2VkO1xuIH07XG5cbmNvbnN0IHB1YmxpY01ldGhvZHM9RmFyKCBgUGFyYW1ldGVyICR7bmFtZX1gLHtcbmdldFZhbHVlOigpPT5jdXJyZW50LFxuYXNzZXJ0VHlwZTphc3NlcnRpb24sXG5tYWtlRGVzY3JpcHRpb246KCk9Pih7dHlwZSx2YWx1ZTpjdXJyZW50fSksXG5nZXRWaXNpYmxlVmFsdWUsXG5nZXRUeXBlOigpPT50eXBlfSk7XG5cblxuLy9cbi8vXG5nZXR0ZXJzWyBgZ2V0JHtuYW1lfWBdPSgpPT5nZXRUeXBlZFBhcmFtKHR5cGUsbmFtZSk7XG4vL1xuLy9cbi8vXG4vL1xuc2V0dGVyc1sgYHVwZGF0ZSR7bmFtZX1gXT1zZXRQYXJhbVZhbHVlO1xuc2V0dGVyc1sgYHByZXBhcmVUb1VwZGF0ZSR7bmFtZX1gXT0ocHJvcG9zZWRWYWx1ZSk9PnByb3Bvc2VkVmFsdWU7XG5uYW1lc1RvUGFyYW1zLmluaXQobmFtZSxwdWJsaWNNZXRob2RzKTtcbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhZGRBbW91bnQ9KG5hbWUsdmFsdWUsYnVpbGRlcik9PntcbmNvbnN0IGFzc2VydEFtb3VudD0oYSk9PntcbmEuYnJhbmR8fEZhaWwgYEV4cGVjdGVkIGFuIEFtb3VudCBmb3IgJHtxKG5hbWUpfSwgZ290OiAke2F9YDtcbnJldHVybiBBbW91bnRNYXRoLmNvZXJjZSh2YWx1ZS5icmFuZCxhKTtcbiB9O1xuYnVpbGRDb3B5UGFyYW0obmFtZSx2YWx1ZSxhc3NlcnRBbW91bnQsUGFyYW1UeXBlcy5BTU9VTlQpO1xucmV0dXJuIGJ1aWxkZXI7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhZGRCcmFuZD0obmFtZSx2YWx1ZSxidWlsZGVyKT0+e1xuY29uc3QgYXNzZXJ0QnJhbmQ9bWFrZUxvb2tzTGlrZUJyYW5kKG5hbWUpO1xuYnVpbGRDb3B5UGFyYW0obmFtZSx2YWx1ZSxhc3NlcnRCcmFuZCxQYXJhbVR5cGVzLkJSQU5EKTtcbnJldHVybiBidWlsZGVyO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFkZEluc3RhbGxhdGlvbj0obmFtZSx2YWx1ZSxidWlsZGVyKT0+e1xuY29uc3QgYXNzZXJ0SW5zdGFsbGF0aW9uPW1ha2VBc3NlcnRJbnN0YWxsYXRpb24obmFtZSk7XG5idWlsZENvcHlQYXJhbShuYW1lLHZhbHVlLGFzc2VydEluc3RhbGxhdGlvbixQYXJhbVR5cGVzLklOU1RBTExBVElPTik7XG5yZXR1cm4gYnVpbGRlcjtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFkZEluc3RhbmNlPShuYW1lLHZhbHVlLGJ1aWxkZXIpPT57XG5jb25zdCBhc3NlcnRJbnN0YW5jZT1tYWtlQXNzZXJ0SW5zdGFuY2UobmFtZSk7XG5idWlsZENvcHlQYXJhbShuYW1lLHZhbHVlLGFzc2VydEluc3RhbmNlLFBhcmFtVHlwZXMuSU5TVEFOQ0UpO1xucmV0dXJuIGJ1aWxkZXI7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWRkTmF0PShuYW1lLHZhbHVlLGJ1aWxkZXIpPT57XG5jb25zdCBhc3NlcnROYXQ9KHYpPT57XG5hc3NlcnQudHlwZW9mKHYsJ2JpZ2ludCcpO1xuTmF0KHYpO1xucmV0dXJuIHRydWU7XG4gfTtcbmJ1aWxkQ29weVBhcmFtKG5hbWUsdmFsdWUsYXNzZXJ0TmF0LFBhcmFtVHlwZXMuTkFUKTtcbnJldHVybiBidWlsZGVyO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWRkUmF0aW89KG5hbWUsdmFsdWUsYnVpbGRlcik9PntcbmNvbnN0IGFzc2VydEJyYW5kZWRSYXRpbz1tYWtlQXNzZXJ0QnJhbmRlZFJhdGlvKG5hbWUsdmFsdWUpO1xuYnVpbGRDb3B5UGFyYW0obmFtZSx2YWx1ZSxhc3NlcnRCcmFuZGVkUmF0aW8sUGFyYW1UeXBlcy5SQVRJTyk7XG5yZXR1cm4gYnVpbGRlcjtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWRkUmVjb3JkPShuYW1lLHZhbHVlLGJ1aWxkZXIpPT57XG5jb25zdCBhc3NlcnRSZWNvcmQ9KHYpPT57XG5wYXNzU3R5bGVPZih2KTtcbmFzc2VydC50eXBlb2Yodiwnb2JqZWN0Jyk7XG4gfTtcbmJ1aWxkQ29weVBhcmFtKG5hbWUsdmFsdWUsYXNzZXJ0UmVjb3JkLFBhcmFtVHlwZXMuUEFTU0FCTEVfUkVDT1JEKTtcbnJldHVybiBidWlsZGVyO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFkZFN0cmluZz0obmFtZSx2YWx1ZSxidWlsZGVyKT0+e1xuY29uc3QgYXNzZXJ0U3RyaW5nPSh2KT0+YXNzZXJ0LnR5cGVvZih2LCdzdHJpbmcnKTtcbmJ1aWxkQ29weVBhcmFtKG5hbWUsdmFsdWUsYXNzZXJ0U3RyaW5nLFBhcmFtVHlwZXMuU1RSSU5HKTtcbnJldHVybiBidWlsZGVyO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWRkVGltZXN0YW1wPShuYW1lLHZhbHVlLGJ1aWxkZXIpPT57XG5idWlsZENvcHlQYXJhbShuYW1lLHZhbHVlLGFzc2VydFRpbWVzdGFtcCxQYXJhbVR5cGVzLlRJTUVTVEFNUCk7XG5yZXR1cm4gYnVpbGRlcjtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFkZFJlbGF0aXZlVGltZT0obmFtZSx2YWx1ZSxidWlsZGVyKT0+e1xuYnVpbGRDb3B5UGFyYW0obmFtZSx2YWx1ZSxhc3NlcnRSZWxhdGl2ZVRpbWUsUGFyYW1UeXBlcy5SRUxBVElWRV9USU1FKTtcbnJldHVybiBidWlsZGVyO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFkZFVua25vd249KG5hbWUsdmFsdWUsYnVpbGRlcik9PntcbmNvbnN0IGFzc2VydFVua25vd249KF92KT0+dHJ1ZTtcbmJ1aWxkQ29weVBhcmFtKG5hbWUsdmFsdWUsYXNzZXJ0VW5rbm93bixQYXJhbVR5cGVzLlVOS05PV04pO1xucmV0dXJuIGJ1aWxkZXI7XG4gfTtcblxuY29uc3QgYXNzZXJ0SW52aXRhdGlvbj1hc3luYyhpKT0+e1xuaWYoIXpvZSl7XG50aHJvdyBGYWlsIGB6b2UgbXVzdCBiZSBwcm92aWRlZCBmb3IgZ292ZXJuZWQgSW52aXRhdGlvbnMgJHt6b2V9YDtcbiB9XG5cbi8vXG5jb25zdCBpc0xpdmU9YXdhaXQgRShFKHpvZSkuZ2V0SW52aXRhdGlvbklzc3VlcigpKS5pc0xpdmUoaSk7XG5pc0xpdmV8fEZhaWwgYEludml0YXRpb24gcGFzc2VkIHRvIHBhcmFtTWFuYWdlciBpcyBub3QgbGl2ZSAke2l9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGJ1aWxkSW52aXRhdGlvblBhcmFtPShuYW1lLGludml0YXRpb24pPT57XG5pZighem9lKXtcbnRocm93IEZhaWwgYHpvZSBtdXN0IGJlIHByb3ZpZGVkIGZvciBnb3Zlcm5lZCBJbnZpdGF0aW9ucyAke3pvZX1gO1xuIH1cbmxldCBjdXJyZW50SW52aXRhdGlvbjtcbmxldCBjdXJyZW50QW1vdW50O1xuXG4vKlxuXG4gICAgICovXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IHByZXBhcmVUb1NldEludml0YXRpb249YXN5bmMoaW52aXRlKT0+e1xuY29uc3RbcHJlcGFyZWRBbW91bnRdPWF3YWl0IFByb21pc2UuYWxsKFtcbkUoRSh6b2UpLmdldEludml0YXRpb25Jc3N1ZXIoKSkuZ2V0QW1vdW50T2YoaW52aXRlKSxcbmFzc2VydEludml0YXRpb24oaW52aXRlKV0pO1xuXG5cbnJldHVybltpbnZpdGUscHJlcGFyZWRBbW91bnRdO1xuIH07XG5cbi8qXG5cblxuXG4gICAgICovXG5jb25zdCBzZXRJbnZpdGF0aW9uPShbbmV3SW52aXRhdGlvbixhbW91bnRdKT0+e1xuY3VycmVudEFtb3VudD1hbW91bnQ7XG5jdXJyZW50SW52aXRhdGlvbj1uZXdJbnZpdGF0aW9uO1xucmV0dXJuIGhhcmRlbih7W25hbWVdOmN1cnJlbnRBbW91bnR9KTtcbiB9O1xuXG5jb25zdCBtYWtlRGVzY3JpcHRpb249KCk9PntcbnJldHVybnt0eXBlOlBhcmFtVHlwZXMuSU5WSVRBVElPTix2YWx1ZTpjdXJyZW50QW1vdW50fTtcbiB9O1xuXG5jb25zdCBnZXRWaXNpYmxlVmFsdWU9YXN5bmMoYWxsZWdlZEludml0YXRpb24pPT5cbkUoRSh6b2UpLmdldEludml0YXRpb25Jc3N1ZXIoKSkuZ2V0QW1vdW50T2YoYWxsZWdlZEludml0YXRpb24pO1xuXG5jb25zdCBwdWJsaWNNZXRob2RzPUZhciggYFBhcmFtZXRlciAke25hbWV9YCx7XG5nZXRWYWx1ZTooKT0+Y3VycmVudEFtb3VudCxcbmdldEludGVybmFsVmFsdWU6KCk9PmN1cnJlbnRJbnZpdGF0aW9uLFxuYXNzZXJ0VHlwZTphc3NlcnRJbnZpdGF0aW9uLFxubWFrZURlc2NyaXB0aW9uLFxuZ2V0VHlwZTooKT0+UGFyYW1UeXBlcy5JTlZJVEFUSU9OLFxuZ2V0VmlzaWJsZVZhbHVlfSk7XG5cblxuLy9cbmdldHRlcnNbIGBnZXQke25hbWV9YF09KCk9PmdldFR5cGVkUGFyYW0oUGFyYW1UeXBlcy5JTlZJVEFUSU9OLG5hbWUpO1xuLy9cbi8vXG4vL1xuLy9cbnNldHRlcnNbIGBwcmVwYXJlVG9VcGRhdGUke25hbWV9YF09cHJlcGFyZVRvU2V0SW52aXRhdGlvbjtcbnNldHRlcnNbIGB1cGRhdGUke25hbWV9YF09c2V0SW52aXRhdGlvbjtcblxuLy9cbi8vXG5jb25zdCBmaW5pc2hJbnZpdGF0aW9uUGFyYW09RS53aGVuKFxucHJlcGFyZVRvU2V0SW52aXRhdGlvbihpbnZpdGF0aW9uKSxcbihpbnZpdGF0aW9uQW5kQW1vdW50KT0+e1xuc2V0SW52aXRhdGlvbihpbnZpdGF0aW9uQW5kQW1vdW50KTtcbi8vXG5uYW1lc1RvUGFyYW1zLmluaXQobmFtZSxwdWJsaWNNZXRob2RzKTtcbiB9KTtcblxudW5maW5pc2hlZFBhcmFtcy5wdXNoKGZpbmlzaEludml0YXRpb25QYXJhbSk7XG5cbnJldHVybiBuYW1lO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhZGRJbnZpdGF0aW9uPShuYW1lLHZhbHVlLGJ1aWxkZXIpPT57XG5hc3NlcnRLZXl3b3JkTmFtZShuYW1lKTtcbnZhbHVlIT09bnVsbHx8RmFpbCBgcGFyYW0gJHtxKG5hbWUpfSBtdXN0IGJlIGRlZmluZWRgO1xuXG5idWlsZEludml0YXRpb25QYXJhbShuYW1lLHZhbHVlKTtcblxucmV0dXJuIGJ1aWxkZXI7XG4gfTtcblxuLy9cblxuY29uc3QgZ2V0VHlwZWRQYXJhbT0odHlwZSxuYW1lKT0+e1xuY29uc3QgcGFyYW09bmFtZXNUb1BhcmFtcy5nZXQobmFtZSk7XG50eXBlPT09cGFyYW0uZ2V0VHlwZSgpfHxGYWlsIGAke25hbWV9IGlzIG5vdCAke3R5cGV9YDtcbnJldHVybiBwYXJhbS5nZXRWYWx1ZSgpO1xuIH07XG5cbmNvbnN0IGdldFZpc2libGVWYWx1ZT0obmFtZSxwcm9wb3NlZCk9PntcbmNvbnN0IHBhcmFtPW5hbWVzVG9QYXJhbXMuZ2V0KG5hbWUpO1xucmV0dXJuIHBhcmFtLmdldFZpc2libGVWYWx1ZShwcm9wb3NlZCk7XG4gfTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldEludGVybmFsUGFyYW1WYWx1ZT1hc3luYyhuYW1lKT0+e1xuYXdhaXQgZmluaXNoQnVpbGRpbmcoKTtcbnJldHVybiBuYW1lc1RvUGFyYW1zLmdldChuYW1lKS5nZXRJbnRlcm5hbFZhbHVlKCk7XG4gfTtcblxuY29uc3QgZ2V0UGFyYW1zPWFzeW5jKCk9PntcbmF3YWl0IGZpbmlzaEJ1aWxkaW5nKCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZXNjcmlwdGlvbnM9e307XG5mb3IoY29uc3RbbmFtZSxwYXJhbV1vZiBuYW1lc1RvUGFyYW1zLmVudHJpZXMoKSl7XG5kZXNjcmlwdGlvbnNbbmFtZV09cGFyYW0ubWFrZURlc2NyaXB0aW9uKCk7XG4gfVxucmV0dXJuIGhhcmRlbihkZXNjcmlwdGlvbnMpO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdXBkYXRlUGFyYW1zPWFzeW5jKHBhcmFtQ2hhbmdlcyk9PntcbmF3YWl0IGZpbmlzaEJ1aWxkaW5nKCk7XG5jb25zdCBwYXJhbU5hbWVzPU9iamVjdC5rZXlzKHBhcmFtQ2hhbmdlcyk7XG5cbi8vXG5jb25zdCBhc3luY1Jlc3VsdHM9cGFyYW1OYW1lcy5tYXAoKG5hbWUpPT5cbnNldHRlcnNbIGBwcmVwYXJlVG9VcGRhdGUke25hbWV9YF0ocGFyYW1DaGFuZ2VzW25hbWVdKSk7XG5cbi8vXG5jb25zdCBwcmVwYXJlZD1hd2FpdCBQcm9taXNlLmFsbChhc3luY1Jlc3VsdHMpO1xuXG4vL1xuZm9yKGNvbnN0W2ksbmFtZV1vZiBwYXJhbU5hbWVzLmVudHJpZXMoKSl7XG5jb25zdCBzZXRGbj1zZXR0ZXJzWyBgdXBkYXRlJHtuYW1lfWBdO1xuc2V0Rm4ocHJlcGFyZWRbaV0pO1xuIH1cbnB1Ymxpc2goKTtcbiB9O1xuXG4vL1xuY29uc3QgYnVpbGQ9KCk9Pntcbi8vXG4vL1xudm9pZCBFLndoZW4oZmluaXNoQnVpbGRpbmcoKSwoKT0+cHVibGlzaCgpKTtcblxuLy9cbi8vXG4vL1xucmV0dXJuIEZhcigncGFyYW0gbWFuYWdlcicse1xuZ2V0UGFyYW1zLFxuZ2V0U3Vic2NyaXB0aW9uOigpPT5zdWJzY3JpYmVyLFxuZ2V0QW1vdW50OihuYW1lKT0+Z2V0VHlwZWRQYXJhbShQYXJhbVR5cGVzLkFNT1VOVCxuYW1lKSxcbmdldEJyYW5kOihuYW1lKT0+Z2V0VHlwZWRQYXJhbShQYXJhbVR5cGVzLkJSQU5ELG5hbWUpLFxuZ2V0SW5zdGFuY2U6KG5hbWUpPT5nZXRUeXBlZFBhcmFtKFBhcmFtVHlwZXMuSU5TVEFOQ0UsbmFtZSksXG5nZXRJbnN0YWxsYXRpb246KG5hbWUpPT5nZXRUeXBlZFBhcmFtKFBhcmFtVHlwZXMuSU5TVEFMTEFUSU9OLG5hbWUpLFxuZ2V0SW52aXRhdGlvbkFtb3VudDoobmFtZSk9PmdldFR5cGVkUGFyYW0oUGFyYW1UeXBlcy5JTlZJVEFUSU9OLG5hbWUpLFxuZ2V0TmF0OihuYW1lKT0+Z2V0VHlwZWRQYXJhbShQYXJhbVR5cGVzLk5BVCxuYW1lKSxcbmdldFJhdGlvOihuYW1lKT0+Z2V0VHlwZWRQYXJhbShQYXJhbVR5cGVzLlJBVElPLG5hbWUpLFxuZ2V0UmVjb3JkOihuYW1lKT0+Z2V0VHlwZWRQYXJhbShQYXJhbVR5cGVzLlBBU1NBQkxFX1JFQ09SRCxuYW1lKSxcbmdldFN0cmluZzoobmFtZSk9PmdldFR5cGVkUGFyYW0oUGFyYW1UeXBlcy5TVFJJTkcsbmFtZSksXG5nZXRUaW1lc3RhbXA6KG5hbWUpPT5nZXRUeXBlZFBhcmFtKFBhcmFtVHlwZXMuVElNRVNUQU1QLG5hbWUpLFxuZ2V0UmVsYXRpdmVUaW1lOihuYW1lKT0+Z2V0VHlwZWRQYXJhbShQYXJhbVR5cGVzLlJFTEFUSVZFX1RJTUUsbmFtZSksXG5nZXRVbmtub3duOihuYW1lKT0+Z2V0VHlwZWRQYXJhbShQYXJhbVR5cGVzLlVOS05PV04sbmFtZSksXG5nZXRWaXNpYmxlVmFsdWUsXG5nZXRJbnRlcm5hbFBhcmFtVmFsdWUsXG4vL1xuLi4uZ2V0dGVycyxcbnVwZGF0ZVBhcmFtcyxcbi8vXG5yZWFkb25seTooKT0+aGFyZGVuKGdldHRlcnMpfSk7XG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBidWlsZGVyPXtcbmFkZEFtb3VudDoobix2KT0+YWRkQW1vdW50KG4sdixidWlsZGVyKSxcbmFkZEJyYW5kOihuLHYpPT5hZGRCcmFuZChuLHYsYnVpbGRlciksXG5hZGRJbnN0YWxsYXRpb246KG4sdik9PmFkZEluc3RhbGxhdGlvbihuLHYsYnVpbGRlciksXG5hZGRJbnN0YW5jZToobix2KT0+YWRkSW5zdGFuY2Uobix2LGJ1aWxkZXIpLFxuYWRkVW5rbm93bjoobix2KT0+YWRkVW5rbm93bihuLHYsYnVpbGRlciksXG5hZGRJbnZpdGF0aW9uOihuLHYpPT5hZGRJbnZpdGF0aW9uKG4sdixidWlsZGVyKSxcbmFkZE5hdDoobix2KT0+YWRkTmF0KG4sdixidWlsZGVyKSxcbmFkZFJhdGlvOihuLHYpPT5hZGRSYXRpbyhuLHYsYnVpbGRlciksXG5hZGRSZWNvcmQ6KG4sdik9PmFkZFJlY29yZChuLHYsYnVpbGRlciksXG5hZGRTdHJpbmc6KG4sdik9PmFkZFN0cmluZyhuLHYsYnVpbGRlciksXG5hZGRSZWxhdGl2ZVRpbWU6KG4sdik9PmFkZFJlbGF0aXZlVGltZShuLHYsYnVpbGRlciksXG5hZGRUaW1lc3RhbXA6KG4sdik9PmFkZFRpbWVzdGFtcChuLHYsYnVpbGRlciksXG5idWlsZH07XG5cbnJldHVybiBidWlsZGVyO1xuIH07JGjNj19vbmNlLm1ha2VQYXJhbU1hbmFnZXJCdWlsZGVyKG1ha2VQYXJhbU1hbmFnZXJCdWlsZGVyKTtcblxuaGFyZGVuKGFzc2VydEVsZWN0b3JhdGVNYXRjaGVzKTtcbmhhcmRlbihtYWtlUGFyYW1NYW5hZ2VyQnVpbGRlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3NlcnRFbGVjdG9yYXRlTWF0Y2hlcyI6WyJhc3NlcnRFbGVjdG9yYXRlTWF0Y2hlcyJdLCJtYWtlUGFyYW1NYW5hZ2VyQnVpbGRlciI6WyJtYWtlUGFyYW1NYW5hZ2VyQnVpbGRlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAIf3bP1Q0AANUNAABcAAAAQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdEdvdmVybmFuY2UvdHlwZWRQYXJhbU1hbmFnZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL2Vycm9ycyIsIi4uL2NvbnN0YW50cy5qcyIsIi4vZ292ZXJuUGFyYW0uanMiLCIuL3BhcmFtTWFuYWdlci5qcyJdLCJleHBvcnRzIjpbIm1ha2VQYXJhbU1hbmFnZXIiLCJtYWtlUGFyYW1NYW5hZ2VyRnJvbVRlcm1zIiwibWFrZVBhcmFtTWFuYWdlclN5bmMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxGYWlsLHEsUGFyYW1UeXBlcyxDT05UUkFDVF9FTEVDVE9SQVRFLG1ha2VQYXJhbU1hbmFnZXJCdWlsZGVyOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi4vY29uc3RhbnRzLmpzXCIsIFtbXCJQYXJhbVR5cGVzXCIsIFskaM2PX2EgPT4gKFBhcmFtVHlwZXMgPSAkaM2PX2EpXV1dXSxbXCIuL2dvdmVyblBhcmFtLmpzXCIsIFtbXCJDT05UUkFDVF9FTEVDVE9SQVRFXCIsIFskaM2PX2EgPT4gKENPTlRSQUNUX0VMRUNUT1JBVEUgPSAkaM2PX2EpXV1dXSxbXCIuL3BhcmFtTWFuYWdlci5qc1wiLCBbW1wibWFrZVBhcmFtTWFuYWdlckJ1aWxkZXJcIiwgWyRozY9fYSA9PiAobWFrZVBhcmFtTWFuYWdlckJ1aWxkZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cbiAqL1xuLypcblxuXG4gKi9cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuICovXG5jb25zdCBidWlsZGVyTWV0aG9kTmFtZT0odHlwZSk9PlxuIGBhZGQke3R5cGVbMF0udG9VcHBlckNhc2UoKSt0eXBlLnN1YnN0cmluZygxKX1gO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNBc3luYz17XG5pbnZpdGF0aW9uOnRydWV9O1xuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGFyYW1NYW5hZ2VyPShwdWJsaXNoZXJLaXQsc3BlYyx6Y2YpPT57XG5jb25zdCBidWlsZGVyPW1ha2VQYXJhbU1hbmFnZXJCdWlsZGVyKHB1Ymxpc2hlcktpdCx6Y2YuZ2V0Wm9lU2VydmljZSgpKTtcblxuY29uc3QgcHJvbWlzZXM9W107XG5mb3IoY29uc3RbbmFtZSxbdHlwZSx2YWx1ZV1db2YgT2JqZWN0LmVudHJpZXMoc3BlYykpe1xuY29uc3QgYWRkPWJ1aWxkZXJbYnVpbGRlck1ldGhvZE5hbWUodHlwZSldO1xuaWYoaXNBc3luY1t0eXBlXSl7XG5wcm9taXNlcy5wdXNoKGFkZChuYW1lLHZhbHVlKSk7XG4gfWVsc2V7XG5hZGQobmFtZSx2YWx1ZSk7XG4gfVxuIH1cbi8vXG4vL1xuLy9cbnZvaWQgRS53aGVuKFByb21pc2UuYWxsKHByb21pc2VzKSx1bmRlZmluZWQsKHJlYXNvbik9PlxuemNmLnNodXRkb3duV2l0aEZhaWx1cmUocmVhc29uKSk7XG5cblxuLy9cbnJldHVybiBidWlsZGVyLmJ1aWxkKCk7XG4gfTskaM2PX29uY2UubWFrZVBhcmFtTWFuYWdlcihtYWtlUGFyYW1NYW5hZ2VyKTtcbmhhcmRlbihtYWtlUGFyYW1NYW5hZ2VyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGFyYW1NYW5hZ2VyU3luYz0ocHVibGlzaGVyS2l0LHNwZWMpPT57XG5jb25zdCBidWlsZGVyPW1ha2VQYXJhbU1hbmFnZXJCdWlsZGVyKHB1Ymxpc2hlcktpdCk7XG5cbmZvcihjb25zdFtuYW1lLFt0eXBlLHZhbHVlXV1vZiBPYmplY3QuZW50cmllcyhzcGVjKSl7XG5jb25zdCBhZGQ9YnVpbGRlcltidWlsZGVyTWV0aG9kTmFtZSh0eXBlKV07XG5hZGR8fEZhaWwgYE5vIGJ1aWxkZXIgbWV0aG9kIGZvciBwYXJhbSB0eXBlICR7cSh0eXBlKX1gO1xuYWRkKG5hbWUsdmFsdWUpO1xuIH1cblxuLy9cbnJldHVybiBidWlsZGVyLmJ1aWxkKCk7XG4gfTskaM2PX29uY2UubWFrZVBhcmFtTWFuYWdlclN5bmMobWFrZVBhcmFtTWFuYWdlclN5bmMpO1xuaGFyZGVuKG1ha2VQYXJhbU1hbmFnZXJTeW5jKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGFyYW1NYW5hZ2VyRnJvbVRlcm1zPShcbnB1Ymxpc2hlcktpdCxcbnpjZixcbmludml0YXRpb25zLFxucGFyYW1UeXBlc01hcCxcbm92ZXJyaWRlcyk9Plxue1xuaWYob3ZlcnJpZGVzKXtcbmNvbnNvbGUubG9nKCdUUE0gJyx7b3ZlcnJpZGVzfSk7XG4gfVxuXG5jb25zdHtnb3Zlcm5lZFBhcmFtc309emNmLmdldFRlcm1zKCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFrZXJTcGVjRW50cmllcz1PYmplY3QuZW50cmllcyhwYXJhbVR5cGVzTWFwKS5tYXAoXG4oW3BhcmFtS2V5LHBhcmFtVHlwZV0pPT57XG5jb25zdCB2YWx1ZT1cbm92ZXJyaWRlcyYmb3ZlcnJpZGVzW3BhcmFtS2V5XT9cbm92ZXJyaWRlc1twYXJhbUtleV06XG5nb3Zlcm5lZFBhcmFtc1twYXJhbUtleV0udmFsdWU7XG5cbnJldHVybltwYXJhbUtleSwvKiAgICAgICAgICAgICAgICAgICAgICAgICovW3BhcmFtVHlwZSx2YWx1ZV1dO1xuIH0pO1xuXG4vL1xuZm9yKGNvbnN0W25hbWUsaW52aXRhdGlvbl1vZiBPYmplY3QuZW50cmllcyhpbnZpdGF0aW9ucykpe1xubWFrZXJTcGVjRW50cmllcy5wdXNoKFtuYW1lLFtQYXJhbVR5cGVzLklOVklUQVRJT04saW52aXRhdGlvbl1dKTtcbiB9XG5jb25zdCBtYWtlclNwZWM9T2JqZWN0LmZyb21FbnRyaWVzKG1ha2VyU3BlY0VudHJpZXMpO1xubWFrZXJTcGVjW0NPTlRSQUNUX0VMRUNUT1JBVEVdfHxcbkZhaWwgYG1pc3NpbmcgRWxlY3RvcmF0ZSBpbnZpdGF0aW9uIHBhcmFtIHZhbHVlYDtcblxuLy9cbnJldHVybiBtYWtlUGFyYW1NYW5hZ2VyKHB1Ymxpc2hlcktpdCxtYWtlclNwZWMsemNmKTtcbiB9OyRozY9fb25jZS5tYWtlUGFyYW1NYW5hZ2VyRnJvbVRlcm1zKG1ha2VQYXJhbU1hbmFnZXJGcm9tVGVybXMpO1xuaGFyZGVuKG1ha2VQYXJhbU1hbmFnZXJGcm9tVGVybXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVBhcmFtTWFuYWdlciI6WyJtYWtlUGFyYW1NYW5hZ2VyIl0sIm1ha2VQYXJhbU1hbmFnZXJTeW5jIjpbIm1ha2VQYXJhbU1hbmFnZXJTeW5jIl0sIm1ha2VQYXJhbU1hbmFnZXJGcm9tVGVybXMiOlsibWFrZVBhcmFtTWFuYWdlckZyb21UZXJtcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAKU9VmyhEAAMoRAABIAAAAQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdEdvdmVybm9yLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvZHVyYWJpbGl0eS5qcyIsIi4vY29udHJhY3RHb3Zlcm5hbmNlL2dvdmVyblBhcmFtLmpzIiwiLi9jb250cmFjdEdvdmVybm9yS2l0LmpzIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsibWV0YSIsInN0YXJ0IiwidmFsaWRhdGVRdWVzdGlvbkRldGFpbHMiLCJ2YWxpZGF0ZVF1ZXN0aW9uRnJvbUNvdW50ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxFLG11c3RNYXRjaCxtYWtlVHJhY2VyLHByb3ZpZGVTaW5nbGV0b24sQ09OVFJBQ1RfRUxFQ1RPUkFURSxwcmVwYXJlQ29udHJhY3RHb3Zlcm5vcktpdCxQYXJhbUNoYW5nZXNRdWVzdGlvbkRldGFpbHNTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcIm1ha2VUcmFjZXJcIiwgWyRozY9fYSA9PiAobWFrZVRyYWNlciA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvZHVyYWJpbGl0eS5qc1wiLCBbW1wicHJvdmlkZVNpbmdsZXRvblwiLCBbJGjNj19hID0+IChwcm92aWRlU2luZ2xldG9uID0gJGjNj19hKV1dXV0sW1wiLi9jb250cmFjdEdvdmVybmFuY2UvZ292ZXJuUGFyYW0uanNcIiwgW1tcIkNPTlRSQUNUX0VMRUNUT1JBVEVcIiwgWyRozY9fYSA9PiAoQ09OVFJBQ1RfRUxFQ1RPUkFURSA9ICRozY9fYSldXV1dLFtcIi4vY29udHJhY3RHb3Zlcm5vcktpdC5qc1wiLCBbW1wicHJlcGFyZUNvbnRyYWN0R292ZXJub3JLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUNvbnRyYWN0R292ZXJub3JLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW1tcIlBhcmFtQ2hhbmdlc1F1ZXN0aW9uRGV0YWlsc1NoYXBlXCIsIFskaM2PX2EgPT4gKFBhcmFtQ2hhbmdlc1F1ZXN0aW9uRGV0YWlsc1NoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdCB0cmFjZT1tYWtlVHJhY2VyKCdDR292JyxmYWxzZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWV0YT17XG51cGdyYWRhYmlsaXR5OidjYW5VcGdyYWRlJ307JGjNj19vbmNlLm1ldGEobWV0YSk7XG5cbmhhcmRlbihtZXRhKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdmFsaWRhdGVRdWVzdGlvbkRldGFpbHM9YXN5bmMoem9lLGVsZWN0b3JhdGUsZGV0YWlscyk9PntcbmNvbnN0e1xuY291bnRlckluc3RhbmNlLFxuaXNzdWU6e2NvbnRyYWN0OmdvdmVybmVkSW5zdGFuY2V9fT1cbmRldGFpbHM7XG5tdXN0TWF0Y2goZGV0YWlscyxQYXJhbUNoYW5nZXNRdWVzdGlvbkRldGFpbHNTaGFwZSk7XG5cbmNvbnN0IGdvdmVybm9ySW5zdGFuY2U9YXdhaXQgRS5nZXQoRSh6b2UpLmdldFRlcm1zKGdvdmVybmVkSW5zdGFuY2UpKS5cbmVsZWN0aW9uTWFuYWdlcjtcbmNvbnN0IGdvdmVybm9yUHVibGljPUUoem9lKS5nZXRQdWJsaWNGYWNldChnb3Zlcm5vckluc3RhbmNlKTtcblxucmV0dXJuIFByb21pc2UuYWxsKFtcbkUoZ292ZXJub3JQdWJsaWMpLnZhbGlkYXRlVm90ZUNvdW50ZXIoY291bnRlckluc3RhbmNlKSxcbkUoZ292ZXJub3JQdWJsaWMpLnZhbGlkYXRlRWxlY3RvcmF0ZShlbGVjdG9yYXRlKSxcbkUoZ292ZXJub3JQdWJsaWMpLnZhbGlkYXRlVGltZXIoZGV0YWlscy5jbG9zaW5nUnVsZSldKTtcblxuIH07JGjNj19vbmNlLnZhbGlkYXRlUXVlc3Rpb25EZXRhaWxzKHZhbGlkYXRlUXVlc3Rpb25EZXRhaWxzKTtcbmhhcmRlbih2YWxpZGF0ZVF1ZXN0aW9uRGV0YWlscyk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHZhbGlkYXRlUXVlc3Rpb25Gcm9tQ291bnRlcj1hc3luYyhcbnpvZSxcbmVsZWN0b3JhdGUsXG52b3RlQ291bnRlcik9Plxue1xuY29uc3QgY291bnRlclB1YmxpY1A9RSh6b2UpLmdldFB1YmxpY0ZhY2V0KHZvdGVDb3VudGVyKTtcbmNvbnN0IHF1ZXN0aW9uRGV0YWlscz1hd2FpdCBFKGNvdW50ZXJQdWJsaWNQKS5nZXREZXRhaWxzKCk7XG5cbnJldHVybiB2YWxpZGF0ZVF1ZXN0aW9uRGV0YWlscyh6b2UsZWxlY3RvcmF0ZSxxdWVzdGlvbkRldGFpbHMpO1xuIH07JGjNj19vbmNlLnZhbGlkYXRlUXVlc3Rpb25Gcm9tQ291bnRlcih2YWxpZGF0ZVF1ZXN0aW9uRnJvbUNvdW50ZXIpO1xuaGFyZGVuKHZhbGlkYXRlUXVlc3Rpb25Gcm9tQ291bnRlcik7XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdGFydD1hc3luYyh6Y2YscHJpdmF0ZUFyZ3MsYmFnZ2FnZSk9PntcbnRyYWNlKCdzdGFydCcpO1xuY29uc3Qgem9lPXpjZi5nZXRab2VTZXJ2aWNlKCk7XG50cmFjZSgnZ2V0VGVybXMnLHpjZi5nZXRUZXJtcygpKTtcbmNvbnN0e1xudGltZXIsXG5nb3Zlcm5lZENvbnRyYWN0SW5zdGFsbGF0aW9uLFxuZ292ZXJuZWQ6e1xuaXNzdWVyS2V5d29yZFJlY29yZDpnb3Zlcm5lZElzc3VlcktleXdvcmRSZWNvcmQsXG50ZXJtczpjb250cmFjdFRlcm1zLFxubGFiZWw6Z292ZXJuZWRDb250cmFjdExhYmVsfX09XG5cbnpjZi5nZXRUZXJtcygpO1xudHJhY2UoJ2NvbnRyYWN0VGVybXMnLGNvbnRyYWN0VGVybXMpO1xuY29udHJhY3RUZXJtcy5nb3Zlcm5lZFBhcmFtc1tDT05UUkFDVF9FTEVDVE9SQVRFXXx8XG5GYWlsIGBDb250cmFjdCBtdXN0IGRlY2xhcmUgJHtDT05UUkFDVF9FTEVDVE9SQVRFfSBhcyBhIGdvdmVybmVkIHBhcmFtZXRlcmA7XG5cbmNvbnN0IG1ha2VDb250cmFjdEdvdmVybm9yS2l0PXByZXBhcmVDb250cmFjdEdvdmVybm9yS2l0KGJhZ2dhZ2Use1xudGltZXIsXG56b2V9KTtcblxuXG50cmFjZSgnYXdhaXRpbmcgcHJvdmlkZVNpbmdsZXRvbigpJyk7XG5jb25zdCBnb3Zlcm5vcktpdD1hd2FpdCBwcm92aWRlU2luZ2xldG9uKFxuYmFnZ2FnZSxcbidjb250cmFjdEdvdmVybm9yS2l0JyxcbmFzeW5jKCk9PntcbmNvbnN0IGF1Z21lbnRlZFRlcm1zPWhhcmRlbih7XG4uLi5jb250cmFjdFRlcm1zLFxuZWxlY3Rpb25NYW5hZ2VyOnpjZi5nZXRJbnN0YW5jZSgpfSk7XG5cblxudHJhY2UoJ3N0YXJ0aW5nIGdvdmVybmVkQ29udHJhY3RJbnN0YWxsYXRpb24gb2YnLGdvdmVybmVkQ29udHJhY3RMYWJlbCk7XG5jb25zdCBzdGFydGVkSW5zdGFuY2VLaXQ9YXdhaXQgRSh6b2UpLnN0YXJ0SW5zdGFuY2UoXG5nb3Zlcm5lZENvbnRyYWN0SW5zdGFsbGF0aW9uLFxuZ292ZXJuZWRJc3N1ZXJLZXl3b3JkUmVjb3JkLFxuXG4vL1xuYXVnbWVudGVkVGVybXMsXG5wcml2YXRlQXJncy5nb3Zlcm5lZCxcbmdvdmVybmVkQ29udHJhY3RMYWJlbCk7XG5cbnRyYWNlKCdhd2FpdGluZyByZW1vdGUgbGltaXRlZENyZWF0b3JGYWNldCcpO1xuY29uc3QgbGltaXRlZENyZWF0b3JGYWNldD1hd2FpdCBFKFxuc3RhcnRlZEluc3RhbmNlS2l0LmNyZWF0b3JGYWNldCkuXG5nZXRMaW1pdGVkQ3JlYXRvckZhY2V0KCk7XG5cbnJldHVybiBtYWtlQ29udHJhY3RHb3Zlcm5vcktpdChzdGFydGVkSW5zdGFuY2VLaXQsbGltaXRlZENyZWF0b3JGYWNldCk7XG4gfSk7XG5cblxuLy9cbi8vXG4vL1xuXG50cmFjZSgnc3RhcnQgY29tcGxldGUnKTtcblxuLy9cbnJldHVybntjcmVhdG9yRmFjZXQ6Z292ZXJub3JLaXQuY3JlYXRvcixwdWJsaWNGYWNldDpnb3Zlcm5vcktpdC5wdWJsaWN9O1xuIH07JGjNj19vbmNlLnN0YXJ0KHN0YXJ0KTtcbmhhcmRlbihzdGFydCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtZXRhIjpbIm1ldGEiXSwidmFsaWRhdGVRdWVzdGlvbkRldGFpbHMiOlsidmFsaWRhdGVRdWVzdGlvbkRldGFpbHMiXSwidmFsaWRhdGVRdWVzdGlvbkZyb21Db3VudGVyIjpbInZhbGlkYXRlUXVlc3Rpb25Gcm9tQ291bnRlciJdLCJzdGFydCI6WyJzdGFydCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACtM8wg2SEAANkhAABLAAAAQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdEdvdmVybm9yS2l0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvem9lL3NyYy90eXBlR3VhcmRzLmpzIiwiQGFnb3JpYy90aW1lIiwiLi9jb250cmFjdEdvdmVybmFuY2UvZ292ZXJuQXBpLmpzIiwiLi9jb250cmFjdEdvdmVybmFuY2UvZ292ZXJuRmlsdGVyLmpzIiwiLi9jb250cmFjdEdvdmVybmFuY2UvZ292ZXJuUGFyYW0uanMiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlQ29udHJhY3RHb3Zlcm5vcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLFVuZ3VhcmRlZEhlbHBlckksbWFrZVRyYWNlcixNLHByZXBhcmVFeG9DbGFzc0tpdCxFLEludml0YXRpb25TaGFwZSxJbnN0YW5jZUhhbmRsZVNoYXBlLEluc3RhbGxhdGlvblNoYXBlLFRpbWVzdGFtcFNoYXBlLHNldHVwQXBpR292ZXJuYW5jZSxzZXR1cEZpbHRlckdvdmVybmFuY2UsQ09OVFJBQ1RfRUxFQ1RPUkFURSxzZXR1cFBhcmFtR292ZXJuYW5jZSxDbG9zaW5nUnVsZVNoYXBlLFBhcmFtQ2hhbmdlc1NwZWNTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wiVW5ndWFyZGVkSGVscGVySVwiLCBbJGjNj19hID0+IChVbmd1YXJkZWRIZWxwZXJJID0gJGjNj19hKV1dLFtcIm1ha2VUcmFjZXJcIiwgWyRozY9fYSA9PiAobWFrZVRyYWNlciA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy96b2Uvc3JjL3R5cGVHdWFyZHMuanNcIiwgW1tcIkludml0YXRpb25TaGFwZVwiLCBbJGjNj19hID0+IChJbnZpdGF0aW9uU2hhcGUgPSAkaM2PX2EpXV0sW1wiSW5zdGFuY2VIYW5kbGVTaGFwZVwiLCBbJGjNj19hID0+IChJbnN0YW5jZUhhbmRsZVNoYXBlID0gJGjNj19hKV1dLFtcIkluc3RhbGxhdGlvblNoYXBlXCIsIFskaM2PX2EgPT4gKEluc3RhbGxhdGlvblNoYXBlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy90aW1lXCIsIFtbXCJUaW1lc3RhbXBTaGFwZVwiLCBbJGjNj19hID0+IChUaW1lc3RhbXBTaGFwZSA9ICRozY9fYSldXV1dLFtcIi4vY29udHJhY3RHb3Zlcm5hbmNlL2dvdmVybkFwaS5qc1wiLCBbW1wic2V0dXBBcGlHb3Zlcm5hbmNlXCIsIFskaM2PX2EgPT4gKHNldHVwQXBpR292ZXJuYW5jZSA9ICRozY9fYSldXV1dLFtcIi4vY29udHJhY3RHb3Zlcm5hbmNlL2dvdmVybkZpbHRlci5qc1wiLCBbW1wic2V0dXBGaWx0ZXJHb3Zlcm5hbmNlXCIsIFskaM2PX2EgPT4gKHNldHVwRmlsdGVyR292ZXJuYW5jZSA9ICRozY9fYSldXV1dLFtcIi4vY29udHJhY3RHb3Zlcm5hbmNlL2dvdmVyblBhcmFtLmpzXCIsIFtbXCJDT05UUkFDVF9FTEVDVE9SQVRFXCIsIFskaM2PX2EgPT4gKENPTlRSQUNUX0VMRUNUT1JBVEUgPSAkaM2PX2EpXV0sW1wic2V0dXBQYXJhbUdvdmVybmFuY2VcIiwgWyRozY9fYSA9PiAoc2V0dXBQYXJhbUdvdmVybmFuY2UgPSAkaM2PX2EpXV1dXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW1tcIkNsb3NpbmdSdWxlU2hhcGVcIiwgWyRozY9fYSA9PiAoQ2xvc2luZ1J1bGVTaGFwZSA9ICRozY9fYSldXSxbXCJQYXJhbUNoYW5nZXNTcGVjU2hhcGVcIiwgWyRozY9fYSA9PiAoUGFyYW1DaGFuZ2VzU3BlY1NoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuY29uc3QgdHJhY2U9bWFrZVRyYWNlcignQ0dLJyxmYWxzZSk7XG5cbmNvbnN0IENvbnRyYWN0R292ZXJub3JLaXRJPXtcbmhlbHBlcjpVbmd1YXJkZWRIZWxwZXJJLFxuY3JlYXRvcjpNLmludGVyZmFjZSgnQ29udHJhY3QgR292ZXJub3IgS2l0IGNyZWF0b3InLHtcbnJlcGxhY2VFbGVjdG9yYXRlOk0uY2FsbChJbnZpdGF0aW9uU2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpLFxudm90ZU9uUGFyYW1DaGFuZ2VzOk0uY2FsbChcbkluc3RhbGxhdGlvblNoYXBlLFxuVGltZXN0YW1wU2hhcGUsXG5QYXJhbUNoYW5nZXNTcGVjU2hhcGUpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG52b3RlT25BcGlJbnZvY2F0aW9uOk0uY2FsbChcbk0uc3RyaW5nKCksXG5NLmFycmF5T2YoTS5hbnkoKSksXG5JbnN0YWxsYXRpb25TaGFwZSxcblRpbWVzdGFtcFNoYXBlKS5cbnJldHVybnMoTS5wcm9taXNlKCkpLFxudm90ZU9uT2ZmZXJGaWx0ZXI6TS5jYWxsKFxuSW5zdGFsbGF0aW9uU2hhcGUsXG5UaW1lc3RhbXBTaGFwZSxcbk0uYXJyYXlPZihNLnN0cmluZygpKSkuXG5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldENyZWF0b3JGYWNldDpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCdFbGVjdG9yYXRlQ3JlYXRvcicpKSxcbmdldEFkbWluRmFjZXQ6TS5jYWxsKCkucmV0dXJucyhNLnJlbW90YWJsZSgnRWxlY3RvcmF0ZUFkbWluJykpLFxuZ2V0SW5zdGFuY2U6TS5jYWxsKCkucmV0dXJucyhJbnN0YW5jZUhhbmRsZVNoYXBlKSxcbmdldFB1YmxpY0ZhY2V0Ok0uY2FsbCgpLnJldHVybnMoTS5yZW1vdGFibGUoJ0VsZWN0b3JhdGVQdWJsaWMnKSl9KSxcblxucHVibGljOk0uaW50ZXJmYWNlKCdDb250cmFjdCBHb3Zlcm5vciBLaXQgcHVibGljJyx7XG5nZXRFbGVjdG9yYXRlOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZ2V0R292ZXJuZWRDb250cmFjdDpNLmNhbGwoKS5yZXR1cm5zKEluc3RhbmNlSGFuZGxlU2hhcGUpLFxudmFsaWRhdGVWb3RlQ291bnRlcjpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhNLnByb21pc2UoKSksXG52YWxpZGF0ZUVsZWN0b3JhdGU6TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpLFxudmFsaWRhdGVUaW1lcjpNLmNhbGwoQ2xvc2luZ1J1bGVTaGFwZSkucmV0dXJucygpfSl9O1xuXG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVDb250cmFjdEdvdmVybm9yS2l0PShiYWdnYWdlLHBvd2Vycyk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBmaWx0ZXJHb3Zlcm5hbmNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcGFyYW1Hb3Zlcm5hbmNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGFwaUdvdmVybmFuY2U7XG5cbi8qICAgICAgICAgICAgICAqL1xubGV0IHBvc2VyRmFjZXQ7XG5cbmNvbnN0IG1ha2VDb250cmFjdEdvdmVybm9yS2l0PXByZXBhcmVFeG9DbGFzc0tpdChcbmJhZ2dhZ2UsXG4nQ29udHJhY3RHb3Zlcm5vcktpdCcsXG5Db250cmFjdEdvdmVybm9yS2l0SSxcbi8qXG5cblxuICAgICAqL1xuKHN0YXJ0ZWRJbnN0YW5jZUtpdCxsaW1pdGVkQ3JlYXRvckZhY2V0KT0+e1xucmV0dXJue1xuLi4uc3RhcnRlZEluc3RhbmNlS2l0LFxubGltaXRlZENyZWF0b3JGYWNldCxcbmN1cnJlbnRJbnZpdGF0aW9uOi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL251bGx9O1xuXG4gfSxcbntcbmhlbHBlcjp7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgZ2V0RWxlY3RvcmF0ZUluc3RhbmNlKCl7XG5jb25zdHtwdWJsaWNGYWNldH09dGhpcy5zdGF0ZTtcbmNvbnN0IGludml0YXRpb25BbW91bnQ9XG5hd2FpdCBFKHB1YmxpY0ZhY2V0KS5nZXRJbnZpdGF0aW9uQW1vdW50KENPTlRSQUNUX0VMRUNUT1JBVEUpO1xucmV0dXJuIGludml0YXRpb25BbW91bnQudmFsdWVbMF0uaW5zdGFuY2U7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIGdldFVwZGF0ZWRQb3NlckZhY2V0KCl7XG5jb25zdHtjcmVhdG9yRmFjZXR9PXRoaXMuc3RhdGU7XG5jb25zdCBuZXdJbnZpdGF0aW9uPWF3YWl0IEUoXG5FKEUoY3JlYXRvckZhY2V0KS5nZXRQYXJhbU1nclJldHJpZXZlcigpKS5nZXQoe1xua2V5Oidnb3Zlcm5lZFBhcmFtcyd9KSkuXG5cbmdldEludGVybmFsUGFyYW1WYWx1ZShDT05UUkFDVF9FTEVDVE9SQVRFKTtcblxuaWYobmV3SW52aXRhdGlvbiE9PXRoaXMuc3RhdGUuY3VycmVudEludml0YXRpb24pe1xucG9zZXJGYWNldD1FKEUocG93ZXJzLnpvZSkub2ZmZXIobmV3SW52aXRhdGlvbikpLmdldE9mZmVyUmVzdWx0KCk7XG50aGlzLnN0YXRlLmN1cnJlbnRJbnZpdGF0aW9uPW5ld0ludml0YXRpb247XG4gfVxucmV0dXJuIHBvc2VyRmFjZXQ7XG4gfSxcbiAgICAgIGFzeW5jIHByb3ZpZGVBcGlHb3Zlcm5hbmNlKCl7XG5jb25zdHt0aW1lcn09cG93ZXJzO1xuY29uc3R7Y3JlYXRvckZhY2V0fT10aGlzLnN0YXRlO1xuYXdhaXQgbnVsbDtcbmlmKCFhcGlHb3Zlcm5hbmNlKXtcbnRyYWNlKCdhd2FpdGluZyBnb3Zlcm5lZCBBUEkgZGVwZW5kZW5jaWVzJyk7XG5jb25zdFtnb3Zlcm5lZEFwaXMsZ292ZXJuZWROYW1lc109YXdhaXQgUHJvbWlzZS5hbGwoW1xuRShjcmVhdG9yRmFjZXQpLmdldEdvdmVybmVkQXBpcygpLFxuRShjcmVhdG9yRmFjZXQpLmdldEdvdmVybmVkQXBpTmFtZXMoKV0pO1xuXG50cmFjZSgnc2V0dXBBcGlHb3Zlcm5hbmNlJyk7XG5hcGlHb3Zlcm5hbmNlPWdvdmVybmVkTmFtZXMubGVuZ3RoP1xuLy9cbnNldHVwQXBpR292ZXJuYW5jZShnb3Zlcm5lZEFwaXMsZ292ZXJuZWROYW1lcyx0aW1lciwoKT0+XG50aGlzLmZhY2V0cy5oZWxwZXIuZ2V0VXBkYXRlZFBvc2VyRmFjZXQoKSk6XG5cbntcbi8vXG52b3RlT25BcGlJbnZvY2F0aW9uOigpPT57XG50aHJvdyBFcnJvcignYXBpIGdvdmVybmFuY2Ugbm90IGNvbmZpZ3VyZWQnKTtcbiB9LFxuY3JlYXRlZFF1ZXN0aW9uOigpPT5mYWxzZX07XG5cbiB9XG5yZXR1cm4gYXBpR292ZXJuYW5jZTtcbiB9LFxucHJvdmlkZUZpbHRlckdvdmVybmFuY2UoKXtcbmlmKCFmaWx0ZXJHb3Zlcm5hbmNlKXtcbmNvbnN0e3RpbWVyfT1wb3dlcnM7XG5jb25zdHtjcmVhdG9yRmFjZXR9PXRoaXMuc3RhdGU7XG5maWx0ZXJHb3Zlcm5hbmNlPXNldHVwRmlsdGVyR292ZXJuYW5jZShcbnRpbWVyLFxuKCk9PnRoaXMuZmFjZXRzLmhlbHBlci5nZXRVcGRhdGVkUG9zZXJGYWNldCgpLFxuY3JlYXRvckZhY2V0KTtcblxuIH1cbnJldHVybiBmaWx0ZXJHb3Zlcm5hbmNlO1xuIH0sXG5wcm92aWRlUGFyYW1Hb3Zlcm5hbmNlKCl7XG5pZighcGFyYW1Hb3Zlcm5hbmNlKXtcbmNvbnN0e3RpbWVyfT1wb3dlcnM7XG5jb25zdHtjcmVhdG9yRmFjZXQsaW5zdGFuY2V9PXRoaXMuc3RhdGU7XG5wYXJhbUdvdmVybmFuY2U9c2V0dXBQYXJhbUdvdmVybmFuY2UoXG4oKT0+RShjcmVhdG9yRmFjZXQpLmdldFBhcmFtTWdyUmV0cmlldmVyKCksXG5pbnN0YW5jZSxcbnRpbWVyLFxuKCk9PnRoaXMuZmFjZXRzLmhlbHBlci5nZXRVcGRhdGVkUG9zZXJGYWNldCgpKTtcblxuIH1cbnJldHVybiBwYXJhbUdvdmVybmFuY2U7XG4gfX0sXG5cbmNyZWF0b3I6e1xuLypcblxuXG4gICAgICAgICAqL1xucmVwbGFjZUVsZWN0b3JhdGUocG9zZXJJbnZpdGF0aW9uKXtcbmNvbnN0e2NyZWF0b3JGYWNldH09dGhpcy5zdGF0ZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vL1xuY29uc3QgcGFyYW1NZ3I9RShFKGNyZWF0b3JGYWNldCkuZ2V0UGFyYW1NZ3JSZXRyaWV2ZXIoKSkuZ2V0KHtcbmtleTonZ292ZXJuZWRQYXJhbXMnfSk7XG5cblxuLy9cbnJldHVybiBFKHBhcmFtTWdyKS51cGRhdGVQYXJhbXMoe1xuRWxlY3RvcmF0ZTpwb3Nlckludml0YXRpb259KTtcblxuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnZvdGVPblBhcmFtQ2hhbmdlcyh2b3RlQ291bnRlckluc3RhbGxhdGlvbixkZWFkbGluZSxwYXJhbVNwZWMpe1xuY29uc3R7aGVscGVyfT10aGlzLmZhY2V0cztcbnJldHVybiBoZWxwZXIuXG5wcm92aWRlUGFyYW1Hb3Zlcm5hbmNlKCkuXG52b3RlT25QYXJhbUNoYW5nZXModm90ZUNvdW50ZXJJbnN0YWxsYXRpb24sZGVhZGxpbmUscGFyYW1TcGVjKTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xudm90ZU9uQXBpSW52b2NhdGlvbihcbmFwaU1ldGhvZE5hbWUsXG5tZXRob2RBcmdzLFxudm90ZUNvdW50ZXJJbnN0YWxsYXRpb24sXG5kZWFkbGluZSlcbntcbmNvbnN0e2hlbHBlcn09dGhpcy5mYWNldHM7XG5yZXR1cm4gRShoZWxwZXIucHJvdmlkZUFwaUdvdmVybmFuY2UoKSkudm90ZU9uQXBpSW52b2NhdGlvbihcbmFwaU1ldGhvZE5hbWUsXG5tZXRob2RBcmdzLFxudm90ZUNvdW50ZXJJbnN0YWxsYXRpb24sXG5kZWFkbGluZSk7XG5cbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnZvdGVPbk9mZmVyRmlsdGVyKHZvdGVDb3VudGVySW5zdGFsbGF0aW9uLGRlYWRsaW5lLHN0cmluZ3Mpe1xuY29uc3R7aGVscGVyfT10aGlzLmZhY2V0cztcbnJldHVybiBoZWxwZXIuXG5wcm92aWRlRmlsdGVyR292ZXJuYW5jZSgpLlxudm90ZU9uRmlsdGVyKHZvdGVDb3VudGVySW5zdGFsbGF0aW9uLGRlYWRsaW5lLHN0cmluZ3MpO1xuIH0sXG5nZXRDcmVhdG9yRmFjZXQoKXtcbnJldHVybiB0aGlzLnN0YXRlLmxpbWl0ZWRDcmVhdG9yRmFjZXQ7XG4gfSxcbmdldEFkbWluRmFjZXQoKXtcbnJldHVybiB0aGlzLnN0YXRlLmFkbWluRmFjZXQ7XG4gfSxcbmdldEluc3RhbmNlKCl7XG5yZXR1cm4gdGhpcy5zdGF0ZS5pbnN0YW5jZTtcbiB9LFxuZ2V0UHVibGljRmFjZXQoKXtcbnJldHVybiB0aGlzLnN0YXRlLnB1YmxpY0ZhY2V0O1xuIH19LFxuXG5wdWJsaWM6e1xuZ2V0RWxlY3RvcmF0ZSgpe1xuY29uc3R7aGVscGVyfT10aGlzLmZhY2V0cztcbnJldHVybiBoZWxwZXIuZ2V0RWxlY3RvcmF0ZUluc3RhbmNlKCk7XG4gfSxcbmdldEdvdmVybmVkQ29udHJhY3QoKXtcbnJldHVybiB0aGlzLnN0YXRlLmluc3RhbmNlO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgdmFsaWRhdGVWb3RlQ291bnRlcihjb3VudGVyKXtcbmNvbnN0e2hlbHBlcn09dGhpcy5mYWNldHM7XG5jb25zdCB2YWxpZGF0b3JzPVtcbkUuZ2V0KGhlbHBlci5wcm92aWRlQXBpR292ZXJuYW5jZSgpKSxcbmhlbHBlci5wcm92aWRlRmlsdGVyR292ZXJuYW5jZSgpLFxuaGVscGVyLnByb3ZpZGVQYXJhbUdvdmVybmFuY2UoKV07XG5cbmNvbnN0IGNoZWNrcz1hd2FpdCBQcm9taXNlLmFsbChcbnZhbGlkYXRvcnMubWFwKCh2YWxpZGF0ZSk9PkUodmFsaWRhdGUuY3JlYXRlZFF1ZXN0aW9uKShjb3VudGVyKSkpO1xuXG5cbmNoZWNrcy5zb21lKEJvb2xlYW4pfHxcbkZhaWwgYFZvdGVDb3VudGVyIHdhcyBub3QgY3JlYXRlZCBieSB0aGlzIGNvbnRyYWN0R292ZXJub3JgO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xudmFsaWRhdGVFbGVjdG9yYXRlKHJlZ1Ape1xuY29uc3R7aGVscGVyfT10aGlzLmZhY2V0cztcbnJldHVybiBFLndoZW4ocmVnUCxhc3luYyhyZWcpPT57XG5jb25zdCBlbGVjdG9yYXRlSW5zdGFuY2U9YXdhaXQgaGVscGVyLmdldEVsZWN0b3JhdGVJbnN0YW5jZSgpO1xuYXNzZXJ0KFxucmVnPT09ZWxlY3RvcmF0ZUluc3RhbmNlLFxuXCJFbGVjdG9yYXRlIGRvZXNuJ3QgbWF0Y2ggbXkgRWxlY3RvcmF0ZVwiKTtcblxuIH0pO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnZhbGlkYXRlVGltZXIoY2xvc2luZ1J1bGUpe1xuYXNzZXJ0KFxuY2xvc2luZ1J1bGUudGltZXI9PT1wb3dlcnMudGltZXIsXG4nY2xvc2luZyBydWxlIG11c3QgdXNlIG15IHRpbWVyJyk7XG5cbiB9fX0pO1xuXG5cblxuXG5yZXR1cm4gbWFrZUNvbnRyYWN0R292ZXJub3JLaXQ7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucHJlcGFyZUNvbnRyYWN0R292ZXJub3JLaXQocHJlcGFyZUNvbnRyYWN0R292ZXJub3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZUNvbnRyYWN0R292ZXJub3JLaXQiOlsicHJlcGFyZUNvbnRyYWN0R292ZXJub3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAPqHOHTseAAA7HgAARgAAAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RIZWxwZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvbm90aWZpZXIiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL2VydHAiLCJAYWdvcmljL3RpbWUiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiLi9jb250cmFjdEdvdmVybmFuY2UvdHlwZWRQYXJhbU1hbmFnZXIuanMiLCIuL3R5cGVHdWFyZHMuanMiLCIuL2NvbnRyYWN0R292ZXJuYW5jZS9nb3Zlcm5QYXJhbS5qcyJdLCJleHBvcnRzIjpbIkdPVkVSTkFOQ0VfU1RPUkFHRV9LRVkiLCJoYW5kbGVQYXJhbUdvdmVybmFuY2UiLCJwdWJsaWNNaXhpbkFQSSIsInZhbGlkYXRlRWxlY3RvcmF0ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixtYWtlU3RvcmVkUHVibGlzaGVyS2l0LGdldE1ldGhvZE5hbWVzLG9iamVjdE1hcCxpZ25vcmVDb250ZXh0LHByZXBhcmVFeG8sTSxBbW91bnRTaGFwZSxCcmFuZFNoYXBlLFJlbGF0aXZlVGltZVJlY29yZFNoYXBlLFRpbWVzdGFtcFJlY29yZFNoYXBlLEUsbWFrZVBhcmFtTWFuYWdlckZyb21UZXJtcyxHb3Zlcm5vckZhY2V0U2hhcGUsQ09OVFJBQ1RfRUxFQ1RPUkFURTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXRcIiwgWyRozY9fYSA9PiAobWFrZVN0b3JlZFB1Ymxpc2hlcktpdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImdldE1ldGhvZE5hbWVzXCIsIFskaM2PX2EgPT4gKGdldE1ldGhvZE5hbWVzID0gJGjNj19hKV1dLFtcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJpZ25vcmVDb250ZXh0XCIsIFskaM2PX2EgPT4gKGlnbm9yZUNvbnRleHQgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRTaGFwZVwiLCBbJGjNj19hID0+IChBbW91bnRTaGFwZSA9ICRozY9fYSldXSxbXCJCcmFuZFNoYXBlXCIsIFskaM2PX2EgPT4gKEJyYW5kU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3RpbWVcIiwgW1tcIlJlbGF0aXZlVGltZVJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKFJlbGF0aXZlVGltZVJlY29yZFNoYXBlID0gJGjNj19hKV1dLFtcIlRpbWVzdGFtcFJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKFRpbWVzdGFtcFJlY29yZFNoYXBlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiLi9jb250cmFjdEdvdmVybmFuY2UvdHlwZWRQYXJhbU1hbmFnZXIuanNcIiwgW1tcIm1ha2VQYXJhbU1hbmFnZXJGcm9tVGVybXNcIiwgWyRozY9fYSA9PiAobWFrZVBhcmFtTWFuYWdlckZyb21UZXJtcyA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiR292ZXJub3JGYWNldFNoYXBlXCIsIFskaM2PX2EgPT4gKEdvdmVybm9yRmFjZXRTaGFwZSA9ICRozY9fYSldXV1dLFtcIi4vY29udHJhY3RHb3Zlcm5hbmNlL2dvdmVyblBhcmFtLmpzXCIsIFtbXCJDT05UUkFDVF9FTEVDVE9SQVRFXCIsIFskaM2PX2EgPT4gKENPTlRSQUNUX0VMRUNUT1JBVEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbmNvbnN0ICAgICAgICBHT1ZFUk5BTkNFX1NUT1JBR0VfS0VZPSdnb3Zlcm5hbmNlJzskaM2PX29uY2UuR09WRVJOQU5DRV9TVE9SQUdFX0tFWShHT1ZFUk5BTkNFX1NUT1JBR0VfS0VZKTtcblxuY29uc3QgcHVibGljTWl4aW5BUEk9aGFyZGVuKHtcbmdldFN1YnNjcmlwdGlvbjpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCdTdG9yZWRTdWJzY3JpcHRpb24nKSksXG5nZXRHb3Zlcm5lZFBhcmFtczpNLmNhbGwoKS5yZXR1cm5zKE0ub3IoTS5yZWNvcmQoKSxNLnByb21pc2UoKSkpLFxuZ2V0QW1vdW50Ok0uY2FsbCgpLnJldHVybnMoQW1vdW50U2hhcGUpLFxuZ2V0QnJhbmQ6TS5jYWxsKCkucmV0dXJucyhCcmFuZFNoYXBlKSxcbmdldEluc3RhbmNlOk0uY2FsbCgpLnJldHVybnMoTS5yZW1vdGFibGUoJ0luc3RhbmNlJykpLFxuZ2V0SW5zdGFsbGF0aW9uOk0uY2FsbCgpLnJldHVybnMoTS5yZW1vdGFibGUoJ0luc3RhbGxhdGlvbicpKSxcbmdldEludml0YXRpb25BbW91bnQ6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXROYXQ6TS5jYWxsKCkucmV0dXJucyhNLmJpZ2ludCgpKSxcbmdldFJhdGlvOk0uY2FsbCgpLnJldHVybnMoTS5yZWNvcmQoKSksXG5nZXRTdHJpbmc6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldFRpbWVzdGFtcDpNLmNhbGwoKS5yZXR1cm5zKFRpbWVzdGFtcFJlY29yZFNoYXBlKSxcbmdldFJlbGF0aXZlVGltZTpNLmNhbGwoKS5yZXR1cm5zKFJlbGF0aXZlVGltZVJlY29yZFNoYXBlKSxcbmdldFVua25vd246TS5jYWxsKCkucmV0dXJucyhNLmFueSgpKX0pO1xuXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5wdWJsaWNNaXhpbkFQSShwdWJsaWNNaXhpbkFQSSk7XG5jb25zdCAgICAgICAgdmFsaWRhdGVFbGVjdG9yYXRlPSh6Y2YscGFyYW1NYW5hZ2VyKT0+e1xuY29uc3QgaW52aXRhdGlvbj1wYXJhbU1hbmFnZXIuZ2V0SW50ZXJuYWxQYXJhbVZhbHVlKENPTlRSQUNUX0VMRUNUT1JBVEUpO1xucmV0dXJuIEUud2hlbihcbkUoemNmLmdldEludml0YXRpb25Jc3N1ZXIoKSkuaXNMaXZlKGludml0YXRpb24pLFxuKGlzTGl2ZSk9PmlzTGl2ZXx8RmFpbCBgRWxlY3RvcmF0ZSBpbnZpdGF0aW9uIGlzIG5vdCBsaXZlLmApO1xuXG4gfTskaM2PX29uY2UudmFsaWRhdGVFbGVjdG9yYXRlKHZhbGlkYXRlRWxlY3RvcmF0ZSk7XG5oYXJkZW4odmFsaWRhdGVFbGVjdG9yYXRlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGZhY2V0SGVscGVycz0oemNmLHBhcmFtTWFuYWdlcik9Pntcbi8vXG4vL1xudm9pZCB2YWxpZGF0ZUVsZWN0b3JhdGUoemNmLHBhcmFtTWFuYWdlcik7XG5cbmNvbnN0IHR5cGVkQWNjZXNzb3JzPXtcbmdldEFtb3VudDpwYXJhbU1hbmFnZXIuZ2V0QW1vdW50LFxuZ2V0QnJhbmQ6cGFyYW1NYW5hZ2VyLmdldEJyYW5kLFxuZ2V0SW5zdGFuY2U6cGFyYW1NYW5hZ2VyLmdldEluc3RhbmNlLFxuZ2V0SW5zdGFsbGF0aW9uOnBhcmFtTWFuYWdlci5nZXRJbnN0YWxsYXRpb24sXG5nZXRJbnZpdGF0aW9uQW1vdW50OnBhcmFtTWFuYWdlci5nZXRJbnZpdGF0aW9uQW1vdW50LFxuZ2V0TmF0OnBhcmFtTWFuYWdlci5nZXROYXQsXG5nZXRSYXRpbzpwYXJhbU1hbmFnZXIuZ2V0UmF0aW8sXG5nZXRTdHJpbmc6cGFyYW1NYW5hZ2VyLmdldFN0cmluZyxcbmdldFRpbWVzdGFtcDpwYXJhbU1hbmFnZXIuZ2V0VGltZXN0YW1wLFxuZ2V0UmVsYXRpdmVUaW1lOnBhcmFtTWFuYWdlci5nZXRSZWxhdGl2ZVRpbWUsXG5nZXRVbmtub3duOnBhcmFtTWFuYWdlci5nZXRVbmtub3dufTtcblxuXG5jb25zdCBjb21tb25QdWJsaWNNZXRob2RzPXtcbmdldFN1YnNjcmlwdGlvbjooKT0+cGFyYW1NYW5hZ2VyLmdldFN1YnNjcmlwdGlvbigpLFxuZ2V0R292ZXJuZWRQYXJhbXM6KCk9PnBhcmFtTWFuYWdlci5nZXRQYXJhbXMoKX07XG5cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgYXVnbWVudFB1YmxpY0ZhY2V0PShvcmlnaW5hbFB1YmxpY0ZhY2V0KT0+e1xucmV0dXJuIEZhcigncHVibGljRmFjZXQnLHtcbi4uLm9yaWdpbmFsUHVibGljRmFjZXQsXG4uLi5jb21tb25QdWJsaWNNZXRob2RzLFxuLi4udHlwZWRBY2Nlc3NvcnN9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBhdWdtZW50VmlydHVhbFB1YmxpY0ZhY2V0PShvcmlnaW5hbFB1YmxpY0ZhY2V0KT0+e1xucmV0dXJuIEZhcigncHVibGljRmFjZXQnLHtcbi4uLm9yaWdpbmFsUHVibGljRmFjZXQsXG4uLi5jb21tb25QdWJsaWNNZXRob2RzLFxuLi4ub2JqZWN0TWFwKHR5cGVkQWNjZXNzb3JzLGlnbm9yZUNvbnRleHQpfSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUZhckdvdmVybm9yRmFjZXQ9KGxpbWl0ZWRDcmVhdG9yRmFjZXQsZ292ZXJuZWRBcGlzPXt9KT0+e1xuY29uc3QgZ292ZXJub3JGYWNldD1GYXIoJ2dvdmVybm9yRmFjZXQnLHtcbmdldFBhcmFtTWdyUmV0cmlldmVyOigpPT5cbkZhcigncGFyYW1SZXRyaWV2ZXInLHtnZXQ6KCk9PnBhcmFtTWFuYWdlcn0pLFxuZ2V0SW52aXRhdGlvbjoobmFtZSk9PnBhcmFtTWFuYWdlci5nZXRJbnRlcm5hbFBhcmFtVmFsdWUobmFtZSksXG5nZXRMaW1pdGVkQ3JlYXRvckZhY2V0OigpPT5saW1pdGVkQ3JlYXRvckZhY2V0LFxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEdvdmVybmVkQXBpczooKT0+RmFyKCdnb3Zlcm5lZEFQSXMnLGdvdmVybmVkQXBpcyksXG4vL1xuLy9cbi8vXG5nZXRHb3Zlcm5lZEFwaU5hbWVzOigpPT5PYmplY3Qua2V5cyhnb3Zlcm5lZEFwaXMpLFxuc2V0T2ZmZXJGaWx0ZXI6KHN0cmluZ3MpPT56Y2Yuc2V0T2ZmZXJGaWx0ZXIoc3RyaW5ncyl9KTtcblxuXG4vL1xucmV0dXJuIGdvdmVybm9yRmFjZXQ7XG4gfTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VHb3Zlcm5vckZhY2V0PShvcmlnaW5hbENyZWF0b3JGYWNldCxnb3Zlcm5lZEFwaXM9e30pPT57XG5yZXR1cm4gbWFrZUZhckdvdmVybm9yRmFjZXQob3JpZ2luYWxDcmVhdG9yRmFjZXQsZ292ZXJuZWRBcGlzKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VWaXJ0dWFsR292ZXJub3JGYWNldD0obGltaXRlZENyZWF0b3JGYWNldCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdvdmVybm9yRmFjZXQ9aGFyZGVuKHtcbmdldFBhcmFtTWdyUmV0cmlldmVyOigpPT5cbkZhcigncGFyYW1SZXRyaWV2ZXInLHtnZXQ6KCk9PnBhcmFtTWFuYWdlcn0pLFxuZ2V0SW52aXRhdGlvbjooX2NvbnRleHQsLyogICAgICAgICAgICAgICAgICovbmFtZSk9PlxucGFyYW1NYW5hZ2VyLmdldEludGVybmFsUGFyYW1WYWx1ZShuYW1lKSxcbmdldExpbWl0ZWRDcmVhdG9yRmFjZXQ6KHtmYWNldHN9KT0+ZmFjZXRzLmxpbWl0ZWRDcmVhdG9yRmFjZXQsXG4vL1xuLy9cbmdldEdvdmVybmVkQXBpczooe2ZhY2V0c30pPT5mYWNldHMuZ292ZXJuZWRBcGlzLFxuLy9cbi8vXG4vL1xuZ2V0R292ZXJuZWRBcGlOYW1lczooe2ZhY2V0c30pPT5cbmdldE1ldGhvZE5hbWVzKGZhY2V0cy5nb3Zlcm5lZEFwaXN8fHt9KSxcbnNldE9mZmVyRmlsdGVyOihfY29udGV4dCxzdHJpbmdzKT0+emNmLnNldE9mZmVyRmlsdGVyKHN0cmluZ3MpfSk7XG5cblxucmV0dXJue2dvdmVybm9yRmFjZXQsbGltaXRlZENyZWF0b3JGYWNldH07XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUR1cmFibGVHb3Zlcm5vckZhY2V0PShcbmJhZ2dhZ2UsXG5saW1pdGVkQ3JlYXRvckZhY2V0LFxuZ292ZXJuZWRBcGlzPXt9KT0+XG57XG5jb25zdCBnb3Zlcm5vckZhY2V0PXByZXBhcmVFeG8oXG5iYWdnYWdlLFxuJ2dvdmVybm9yRmFjZXQnLFxuTS5pbnRlcmZhY2UoJ2dvdmVybm9yRmFjZXQnLEdvdmVybm9yRmFjZXRTaGFwZSksXG57XG5nZXRQYXJhbU1nclJldHJpZXZlcjooKT0+XG5GYXIoJ3BhcmFtUmV0cmlldmVyJyx7Z2V0OigpPT5wYXJhbU1hbmFnZXJ9KSxcbmdldEludml0YXRpb246KG5hbWUpPT5wYXJhbU1hbmFnZXIuZ2V0SW50ZXJuYWxQYXJhbVZhbHVlKG5hbWUpLFxuZ2V0TGltaXRlZENyZWF0b3JGYWNldDooKT0+bGltaXRlZENyZWF0b3JGYWNldCxcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRHb3Zlcm5lZEFwaXM6KCk9PkZhcignZ292ZXJuZWRBUElzJyxnb3Zlcm5lZEFwaXMpLFxuLy9cbi8vXG4vL1xuZ2V0R292ZXJuZWRBcGlOYW1lczooKT0+T2JqZWN0LmtleXMoZ292ZXJuZWRBcGlzfHx7fSksXG5zZXRPZmZlckZpbHRlcjooc3RyaW5ncyk9PnpjZi5zZXRPZmZlckZpbHRlcihzdHJpbmdzKX0pO1xuXG5cblxucmV0dXJue2dvdmVybm9yRmFjZXQsbGltaXRlZENyZWF0b3JGYWNldH07XG4gfTtcblxucmV0dXJuIGhhcmRlbih7XG5wdWJsaWNNaXhpbjp7XG4uLi5jb21tb25QdWJsaWNNZXRob2RzLFxuLi4udHlwZWRBY2Nlc3NvcnN9LFxuXG5hdWdtZW50UHVibGljRmFjZXQsXG5hdWdtZW50VmlydHVhbFB1YmxpY0ZhY2V0LFxubWFrZUdvdmVybm9yRmFjZXQsXG5cbm1ha2VGYXJHb3Zlcm5vckZhY2V0LFxubWFrZVZpcnR1YWxHb3Zlcm5vckZhY2V0LFxubWFrZUR1cmFibGVHb3Zlcm5vckZhY2V0LFxuXG5wYXJhbXM6cGFyYW1NYW5hZ2VyLnJlYWRvbmx5KCl9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGhhbmRsZVBhcmFtR292ZXJuYW5jZT0oXG56Y2YsXG5pbml0aWFsUG9zZXJJbnZpdGF0aW9uLFxucGFyYW1UeXBlc01hcCxcbnN0b3JhZ2VOb2RlLFxubWFyc2hhbGxlcik9Plxue1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1Ymxpc2hlcktpdD1tYWtlU3RvcmVkUHVibGlzaGVyS2l0KFxuc3RvcmFnZU5vZGUsXG5tYXJzaGFsbGVyLFxuR09WRVJOQU5DRV9TVE9SQUdFX0tFWSk7XG5cbmNvbnN0IHBhcmFtTWFuYWdlcj1tYWtlUGFyYW1NYW5hZ2VyRnJvbVRlcm1zKFxucHVibGlzaGVyS2l0LFxuemNmLFxue0VsZWN0b3JhdGU6aW5pdGlhbFBvc2VySW52aXRhdGlvbn0sXG5wYXJhbVR5cGVzTWFwKTtcblxuXG5yZXR1cm4gZmFjZXRIZWxwZXJzKHpjZixwYXJhbU1hbmFnZXIpO1xuIH07JGjNj19vbmNlLmhhbmRsZVBhcmFtR292ZXJuYW5jZShoYW5kbGVQYXJhbUdvdmVybmFuY2UpO1xuXG5oYXJkZW4oaGFuZGxlUGFyYW1Hb3Zlcm5hbmNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InB1YmxpY01peGluQVBJIjpbInB1YmxpY01peGluQVBJIl0sImhhbmRsZVBhcmFtR292ZXJuYW5jZSI6WyJoYW5kbGVQYXJhbUdvdmVybmFuY2UiXSwiR09WRVJOQU5DRV9TVE9SQUdFX0tFWSI6WyJHT1ZFUk5BTkNFX1NUT1JBR0VfS0VZIl0sInZhbGlkYXRlRWxlY3RvcmF0ZSI6WyJ2YWxpZGF0ZUVsZWN0b3JhdGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAT+rEIS8JAAAvCQAAPQAAAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9xdWVzdGlvbi5qcyIsIi4vY29udHJhY3RHb3Zlcm5vci5qcyIsIi4vY29udHJhY3RIZWxwZXIuanMiLCIuL2NvbnRyYWN0R292ZXJuYW5jZS9nb3Zlcm5QYXJhbS5qcyIsIi4vY29udHJhY3RHb3Zlcm5hbmNlL3BhcmFtTWFuYWdlci5qcyIsIi4vY29udHJhY3RHb3Zlcm5hbmNlL3R5cGVkUGFyYW1NYW5hZ2VyLmpzIiwiLi92YWxpZGF0b3JzLmpzIiwiLi9jb25zdGFudHMuanMiXSwiZXhwb3J0cyI6WyJFbGVjdGlvblR5cGUiLCJFbGVjdGlvblR5cGUiLCJhc3NlcnRDb250cmFjdEVsZWN0b3JhdGUiLCJhc3NlcnRDb250cmFjdEVsZWN0b3JhdGUiLCJtYWtlUGFyYW1DaGFuZ2VQb3NpdGlvbnMiLCJtYWtlUGFyYW1DaGFuZ2VQb3NpdGlvbnMiLCJtYWtlUGFyYW1NYW5hZ2VyQnVpbGRlciIsIm1ha2VQYXJhbU1hbmFnZXJCdWlsZGVyIiwibWFrZVBhcmFtTWFuYWdlclN5bmMiLCJtYWtlUGFyYW1NYW5hZ2VyU3luYyIsInB1YmxpY01peGluQVBJIiwicHVibGljTWl4aW5BUEkiLCJ2YWxpZGF0ZVF1ZXN0aW9uRnJvbUNvdW50ZXIiLCJ2YWxpZGF0ZVF1ZXN0aW9uRnJvbUNvdW50ZXIiLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9xdWVzdGlvbi5qc1wiLCBbXV0sW1wiLi9jb250cmFjdEdvdmVybm9yLmpzXCIsIFtdXSxbXCIuL2NvbnRyYWN0SGVscGVyLmpzXCIsIFtdXSxbXCIuL2NvbnRyYWN0R292ZXJuYW5jZS9nb3Zlcm5QYXJhbS5qc1wiLCBbXV0sW1wiLi9jb250cmFjdEdvdmVybmFuY2UvcGFyYW1NYW5hZ2VyLmpzXCIsIFtdXSxbXCIuL2NvbnRyYWN0R292ZXJuYW5jZS90eXBlZFBhcmFtTWFuYWdlci5qc1wiLCBbXV0sW1wiLi92YWxpZGF0b3JzLmpzXCIsIFtdXSxbXCIuL2NvbnN0YW50cy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vcXVlc3Rpb24uanMiOltbIkNob2ljZU1ldGhvZCIsIkNob2ljZU1ldGhvZCJdLFsiRWxlY3Rpb25UeXBlIiwiRWxlY3Rpb25UeXBlIl0sWyJRdW9ydW1SdWxlIiwiUXVvcnVtUnVsZSJdLFsiY29lcmNlUXVlc3Rpb25TcGVjIiwiY29lcmNlUXVlc3Rpb25TcGVjIl0sWyJwb3NpdGlvbkluY2x1ZGVkIiwicG9zaXRpb25JbmNsdWRlZCJdLFsiYnVpbGRRdWVzdGlvbiIsImJ1aWxkUXVlc3Rpb24iXV0sIi4vY29udHJhY3RHb3Zlcm5vci5qcyI6W1sidmFsaWRhdGVRdWVzdGlvbkRldGFpbHMiLCJ2YWxpZGF0ZVF1ZXN0aW9uRGV0YWlscyJdLFsidmFsaWRhdGVRdWVzdGlvbkZyb21Db3VudGVyIiwidmFsaWRhdGVRdWVzdGlvbkZyb21Db3VudGVyIl1dLCIuL2NvbnRyYWN0SGVscGVyLmpzIjpbWyJoYW5kbGVQYXJhbUdvdmVybmFuY2UiLCJoYW5kbGVQYXJhbUdvdmVybmFuY2UiXSxbInB1YmxpY01peGluQVBJIiwicHVibGljTWl4aW5BUEkiXV0sIi4vY29udHJhY3RHb3Zlcm5hbmNlL2dvdmVyblBhcmFtLmpzIjpbWyJhc3NlcnRCYWxsb3RDb25jZXJuc1BhcmFtIiwiYXNzZXJ0QmFsbG90Q29uY2VybnNQYXJhbSJdLFsibWFrZVBhcmFtQ2hhbmdlUG9zaXRpb25zIiwibWFrZVBhcmFtQ2hhbmdlUG9zaXRpb25zIl0sWyJzZXR1cFBhcmFtR292ZXJuYW5jZSIsInNldHVwUGFyYW1Hb3Zlcm5hbmNlIl0sWyJDT05UUkFDVF9FTEVDVE9SQVRFIiwiQ09OVFJBQ1RfRUxFQ1RPUkFURSJdXSwiLi9jb250cmFjdEdvdmVybmFuY2UvcGFyYW1NYW5hZ2VyLmpzIjpbWyJhc3NlcnRFbGVjdG9yYXRlTWF0Y2hlcyIsImFzc2VydEVsZWN0b3JhdGVNYXRjaGVzIl0sWyJtYWtlUGFyYW1NYW5hZ2VyQnVpbGRlciIsIm1ha2VQYXJhbU1hbmFnZXJCdWlsZGVyIl1dLCIuL2NvbnRyYWN0R292ZXJuYW5jZS90eXBlZFBhcmFtTWFuYWdlci5qcyI6W1sibWFrZVBhcmFtTWFuYWdlciIsIm1ha2VQYXJhbU1hbmFnZXIiXSxbIm1ha2VQYXJhbU1hbmFnZXJTeW5jIiwibWFrZVBhcmFtTWFuYWdlclN5bmMiXV0sIi4vdmFsaWRhdG9ycy5qcyI6W1siYXNzZXJ0Q29udHJhY3RHb3Zlcm5hbmNlIiwiYXNzZXJ0Q29udHJhY3RHb3Zlcm5hbmNlIl0sWyJhc3NlcnRDb250cmFjdEVsZWN0b3JhdGUiLCJhc3NlcnRDb250cmFjdEVsZWN0b3JhdGUiXV0sIi4vY29uc3RhbnRzLmpzIjpbWyJQYXJhbVR5cGVzIiwiUGFyYW1UeXBlcyJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAURB5JLgLAAC4CwAAQAAAAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvcXVlc3Rpb24uanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvem9lL3NyYy9tYWtlSGFuZGxlLmpzIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsiQ2hvaWNlTWV0aG9kIiwiRWxlY3Rpb25UeXBlIiwiUXVvcnVtUnVsZSIsImJ1aWxkUXVlc3Rpb24iLCJjb2VyY2VRdWVzdGlvblNwZWMiLCJwb3NpdGlvbkluY2x1ZGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VFeG8sbXVzdE1hdGNoLGtleUVRLE0sbWFrZUhhbmRsZSxRdWVzdGlvbkksUXVlc3Rpb25TcGVjU2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlRXhvXCIsIFskaM2PX2EgPT4gKG1ha2VFeG8gPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3pvZS9zcmMvbWFrZUhhbmRsZS5qc1wiLCBbW1wibWFrZUhhbmRsZVwiLCBbJGjNj19hID0+IChtYWtlSGFuZGxlID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJRdWVzdGlvbklcIiwgWyRozY9fYSA9PiAoUXVlc3Rpb25JID0gJGjNj19hKV1dLFtcIlF1ZXN0aW9uU3BlY1NoYXBlXCIsIFskaM2PX2EgPT4gKFF1ZXN0aW9uU3BlY1NoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuICovXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgQ2hvaWNlTWV0aG9kPS8qICAgICAgICAgICAgICAgICove1xuVU5SQU5LRUQ6J3VucmFua2VkJyxcbk9SREVSOidvcmRlcicsXG5QTFVSQUxJVFk6J3BsdXJhbGl0eSd9OyRozY9fb25jZS5DaG9pY2VNZXRob2QoQ2hvaWNlTWV0aG9kKTtcblxuXG5jb25zdCBFbGVjdGlvblR5cGU9LyogICAgICAgICAgICAgICAgKi97XG4vL1xuUEFSQU1fQ0hBTkdFOidwYXJhbV9jaGFuZ2UnLFxuLy9cbkVMRUNUSU9OOidlbGVjdGlvbicsXG5TVVJWRVk6J3N1cnZleScsXG4vL1xuQVBJX0lOVk9DQVRJT046J2FwaV9pbnZvY2F0aW9uJyxcbk9GRkVSX0ZJTFRFUjonb2ZmZXJfZmlsdGVyJ307JGjNj19vbmNlLkVsZWN0aW9uVHlwZShFbGVjdGlvblR5cGUpO1xuXG5cbmNvbnN0IFF1b3J1bVJ1bGU9LyogICAgICAgICAgICAgICAgKi97XG5NQUpPUklUWTonbWFqb3JpdHknLFxuTk9fUVVPUlVNOidub19xdW9ydW0nLFxuLy9cbkFMTDonYWxsJ307XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5RdW9ydW1SdWxlKFF1b3J1bVJ1bGUpO1xuY29uc3QgcG9zaXRpb25JbmNsdWRlZD0ocG9zaXRpb25zLHApPT5wb3NpdGlvbnMuc29tZSgoZSk9PmtleUVRKGUscCkpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLnBvc2l0aW9uSW5jbHVkZWQocG9zaXRpb25JbmNsdWRlZCk7XG5jb25zdCBjb2VyY2VRdWVzdGlvblNwZWM9KHtcbm1ldGhvZCxcbmlzc3VlLFxucG9zaXRpb25zLFxuZWxlY3Rpb25UeXBlLFxubWF4Q2hvaWNlcyxcbm1heFdpbm5lcnMsXG5jbG9zaW5nUnVsZSxcbnF1b3J1bVJ1bGUsXG50aWVPdXRjb21lfSk9Plxue1xuY29uc3QgcXVlc3Rpb249aGFyZGVuKHtcbm1ldGhvZCxcbmlzc3VlLFxucG9zaXRpb25zLFxubWF4Q2hvaWNlczpOdW1iZXIobWF4Q2hvaWNlcyksXG5tYXhXaW5uZXJzOk51bWJlcihtYXhXaW5uZXJzKSxcbmVsZWN0aW9uVHlwZSxcbmNsb3NpbmdSdWxlLFxucXVvcnVtUnVsZSxcbnRpZU91dGNvbWV9KTtcblxuXG5tdXN0TWF0Y2gocXVlc3Rpb24sUXVlc3Rpb25TcGVjU2hhcGUpO1xuXG4vL1xuLy9cbi8vXG4vL1xubXVzdE1hdGNoKHF1ZXN0aW9uLnRpZU91dGNvbWUsTS5vciguLi5xdWVzdGlvbi5wb3NpdGlvbnMpKTtcblxucmV0dXJuIHF1ZXN0aW9uO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuY29lcmNlUXVlc3Rpb25TcGVjKGNvZXJjZVF1ZXN0aW9uU3BlYyk7XG5jb25zdCBidWlsZFF1ZXN0aW9uPShxdWVzdGlvblNwZWMsY291bnRlckluc3RhbmNlKT0+e1xuY29uc3QgcXVlc3Rpb25IYW5kbGU9bWFrZUhhbmRsZSgnUXVlc3Rpb24nKTtcblxuLyogICAgICAgICAgICAgICAgICAgKi9cbnJldHVybiBtYWtlRXhvKCdxdWVzdGlvbiBkZXRhaWxzJyxRdWVzdGlvbkkse1xuZ2V0Vm90ZUNvdW50ZXIoKXtcbnJldHVybiBjb3VudGVySW5zdGFuY2U7XG4gfSxcbmdldERldGFpbHMoKXtcbnJldHVybiBoYXJkZW4oe1xuLi4ucXVlc3Rpb25TcGVjLFxucXVlc3Rpb25IYW5kbGUsXG5jb3VudGVySW5zdGFuY2V9KTtcblxuIH19KTtcblxuIH07JGjNj19vbmNlLmJ1aWxkUXVlc3Rpb24oYnVpbGRRdWVzdGlvbik7XG5cbmhhcmRlbihidWlsZFF1ZXN0aW9uKTtcbmhhcmRlbihDaG9pY2VNZXRob2QpO1xuaGFyZGVuKEVsZWN0aW9uVHlwZSk7XG5oYXJkZW4oY29lcmNlUXVlc3Rpb25TcGVjKTtcbmhhcmRlbihwb3NpdGlvbkluY2x1ZGVkKTtcbmhhcmRlbihRdW9ydW1SdWxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNob2ljZU1ldGhvZCI6WyJDaG9pY2VNZXRob2QiXSwiRWxlY3Rpb25UeXBlIjpbIkVsZWN0aW9uVHlwZSJdLCJRdW9ydW1SdWxlIjpbIlF1b3J1bVJ1bGUiXSwicG9zaXRpb25JbmNsdWRlZCI6WyJwb3NpdGlvbkluY2x1ZGVkIl0sImNvZXJjZVF1ZXN0aW9uU3BlYyI6WyJjb2VyY2VRdWVzdGlvblNwZWMiXSwiYnVpbGRRdWVzdGlvbiI6WyJidWlsZFF1ZXN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPJw3GVmPAAAZjwAAEIAAABAYWdvcmljL2dvdmVybmFuY2UtdjAuMTAuNC1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdGltZSIsIkBhZ29yaWMvem9lL3NyYy90eXBlR3VhcmRzLmpzIiwiQGFnb3JpYy9ub3RpZmllciJdLCJleHBvcnRzIjpbIkFwaUludm9jYXRpb25Qb3NpdGlvbnNTaGFwZSIsIkFwaUludm9jYXRpb25RdWVzdGlvbkRldGFpbHNTaGFwZSIsIkFwaUludm9jYXRpb25RdWVzdGlvblNwZWNTaGFwZSIsIkJpbmFyeVZvdGVDb3VudGVyQWRtaW5JIiwiQmluYXJ5Vm90ZUNvdW50ZXJDbG9zZUkiLCJCaW5hcnlWb3RlQ291bnRlclB1YmxpY0kiLCJDaG9pY2VNZXRob2RTaGFwZSIsIkNsb3NpbmdSdWxlU2hhcGUiLCJFbGVjdGlvblR5cGVTaGFwZSIsIkVsZWN0b3JhdGVDcmVhdG9ySSIsIkVsZWN0b3JhdGVQdWJsaWNJIiwiR292ZXJub3JGYWNldFNoYXBlIiwiSW52aXRhdGlvblNoYXBlIiwiTm9BcGlJbnZvY2F0aW9uUG9zaXRpb25TaGFwZSIsIk5vT2ZmZXJGaWx0ZXJQb3NpdGlvblNoYXBlIiwiTm9QYXJhbUNoYW5nZXNQb3NpdGlvblNoYXBlIiwiTm9TaW1wbGVQb3NpdGlvblNoYXBlIiwiT2ZmZXJGaWx0ZXJJc3N1ZVNoYXBlIiwiT2ZmZXJGaWx0ZXJQb3NpdGlvbnNTaGFwZSIsIk9mZmVyRmlsdGVyUXVlc3Rpb25EZXRhaWxzU2hhcGUiLCJPZmZlckZpbHRlclF1ZXN0aW9uU3BlY1NoYXBlIiwiUGFyYW1DaGFuZ2VzSXNzdWVTaGFwZSIsIlBhcmFtQ2hhbmdlc1Bvc2l0aW9uc1NoYXBlIiwiUGFyYW1DaGFuZ2VzUXVlc3Rpb25EZXRhaWxzU2hhcGUiLCJQYXJhbUNoYW5nZXNRdWVzdGlvblNwZWNTaGFwZSIsIlBhcmFtQ2hhbmdlc1NwZWNTaGFwZSIsIlBhcmFtUGF0aFNoYXBlIiwiUG9zaXRpb25TaGFwZSIsIlF1ZXN0aW9uRGV0YWlsc1NoYXBlIiwiUXVlc3Rpb25IYW5kbGVTaGFwZSIsIlF1ZXN0aW9uSSIsIlF1ZXN0aW9uU3BlY1NoYXBlIiwiUXVlc3Rpb25TdGF0c1NoYXBlIiwiUXVvcnVtUnVsZVNoYXBlIiwiU2ltcGxlSXNzdWVTaGFwZSIsIlNpbXBsZVBvc2l0aW9uc1NoYXBlIiwiU2ltcGxlUXVlc3Rpb25EZXRhaWxzU2hhcGUiLCJTaW1wbGVRdWVzdGlvblNwZWNTaGFwZSIsIlZvdGVDb3VudGVyQWRtaW5JIiwiVm90ZUNvdW50ZXJDbG9zZUkiLCJWb3RlQ291bnRlclB1YmxpY0kiLCJWb3RlckhhbmRsZSIsIlllc0FwaUludm9jYXRpb25Qb3NpdGlvblNoYXBlIiwiWWVzT2ZmZXJGaWx0ZXJQb3NpdGlvblNoYXBlIiwiWWVzUGFyYW1DaGFuZ2VzUG9zaXRpb25TaGFwZSIsIlllc1NpbXBsZVBvc2l0aW9uU2hhcGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxUaW1lc3RhbXBTaGFwZSxJbnN0YW5jZUhhbmRsZVNoYXBlLFRpbWVyU2hhcGUsbWFrZUhhbmRsZVNoYXBlLFN1YnNjcmliZXJTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdGltZVwiLCBbW1wiVGltZXN0YW1wU2hhcGVcIiwgWyRozY9fYSA9PiAoVGltZXN0YW1wU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3pvZS9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbW1wiSW5zdGFuY2VIYW5kbGVTaGFwZVwiLCBbJGjNj19hID0+IChJbnN0YW5jZUhhbmRsZVNoYXBlID0gJGjNj19hKV1dLFtcIlRpbWVyU2hhcGVcIiwgWyRozY9fYSA9PiAoVGltZXJTaGFwZSA9ICRozY9fYSldXSxbXCJtYWtlSGFuZGxlU2hhcGVcIiwgWyRozY9fYSA9PiAobWFrZUhhbmRsZVNoYXBlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wiU3Vic2NyaWJlclNoYXBlXCIsIFskaM2PX2EgPT4gKFN1YnNjcmliZXJTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuY29uc3QgICAgICAgIENob2ljZU1ldGhvZFNoYXBlPU0ub3IoJ3VucmFua2VkJywnb3JkZXInLCdwbHVyYWxpdHknKTskaM2PX29uY2UuQ2hvaWNlTWV0aG9kU2hhcGUoQ2hvaWNlTWV0aG9kU2hhcGUpO1xuY29uc3QgICAgICAgIFF1b3J1bVJ1bGVTaGFwZT1NLm9yKCdtYWpvcml0eScsJ25vX3F1b3J1bScsJ2FsbCcpOyRozY9fb25jZS5RdW9ydW1SdWxlU2hhcGUoUXVvcnVtUnVsZVNoYXBlKTtcbmNvbnN0ICAgICAgICBFbGVjdGlvblR5cGVTaGFwZT1NLm9yKFxuJ3BhcmFtX2NoYW5nZScsXG4nZWxlY3Rpb24nLFxuJ3N1cnZleScsXG4nYXBpX2ludm9jYXRpb24nLFxuJ29mZmVyX2ZpbHRlcicpOyRozY9fb25jZS5FbGVjdGlvblR5cGVTaGFwZShFbGVjdGlvblR5cGVTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIENsb3NpbmdSdWxlU2hhcGU9e1xudGltZXI6TS5lcmVmKFRpbWVyU2hhcGUpLFxuZGVhZGxpbmU6VGltZXN0YW1wU2hhcGV9OyRozY9fb25jZS5DbG9zaW5nUnVsZVNoYXBlKENsb3NpbmdSdWxlU2hhcGUpO1xuXG5oYXJkZW4oQ2xvc2luZ1J1bGVTaGFwZSk7XG5cbi8vXG5jb25zdCAgICAgICAgWWVzT2ZmZXJGaWx0ZXJQb3NpdGlvblNoYXBlPXtcbnN0cmluZ3M6TS5hcnJheU9mKE0uc3RyaW5nKCkpfTskaM2PX29uY2UuWWVzT2ZmZXJGaWx0ZXJQb3NpdGlvblNoYXBlKFllc09mZmVyRmlsdGVyUG9zaXRpb25TaGFwZSk7XG5cbmhhcmRlbihZZXNPZmZlckZpbHRlclBvc2l0aW9uU2hhcGUpO1xuXG5jb25zdCAgICAgICAgTm9PZmZlckZpbHRlclBvc2l0aW9uU2hhcGU9e2RvbnRVcGRhdGU6TS5hcnJheU9mKE0uc3RyaW5nKCkpfTskaM2PX29uY2UuTm9PZmZlckZpbHRlclBvc2l0aW9uU2hhcGUoTm9PZmZlckZpbHRlclBvc2l0aW9uU2hhcGUpO1xuaGFyZGVuKE5vT2ZmZXJGaWx0ZXJQb3NpdGlvblNoYXBlKTtcblxuY29uc3QgICAgICAgIE9mZmVyRmlsdGVyUG9zaXRpb25zU2hhcGU9W1xuWWVzT2ZmZXJGaWx0ZXJQb3NpdGlvblNoYXBlLFxuTm9PZmZlckZpbHRlclBvc2l0aW9uU2hhcGVdOyRozY9fb25jZS5PZmZlckZpbHRlclBvc2l0aW9uc1NoYXBlKE9mZmVyRmlsdGVyUG9zaXRpb25zU2hhcGUpO1xuXG5oYXJkZW4oT2ZmZXJGaWx0ZXJQb3NpdGlvbnNTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBPZmZlckZpbHRlcklzc3VlU2hhcGU9e3N0cmluZ3M6TS5hcnJheU9mKE0uc3RyaW5nKCkpfTskaM2PX29uY2UuT2ZmZXJGaWx0ZXJJc3N1ZVNoYXBlKE9mZmVyRmlsdGVySXNzdWVTaGFwZSk7XG5oYXJkZW4oT2ZmZXJGaWx0ZXJJc3N1ZVNoYXBlKTtcblxuY29uc3QgICAgICAgIE9mZmVyRmlsdGVyUXVlc3Rpb25TcGVjU2hhcGU9e1xubWV0aG9kOkNob2ljZU1ldGhvZFNoYXBlLFxuaXNzdWU6T2ZmZXJGaWx0ZXJJc3N1ZVNoYXBlLFxucG9zaXRpb25zOk9mZmVyRmlsdGVyUG9zaXRpb25zU2hhcGUsXG5lbGVjdGlvblR5cGU6J29mZmVyX2ZpbHRlcicsXG5tYXhDaG9pY2VzOjEsXG5tYXhXaW5uZXJzOjEsXG5jbG9zaW5nUnVsZTpDbG9zaW5nUnVsZVNoYXBlLFxucXVvcnVtUnVsZTpRdW9ydW1SdWxlU2hhcGUsXG50aWVPdXRjb21lOk5vT2ZmZXJGaWx0ZXJQb3NpdGlvblNoYXBlfTskaM2PX29uY2UuT2ZmZXJGaWx0ZXJRdWVzdGlvblNwZWNTaGFwZShPZmZlckZpbHRlclF1ZXN0aW9uU3BlY1NoYXBlKTtcblxuaGFyZGVuKE9mZmVyRmlsdGVyUXVlc3Rpb25TcGVjU2hhcGUpO1xuXG5jb25zdCAgICAgICAgT2ZmZXJGaWx0ZXJRdWVzdGlvbkRldGFpbHNTaGFwZT17XG4uLi5PZmZlckZpbHRlclF1ZXN0aW9uU3BlY1NoYXBlLFxucXVlc3Rpb25IYW5kbGU6bWFrZUhhbmRsZVNoYXBlKCdRdWVzdGlvbicpLFxuY291bnRlckluc3RhbmNlOkluc3RhbmNlSGFuZGxlU2hhcGV9OyRozY9fb25jZS5PZmZlckZpbHRlclF1ZXN0aW9uRGV0YWlsc1NoYXBlKE9mZmVyRmlsdGVyUXVlc3Rpb25EZXRhaWxzU2hhcGUpO1xuXG5oYXJkZW4oT2ZmZXJGaWx0ZXJRdWVzdGlvbkRldGFpbHNTaGFwZSk7XG5cbi8vXG5jb25zdCAgICAgICAgUGFyYW1DaGFuZ2VzU3BlY1NoYXBlPU0ucmVjb3JkT2YoTS5zdHJpbmcoKSxNLmFueSgpKTskaM2PX29uY2UuUGFyYW1DaGFuZ2VzU3BlY1NoYXBlKFBhcmFtQ2hhbmdlc1NwZWNTaGFwZSk7XG5jb25zdCAgICAgICAgWWVzUGFyYW1DaGFuZ2VzUG9zaXRpb25TaGFwZT1QYXJhbUNoYW5nZXNTcGVjU2hhcGU7JGjNj19vbmNlLlllc1BhcmFtQ2hhbmdlc1Bvc2l0aW9uU2hhcGUoWWVzUGFyYW1DaGFuZ2VzUG9zaXRpb25TaGFwZSk7XG5jb25zdCAgICAgICAgTm9QYXJhbUNoYW5nZXNQb3NpdGlvblNoYXBlPXtub0NoYW5nZTpNLmFycmF5T2YoTS5zdHJpbmcoKSl9OyRozY9fb25jZS5Ob1BhcmFtQ2hhbmdlc1Bvc2l0aW9uU2hhcGUoTm9QYXJhbUNoYW5nZXNQb3NpdGlvblNoYXBlKTtcbmhhcmRlbihOb1BhcmFtQ2hhbmdlc1Bvc2l0aW9uU2hhcGUpO1xuXG5jb25zdCAgICAgICAgUGFyYW1DaGFuZ2VzUG9zaXRpb25zU2hhcGU9W1xuWWVzUGFyYW1DaGFuZ2VzUG9zaXRpb25TaGFwZSxcbk5vUGFyYW1DaGFuZ2VzUG9zaXRpb25TaGFwZV07JGjNj19vbmNlLlBhcmFtQ2hhbmdlc1Bvc2l0aW9uc1NoYXBlKFBhcmFtQ2hhbmdlc1Bvc2l0aW9uc1NoYXBlKTtcblxuaGFyZGVuKFBhcmFtQ2hhbmdlc1Bvc2l0aW9uc1NoYXBlKTtcblxuY29uc3QgICAgICAgIFBhcmFtUGF0aFNoYXBlPXtrZXk6TS5hbnkoKX07JGjNj19vbmNlLlBhcmFtUGF0aFNoYXBlKFBhcmFtUGF0aFNoYXBlKTtcbmhhcmRlbihQYXJhbVBhdGhTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBQYXJhbUNoYW5nZXNJc3N1ZVNoYXBlPXtcbnNwZWM6e1xucGFyYW1QYXRoOlBhcmFtUGF0aFNoYXBlLFxuY2hhbmdlczpQYXJhbUNoYW5nZXNTcGVjU2hhcGV9LFxuXG5jb250cmFjdDpJbnN0YW5jZUhhbmRsZVNoYXBlfTskaM2PX29uY2UuUGFyYW1DaGFuZ2VzSXNzdWVTaGFwZShQYXJhbUNoYW5nZXNJc3N1ZVNoYXBlKTtcblxuaGFyZGVuKFBhcmFtQ2hhbmdlc0lzc3VlU2hhcGUpO1xuXG5jb25zdCAgICAgICAgUGFyYW1DaGFuZ2VzUXVlc3Rpb25TcGVjU2hhcGU9e1xubWV0aG9kOid1bnJhbmtlZCcsXG5pc3N1ZTpQYXJhbUNoYW5nZXNJc3N1ZVNoYXBlLFxucG9zaXRpb25zOlBhcmFtQ2hhbmdlc1Bvc2l0aW9uc1NoYXBlLFxuZWxlY3Rpb25UeXBlOidwYXJhbV9jaGFuZ2UnLFxubWF4Q2hvaWNlczoxLFxubWF4V2lubmVyczoxLFxuY2xvc2luZ1J1bGU6Q2xvc2luZ1J1bGVTaGFwZSxcbnF1b3J1bVJ1bGU6J21ham9yaXR5JyxcbnRpZU91dGNvbWU6Tm9QYXJhbUNoYW5nZXNQb3NpdGlvblNoYXBlfTskaM2PX29uY2UuUGFyYW1DaGFuZ2VzUXVlc3Rpb25TcGVjU2hhcGUoUGFyYW1DaGFuZ2VzUXVlc3Rpb25TcGVjU2hhcGUpO1xuXG5oYXJkZW4oUGFyYW1DaGFuZ2VzUXVlc3Rpb25TcGVjU2hhcGUpO1xuXG5jb25zdCAgICAgICAgUGFyYW1DaGFuZ2VzUXVlc3Rpb25EZXRhaWxzU2hhcGU9e1xuLi4uUGFyYW1DaGFuZ2VzUXVlc3Rpb25TcGVjU2hhcGUsXG5xdWVzdGlvbkhhbmRsZTptYWtlSGFuZGxlU2hhcGUoJ1F1ZXN0aW9uJyksXG5jb3VudGVySW5zdGFuY2U6SW5zdGFuY2VIYW5kbGVTaGFwZX07JGjNj19vbmNlLlBhcmFtQ2hhbmdlc1F1ZXN0aW9uRGV0YWlsc1NoYXBlKFBhcmFtQ2hhbmdlc1F1ZXN0aW9uRGV0YWlsc1NoYXBlKTtcblxuaGFyZGVuKFBhcmFtQ2hhbmdlc1F1ZXN0aW9uRGV0YWlsc1NoYXBlKTtcblxuY29uc3QgQXBpSW52b2NhdGlvblNwZWNTaGFwZT17XG5hcGlNZXRob2ROYW1lOk0uc3RyaW5nKCksXG5tZXRob2RBcmdzOk0uYXJyYXlPZihNLmFueSgpKX07XG5cbmhhcmRlbihBcGlJbnZvY2F0aW9uU3BlY1NoYXBlKTtcblxuY29uc3QgICAgICAgIFllc0FwaUludm9jYXRpb25Qb3NpdGlvblNoYXBlPUFwaUludm9jYXRpb25TcGVjU2hhcGU7JGjNj19vbmNlLlllc0FwaUludm9jYXRpb25Qb3NpdGlvblNoYXBlKFllc0FwaUludm9jYXRpb25Qb3NpdGlvblNoYXBlKTtcbmNvbnN0ICAgICAgICBOb0FwaUludm9jYXRpb25Qb3NpdGlvblNoYXBlPXtkb250SW52b2tlOk0uc3RyaW5nKCl9OyRozY9fb25jZS5Ob0FwaUludm9jYXRpb25Qb3NpdGlvblNoYXBlKE5vQXBpSW52b2NhdGlvblBvc2l0aW9uU2hhcGUpO1xuaGFyZGVuKE5vQXBpSW52b2NhdGlvblBvc2l0aW9uU2hhcGUpO1xuXG5jb25zdCAgICAgICAgQXBpSW52b2NhdGlvblBvc2l0aW9uc1NoYXBlPVtcblllc0FwaUludm9jYXRpb25Qb3NpdGlvblNoYXBlLFxuTm9BcGlJbnZvY2F0aW9uUG9zaXRpb25TaGFwZV07JGjNj19vbmNlLkFwaUludm9jYXRpb25Qb3NpdGlvbnNTaGFwZShBcGlJbnZvY2F0aW9uUG9zaXRpb25zU2hhcGUpO1xuXG5oYXJkZW4oQXBpSW52b2NhdGlvblBvc2l0aW9uc1NoYXBlKTtcblxuY29uc3QgICAgICAgIEFwaUludm9jYXRpb25RdWVzdGlvblNwZWNTaGFwZT17XG5tZXRob2Q6J3VucmFua2VkJyxcbmlzc3VlOkFwaUludm9jYXRpb25TcGVjU2hhcGUsXG5wb3NpdGlvbnM6QXBpSW52b2NhdGlvblBvc2l0aW9uc1NoYXBlLFxuZWxlY3Rpb25UeXBlOidhcGlfaW52b2NhdGlvbicsXG5tYXhDaG9pY2VzOjEsXG5tYXhXaW5uZXJzOjEsXG5jbG9zaW5nUnVsZTpDbG9zaW5nUnVsZVNoYXBlLFxucXVvcnVtUnVsZTpRdW9ydW1SdWxlU2hhcGUsXG50aWVPdXRjb21lOk5vQXBpSW52b2NhdGlvblBvc2l0aW9uU2hhcGV9OyRozY9fb25jZS5BcGlJbnZvY2F0aW9uUXVlc3Rpb25TcGVjU2hhcGUoQXBpSW52b2NhdGlvblF1ZXN0aW9uU3BlY1NoYXBlKTtcblxuaGFyZGVuKEFwaUludm9jYXRpb25RdWVzdGlvblNwZWNTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBBcGlJbnZvY2F0aW9uUXVlc3Rpb25EZXRhaWxzU2hhcGU9e1xuLi4uQXBpSW52b2NhdGlvblF1ZXN0aW9uU3BlY1NoYXBlLFxucXVlc3Rpb25IYW5kbGU6bWFrZUhhbmRsZVNoYXBlKCdRdWVzdGlvbicpLFxuY291bnRlckluc3RhbmNlOkluc3RhbmNlSGFuZGxlU2hhcGV9OyRozY9fb25jZS5BcGlJbnZvY2F0aW9uUXVlc3Rpb25EZXRhaWxzU2hhcGUoQXBpSW52b2NhdGlvblF1ZXN0aW9uRGV0YWlsc1NoYXBlKTtcblxuaGFyZGVuKEFwaUludm9jYXRpb25RdWVzdGlvbkRldGFpbHNTaGFwZSk7XG5cbmNvbnN0IFNpbXBsZVNwZWNTaGFwZT17dGV4dDpNLnN0cmluZygpfTtcbmhhcmRlbihTaW1wbGVTcGVjU2hhcGUpO1xuXG5jb25zdCAgICAgICAgWWVzU2ltcGxlUG9zaXRpb25TaGFwZT17dGV4dDpNLnN0cmluZygpfTskaM2PX29uY2UuWWVzU2ltcGxlUG9zaXRpb25TaGFwZShZZXNTaW1wbGVQb3NpdGlvblNoYXBlKTtcbmhhcmRlbihZZXNTaW1wbGVQb3NpdGlvblNoYXBlKTtcblxuY29uc3QgICAgICAgIE5vU2ltcGxlUG9zaXRpb25TaGFwZT17dGV4dDpNLnN0cmluZygpfTskaM2PX29uY2UuTm9TaW1wbGVQb3NpdGlvblNoYXBlKE5vU2ltcGxlUG9zaXRpb25TaGFwZSk7XG5oYXJkZW4oTm9TaW1wbGVQb3NpdGlvblNoYXBlKTtcblxuY29uc3QgICAgICAgIFNpbXBsZVBvc2l0aW9uc1NoYXBlPVtcblllc1NpbXBsZVBvc2l0aW9uU2hhcGUsXG5Ob1NpbXBsZVBvc2l0aW9uU2hhcGVdOyRozY9fb25jZS5TaW1wbGVQb3NpdGlvbnNTaGFwZShTaW1wbGVQb3NpdGlvbnNTaGFwZSk7XG5cbmhhcmRlbihTaW1wbGVQb3NpdGlvbnNTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBTaW1wbGVJc3N1ZVNoYXBlPVNpbXBsZVNwZWNTaGFwZTskaM2PX29uY2UuU2ltcGxlSXNzdWVTaGFwZShTaW1wbGVJc3N1ZVNoYXBlKTtcbmhhcmRlbihTaW1wbGVJc3N1ZVNoYXBlKTtcblxuY29uc3QgICAgICAgIFNpbXBsZVF1ZXN0aW9uU3BlY1NoYXBlPXtcbm1ldGhvZDpDaG9pY2VNZXRob2RTaGFwZSxcbmlzc3VlOlNpbXBsZUlzc3VlU2hhcGUsXG5wb3NpdGlvbnM6TS5hcnJheU9mKHt0ZXh0Ok0uc3RyaW5nKCl9KSxcbmVsZWN0aW9uVHlwZTpNLm9yKCdlbGVjdGlvbicsJ3N1cnZleScpLFxubWF4Q2hvaWNlczpNLmd0ZSgxKSxcbm1heFdpbm5lcnM6TS5ndGUoMSksXG5jbG9zaW5nUnVsZTpDbG9zaW5nUnVsZVNoYXBlLFxucXVvcnVtUnVsZTpRdW9ydW1SdWxlU2hhcGUsXG50aWVPdXRjb21lOk5vU2ltcGxlUG9zaXRpb25TaGFwZX07JGjNj19vbmNlLlNpbXBsZVF1ZXN0aW9uU3BlY1NoYXBlKFNpbXBsZVF1ZXN0aW9uU3BlY1NoYXBlKTtcblxuaGFyZGVuKFNpbXBsZVF1ZXN0aW9uU3BlY1NoYXBlKTtcblxuY29uc3QgICAgICAgIFNpbXBsZVF1ZXN0aW9uRGV0YWlsc1NoYXBlPXtcbi4uLlNpbXBsZVF1ZXN0aW9uU3BlY1NoYXBlLFxucXVlc3Rpb25IYW5kbGU6bWFrZUhhbmRsZVNoYXBlKCdRdWVzdGlvbicpLFxuY291bnRlckluc3RhbmNlOkluc3RhbmNlSGFuZGxlU2hhcGV9OyRozY9fb25jZS5TaW1wbGVRdWVzdGlvbkRldGFpbHNTaGFwZShTaW1wbGVRdWVzdGlvbkRldGFpbHNTaGFwZSk7XG5cbmhhcmRlbihTaW1wbGVRdWVzdGlvbkRldGFpbHNTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBRdWVzdGlvblNwZWNTaGFwZT1NLm9yKFxuQXBpSW52b2NhdGlvblF1ZXN0aW9uU3BlY1NoYXBlLFxuT2ZmZXJGaWx0ZXJRdWVzdGlvblNwZWNTaGFwZSxcblBhcmFtQ2hhbmdlc1F1ZXN0aW9uU3BlY1NoYXBlLFxuU2ltcGxlUXVlc3Rpb25TcGVjU2hhcGUpOyRozY9fb25jZS5RdWVzdGlvblNwZWNTaGFwZShRdWVzdGlvblNwZWNTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIFBvc2l0aW9uU2hhcGU9TS5vcihcblllc0FwaUludm9jYXRpb25Qb3NpdGlvblNoYXBlLFxuTm9BcGlJbnZvY2F0aW9uUG9zaXRpb25TaGFwZSxcblllc09mZmVyRmlsdGVyUG9zaXRpb25TaGFwZSxcbk5vT2ZmZXJGaWx0ZXJQb3NpdGlvblNoYXBlLFxuWWVzU2ltcGxlUG9zaXRpb25TaGFwZSxcbk5vU2ltcGxlUG9zaXRpb25TaGFwZSxcblllc1BhcmFtQ2hhbmdlc1Bvc2l0aW9uU2hhcGUsXG5Ob1BhcmFtQ2hhbmdlc1Bvc2l0aW9uU2hhcGUpOyRozY9fb25jZS5Qb3NpdGlvblNoYXBlKFBvc2l0aW9uU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBRdWVzdGlvbkhhbmRsZVNoYXBlPW1ha2VIYW5kbGVTaGFwZSgncXVlc3Rpb24nKTtcblxuLy9cbiRozY9fb25jZS5RdWVzdGlvbkhhbmRsZVNoYXBlKFF1ZXN0aW9uSGFuZGxlU2hhcGUpO2NvbnN0IEludml0YXRpb25TaGFwZT1NLnJlbW90YWJsZSgnSW52aXRhdGlvbicpO1xuXG4vL1xuLy9cbi8vXG4kaM2PX29uY2UuSW52aXRhdGlvblNoYXBlKEludml0YXRpb25TaGFwZSk7Y29uc3QgUXVlc3Rpb25EZXRhaWxzU2hhcGU9TS5vcihcblBhcmFtQ2hhbmdlc1F1ZXN0aW9uRGV0YWlsc1NoYXBlLFxuQXBpSW52b2NhdGlvblF1ZXN0aW9uRGV0YWlsc1NoYXBlLFxuT2ZmZXJGaWx0ZXJRdWVzdGlvbkRldGFpbHNTaGFwZSxcblNpbXBsZVF1ZXN0aW9uRGV0YWlsc1NoYXBlKTskaM2PX29uY2UuUXVlc3Rpb25EZXRhaWxzU2hhcGUoUXVlc3Rpb25EZXRhaWxzU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBFbGVjdG9yYXRlUHVibGljST1NLmludGVyZmFjZSgnQ29tbWl0dGVlIFB1YmxpY0ZhY2V0Jyx7XG5nZXRRdWVzdGlvblN1YnNjcmliZXI6TS5jYWxsKCkucmV0dXJucyhTdWJzY3JpYmVyU2hhcGUpLFxuZ2V0T3BlblF1ZXN0aW9uczpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldE5hbWU6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldEluc3RhbmNlOk0uY2FsbCgpLnJldHVybnMoSW5zdGFuY2VIYW5kbGVTaGFwZSksXG5nZXRRdWVzdGlvbjpNLmNhbGwoUXVlc3Rpb25IYW5kbGVTaGFwZSkucmV0dXJucyhNLnByb21pc2UoKSl9KTskaM2PX29uY2UuRWxlY3RvcmF0ZVB1YmxpY0koRWxlY3RvcmF0ZVB1YmxpY0kpO1xuXG5jb25zdCBFbGVjdG9yYXRlUHVibGljU2hhcGU9TS5yZW1vdGFibGUoJ0VsZWN0b3JhdGVQdWJsaWMnKTtcblxuY29uc3QgICAgICAgIEVsZWN0b3JhdGVDcmVhdG9yST1NLmludGVyZmFjZSgnQ29tbWl0dGVlIEFkbWluRmFjZXQnLHtcbmdldFBvc2VySW52aXRhdGlvbjpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmFkZFF1ZXN0aW9uOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlLFF1ZXN0aW9uU3BlY1NoYXBlKS5yZXR1cm5zKFxuTS5wcm9taXNlKCkpLFxuXG5nZXRWb3Rlckludml0YXRpb25zOk0uY2FsbCgpLnJldHVybnMoTS5hcnJheU9mKE0ucHJvbWlzZSgpKSksXG5nZXRRdWVzdGlvblN1YnNjcmliZXI6TS5jYWxsKCkucmV0dXJucyhTdWJzY3JpYmVyU2hhcGUpLFxuZ2V0UHVibGljRmFjZXQ6TS5jYWxsKCkucmV0dXJucyhFbGVjdG9yYXRlUHVibGljU2hhcGUpfSk7JGjNj19vbmNlLkVsZWN0b3JhdGVDcmVhdG9ySShFbGVjdG9yYXRlQ3JlYXRvckkpO1xuXG5cbmNvbnN0ICAgICAgICBRdWVzdGlvblN0YXRzU2hhcGU9e1xuc3BvaWxlZDpNLm5hdCgpLFxudm90ZXM6TS5uYXQoKSxcbnJlc3VsdHM6TS5hcnJheU9mKHtwb3NpdGlvbjpQb3NpdGlvblNoYXBlLHRvdGFsOk0ubmF0KCl9KX07JGjNj19vbmNlLlF1ZXN0aW9uU3RhdHNTaGFwZShRdWVzdGlvblN0YXRzU2hhcGUpO1xuXG5oYXJkZW4oUXVlc3Rpb25TdGF0c1NoYXBlKTtcblxuY29uc3QgICAgICAgIFF1ZXN0aW9uST1NLmludGVyZmFjZSgnUXVlc3Rpb24nLHtcbmdldFZvdGVDb3VudGVyOk0uY2FsbCgpLnJldHVybnMoSW5zdGFuY2VIYW5kbGVTaGFwZSksXG5nZXREZXRhaWxzOk0uY2FsbCgpLnJldHVybnMoUXVlc3Rpb25EZXRhaWxzU2hhcGUpfSk7JGjNj19vbmNlLlF1ZXN0aW9uSShRdWVzdGlvbkkpO1xuXG5jb25zdCBRdWVzdGlvblNoYXBlPU0ucmVtb3RhYmxlKCdRdWVzdGlvbicpO1xuXG5jb25zdCAgICAgICAgQmluYXJ5Vm90ZUNvdW50ZXJQdWJsaWNJPU0uaW50ZXJmYWNlKFxuJ0JpbmFyeVZvdGVDb3VudGVyIFB1YmxpY0ZhY2V0JyxcbntcbmdldFF1ZXN0aW9uOk0uY2FsbCgpLnJldHVybnMoUXVlc3Rpb25TaGFwZSksXG5pc09wZW46TS5jYWxsKCkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5nZXRPdXRjb21lOk0uY2FsbCgpLnJldHVybnMoTS5lcmVmKE0ucHJvbWlzZSgpKSksXG5nZXRTdGF0czpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldERldGFpbHM6TS5jYWxsKCkucmV0dXJucyhRdWVzdGlvbkRldGFpbHNTaGFwZSksXG5nZXRJbnN0YW5jZTpNLmNhbGwoKS5yZXR1cm5zKEluc3RhbmNlSGFuZGxlU2hhcGUpfSk7JGjNj19vbmNlLkJpbmFyeVZvdGVDb3VudGVyUHVibGljSShCaW5hcnlWb3RlQ291bnRlclB1YmxpY0kpO1xuXG5cblxuY29uc3QgICAgICAgIFZvdGVySGFuZGxlPU0ucmVtb3RhYmxlKCk7JGjNj19vbmNlLlZvdGVySGFuZGxlKFZvdGVySGFuZGxlKTtcbmNvbnN0ICAgICAgICBCaW5hcnlWb3RlQ291bnRlckFkbWluST1NLmludGVyZmFjZShcbidCaW5hcnlWb3RlQ291bnRlciBBZG1pbkZhY2V0JyxcbntcbnN1Ym1pdFZvdGU6TS5jYWxsKFZvdGVySGFuZGxlLE0uYXJyYXlPZihQb3NpdGlvblNoYXBlKSkuXG5vcHRpb25hbChNLm5hdCgpKS5cbnJldHVybnMoe2Nob3NlbjpQb3NpdGlvblNoYXBlLHNoYXJlczpNLm5hdCgpfSl9KTskaM2PX29uY2UuQmluYXJ5Vm90ZUNvdW50ZXJBZG1pbkkoQmluYXJ5Vm90ZUNvdW50ZXJBZG1pbkkpO1xuXG5cblxuY29uc3QgICAgICAgIEJpbmFyeVZvdGVDb3VudGVyQ2xvc2VJPU0uaW50ZXJmYWNlKFxuJ0JpbmFyeVZvdGVDb3VudGVyIENsb3NlRmFjZXQnLFxue1xuY2xvc2VWb3Rpbmc6TS5jYWxsKCkucmV0dXJucygpfSk7JGjNj19vbmNlLkJpbmFyeVZvdGVDb3VudGVyQ2xvc2VJKEJpbmFyeVZvdGVDb3VudGVyQ2xvc2VJKTtcblxuXG5cbmNvbnN0ICAgICAgICBWb3RlQ291bnRlclB1YmxpY0k9TS5pbnRlcmZhY2UoJ1ZvdGVDb3VudGVyIFB1YmxpY0ZhY2V0Jyx7XG5nZXRRdWVzdGlvbjpNLmNhbGwoKS5yZXR1cm5zKFF1ZXN0aW9uU2hhcGUpLFxuaXNPcGVuOk0uY2FsbCgpLnJldHVybnMoTS5ib29sZWFuKCkpLFxuZ2V0T3V0Y29tZTpNLmNhbGwoKS5yZXR1cm5zKE0uZXJlZihNLnByb21pc2UoKSkpLFxuZ2V0U3RhdHM6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXREZXRhaWxzOk0uY2FsbCgpLnJldHVybnMoUXVlc3Rpb25EZXRhaWxzU2hhcGUpLFxuZ2V0SW5zdGFuY2U6TS5jYWxsKCkucmV0dXJucyhJbnN0YW5jZUhhbmRsZVNoYXBlKX0pOyRozY9fb25jZS5Wb3RlQ291bnRlclB1YmxpY0koVm90ZUNvdW50ZXJQdWJsaWNJKTtcblxuXG5jb25zdCAgICAgICAgVm90ZUNvdW50ZXJBZG1pbkk9TS5pbnRlcmZhY2UoJ1ZvdGVDb3VudGVyIEFkbWluRmFjZXQnLHtcbnN1Ym1pdFZvdGU6TS5jYWxsKFZvdGVySGFuZGxlLE0uYXJyYXlPZihQb3NpdGlvblNoYXBlKSkuXG5vcHRpb25hbChNLm5hdCgpKS5cbnJldHVybnMoe2Nob3NlbjpNLmFycmF5T2YoUG9zaXRpb25TaGFwZSksc2hhcmVzOk0ubmF0KCl9KX0pOyRozY9fb25jZS5Wb3RlQ291bnRlckFkbWluSShWb3RlQ291bnRlckFkbWluSSk7XG5cblxuY29uc3QgICAgICAgIFZvdGVDb3VudGVyQ2xvc2VJPU0uaW50ZXJmYWNlKCdWb3RlQ291bnRlciBDbG9zZUZhY2V0Jyx7XG5jbG9zZVZvdGluZzpNLmNhbGwoKS5yZXR1cm5zKCl9KTskaM2PX29uY2UuVm90ZUNvdW50ZXJDbG9zZUkoVm90ZUNvdW50ZXJDbG9zZUkpO1xuXG5cbmNvbnN0ICAgICAgICBHb3Zlcm5vckZhY2V0U2hhcGU9e1xuZ2V0UGFyYW1NZ3JSZXRyaWV2ZXI6TS5jYWxsKCkucmV0dXJucyhNLnJlbW90YWJsZSgncGFyYW1SZXRyaWV2ZXInKSksXG5nZXRJbnZpdGF0aW9uOk0uY2FsbCgpLnJldHVybnMoSW52aXRhdGlvblNoYXBlKSxcbmdldExpbWl0ZWRDcmVhdG9yRmFjZXQ6TS5jYWxsKCkucmV0dXJucyhNLnJlbW90YWJsZSgpKSxcbmdldEdvdmVybmVkQXBpczpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCdnb3Zlcm5lZEFQSXMnKSksXG5nZXRHb3Zlcm5lZEFwaU5hbWVzOk0uY2FsbCgpLnJldHVybnMoTS5hcnJheU9mKE0uc3RyaW5nKCkpKSxcbnNldE9mZmVyRmlsdGVyOk0uY2FsbChNLmFycmF5T2YoTS5zdHJpbmcoKSkpLnJldHVybnMoTS5wcm9taXNlKCkpfTskaM2PX29uY2UuR292ZXJub3JGYWNldFNoYXBlKEdvdmVybm9yRmFjZXRTaGFwZSk7XG5cbmhhcmRlbihHb3Zlcm5vckZhY2V0U2hhcGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ2hvaWNlTWV0aG9kU2hhcGUiOlsiQ2hvaWNlTWV0aG9kU2hhcGUiXSwiUXVvcnVtUnVsZVNoYXBlIjpbIlF1b3J1bVJ1bGVTaGFwZSJdLCJFbGVjdGlvblR5cGVTaGFwZSI6WyJFbGVjdGlvblR5cGVTaGFwZSJdLCJDbG9zaW5nUnVsZVNoYXBlIjpbIkNsb3NpbmdSdWxlU2hhcGUiXSwiWWVzT2ZmZXJGaWx0ZXJQb3NpdGlvblNoYXBlIjpbIlllc09mZmVyRmlsdGVyUG9zaXRpb25TaGFwZSJdLCJOb09mZmVyRmlsdGVyUG9zaXRpb25TaGFwZSI6WyJOb09mZmVyRmlsdGVyUG9zaXRpb25TaGFwZSJdLCJPZmZlckZpbHRlclBvc2l0aW9uc1NoYXBlIjpbIk9mZmVyRmlsdGVyUG9zaXRpb25zU2hhcGUiXSwiT2ZmZXJGaWx0ZXJJc3N1ZVNoYXBlIjpbIk9mZmVyRmlsdGVySXNzdWVTaGFwZSJdLCJPZmZlckZpbHRlclF1ZXN0aW9uU3BlY1NoYXBlIjpbIk9mZmVyRmlsdGVyUXVlc3Rpb25TcGVjU2hhcGUiXSwiT2ZmZXJGaWx0ZXJRdWVzdGlvbkRldGFpbHNTaGFwZSI6WyJPZmZlckZpbHRlclF1ZXN0aW9uRGV0YWlsc1NoYXBlIl0sIlBhcmFtQ2hhbmdlc1NwZWNTaGFwZSI6WyJQYXJhbUNoYW5nZXNTcGVjU2hhcGUiXSwiWWVzUGFyYW1DaGFuZ2VzUG9zaXRpb25TaGFwZSI6WyJZZXNQYXJhbUNoYW5nZXNQb3NpdGlvblNoYXBlIl0sIk5vUGFyYW1DaGFuZ2VzUG9zaXRpb25TaGFwZSI6WyJOb1BhcmFtQ2hhbmdlc1Bvc2l0aW9uU2hhcGUiXSwiUGFyYW1DaGFuZ2VzUG9zaXRpb25zU2hhcGUiOlsiUGFyYW1DaGFuZ2VzUG9zaXRpb25zU2hhcGUiXSwiUGFyYW1QYXRoU2hhcGUiOlsiUGFyYW1QYXRoU2hhcGUiXSwiUGFyYW1DaGFuZ2VzSXNzdWVTaGFwZSI6WyJQYXJhbUNoYW5nZXNJc3N1ZVNoYXBlIl0sIlBhcmFtQ2hhbmdlc1F1ZXN0aW9uU3BlY1NoYXBlIjpbIlBhcmFtQ2hhbmdlc1F1ZXN0aW9uU3BlY1NoYXBlIl0sIlBhcmFtQ2hhbmdlc1F1ZXN0aW9uRGV0YWlsc1NoYXBlIjpbIlBhcmFtQ2hhbmdlc1F1ZXN0aW9uRGV0YWlsc1NoYXBlIl0sIlllc0FwaUludm9jYXRpb25Qb3NpdGlvblNoYXBlIjpbIlllc0FwaUludm9jYXRpb25Qb3NpdGlvblNoYXBlIl0sIk5vQXBpSW52b2NhdGlvblBvc2l0aW9uU2hhcGUiOlsiTm9BcGlJbnZvY2F0aW9uUG9zaXRpb25TaGFwZSJdLCJBcGlJbnZvY2F0aW9uUG9zaXRpb25zU2hhcGUiOlsiQXBpSW52b2NhdGlvblBvc2l0aW9uc1NoYXBlIl0sIkFwaUludm9jYXRpb25RdWVzdGlvblNwZWNTaGFwZSI6WyJBcGlJbnZvY2F0aW9uUXVlc3Rpb25TcGVjU2hhcGUiXSwiQXBpSW52b2NhdGlvblF1ZXN0aW9uRGV0YWlsc1NoYXBlIjpbIkFwaUludm9jYXRpb25RdWVzdGlvbkRldGFpbHNTaGFwZSJdLCJZZXNTaW1wbGVQb3NpdGlvblNoYXBlIjpbIlllc1NpbXBsZVBvc2l0aW9uU2hhcGUiXSwiTm9TaW1wbGVQb3NpdGlvblNoYXBlIjpbIk5vU2ltcGxlUG9zaXRpb25TaGFwZSJdLCJTaW1wbGVQb3NpdGlvbnNTaGFwZSI6WyJTaW1wbGVQb3NpdGlvbnNTaGFwZSJdLCJTaW1wbGVJc3N1ZVNoYXBlIjpbIlNpbXBsZUlzc3VlU2hhcGUiXSwiU2ltcGxlUXVlc3Rpb25TcGVjU2hhcGUiOlsiU2ltcGxlUXVlc3Rpb25TcGVjU2hhcGUiXSwiU2ltcGxlUXVlc3Rpb25EZXRhaWxzU2hhcGUiOlsiU2ltcGxlUXVlc3Rpb25EZXRhaWxzU2hhcGUiXSwiUXVlc3Rpb25TcGVjU2hhcGUiOlsiUXVlc3Rpb25TcGVjU2hhcGUiXSwiUG9zaXRpb25TaGFwZSI6WyJQb3NpdGlvblNoYXBlIl0sIlF1ZXN0aW9uSGFuZGxlU2hhcGUiOlsiUXVlc3Rpb25IYW5kbGVTaGFwZSJdLCJJbnZpdGF0aW9uU2hhcGUiOlsiSW52aXRhdGlvblNoYXBlIl0sIlF1ZXN0aW9uRGV0YWlsc1NoYXBlIjpbIlF1ZXN0aW9uRGV0YWlsc1NoYXBlIl0sIkVsZWN0b3JhdGVQdWJsaWNJIjpbIkVsZWN0b3JhdGVQdWJsaWNJIl0sIkVsZWN0b3JhdGVDcmVhdG9ySSI6WyJFbGVjdG9yYXRlQ3JlYXRvckkiXSwiUXVlc3Rpb25TdGF0c1NoYXBlIjpbIlF1ZXN0aW9uU3RhdHNTaGFwZSJdLCJRdWVzdGlvbkkiOlsiUXVlc3Rpb25JIl0sIkJpbmFyeVZvdGVDb3VudGVyUHVibGljSSI6WyJCaW5hcnlWb3RlQ291bnRlclB1YmxpY0kiXSwiVm90ZXJIYW5kbGUiOlsiVm90ZXJIYW5kbGUiXSwiQmluYXJ5Vm90ZUNvdW50ZXJBZG1pbkkiOlsiQmluYXJ5Vm90ZUNvdW50ZXJBZG1pbkkiXSwiQmluYXJ5Vm90ZUNvdW50ZXJDbG9zZUkiOlsiQmluYXJ5Vm90ZUNvdW50ZXJDbG9zZUkiXSwiVm90ZUNvdW50ZXJQdWJsaWNJIjpbIlZvdGVDb3VudGVyUHVibGljSSJdLCJWb3RlQ291bnRlckFkbWluSSI6WyJWb3RlQ291bnRlckFkbWluSSJdLCJWb3RlQ291bnRlckNsb3NlSSI6WyJWb3RlQ291bnRlckNsb3NlSSJdLCJHb3Zlcm5vckZhY2V0U2hhcGUiOlsiR292ZXJub3JGYWNldFNoYXBlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGZqVKpDCQAAQwkAAEIAAABAYWdvcmljL2dvdmVybmFuY2UtdjAuMTAuNC1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3ZhbGlkYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCJdLCJleHBvcnRzIjpbImFzc2VydENvbnRyYWN0RWxlY3RvcmF0ZSIsImFzc2VydENvbnRyYWN0R292ZXJuYW5jZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsRTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvbnRyYWN0R292ZXJuYW5jZT1hc3luYyhcbnpvZSxcbmFsbGVnZWRHb3Zlcm5lZCxcbmFsbGVnZWRHb3Zlcm5vcixcbmNvbnRyYWN0R292ZXJub3JJbnN0YWxsYXRpb24pPT5cbntcbmNvbnN0IGFsbGVnZWRHb3Zlcm5vclBGPUUoem9lKS5nZXRQdWJsaWNGYWNldChhbGxlZ2VkR292ZXJub3IpO1xuY29uc3QgcmVhbEdvdmVybmVkUD1FKGFsbGVnZWRHb3Zlcm5vclBGKS5nZXRHb3Zlcm5lZENvbnRyYWN0KCk7XG5jb25zdCBhbGxlZ2VkR292ZXJuZWRUZXJtc1A9RSh6b2UpLmdldFRlcm1zKGFsbGVnZWRHb3Zlcm5lZCk7XG5cbmNvbnN0W3tlbGVjdGlvbk1hbmFnZXI6cmVhbEdvdmVybm9ySW5zdGFuY2V9LHJlYWxHb3Zlcm5lZEluc3RhbmNlXT1cbmF3YWl0IFByb21pc2UuYWxsKFthbGxlZ2VkR292ZXJuZWRUZXJtc1AscmVhbEdvdmVybmVkUF0pO1xuXG5hc3NlcnQoXG5hbGxlZ2VkR292ZXJub3I9PT1yZWFsR292ZXJub3JJbnN0YW5jZSxcbidUaGUgYWxsZWdlZCBnb3Zlcm5vciBkaWQgbm90IG1hdGNoIHRoZSBnb3Zlcm5vciByZXRyaWV2ZWQgZnJvbSB0aGUgZ292ZXJuZWQgY29udHJhY3QnKTtcblxuXG5hc3NlcnQoXG5hbGxlZ2VkR292ZXJuZWQ9PT1yZWFsR292ZXJuZWRJbnN0YW5jZSxcbidUaGUgYWxsZWdlZCBnb3Zlcm5lZCBkaWQgbm90IG1hdGNoIHRoZSBnb3Zlcm5lZCBjb250cmFjdCByZXRyaWV2ZWQgZnJvbSB0aGUgZ292ZXJub3InKTtcblxuXG5jb25zdCBnb3Zlcm5vckluc3RhbGxhdGlvbkZyb21Hb3Zlcm5lZD1cbmF3YWl0IEUoem9lKS5nZXRJbnN0YWxsYXRpb25Gb3JJbnN0YW5jZShyZWFsR292ZXJub3JJbnN0YW5jZSk7XG5cbmFzc2VydChcbmdvdmVybm9ySW5zdGFsbGF0aW9uRnJvbUdvdmVybmVkPT09Y29udHJhY3RHb3Zlcm5vckluc3RhbGxhdGlvbixcbidUaGUgZ292ZXJuZWQgY29udHJhY3QgaXMgbm90IGdvdmVybmVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoZSBwcm92aWRlZCBpbnN0YWxsYXRpb24uJyk7XG5cblxucmV0dXJue2dvdmVybm9yOnJlYWxHb3Zlcm5vckluc3RhbmNlLGdvdmVybmVkOnJlYWxHb3Zlcm5lZEluc3RhbmNlfTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmFzc2VydENvbnRyYWN0R292ZXJuYW5jZShhc3NlcnRDb250cmFjdEdvdmVybmFuY2UpO1xuY29uc3QgYXNzZXJ0Q29udHJhY3RFbGVjdG9yYXRlPWFzeW5jKFxuem9lLFxuYWxsZWdlZEdvdmVybm9yLFxuYWxsZWdlZEVsZWN0b3JhdGUpPT5cbntcbmNvbnN0IGFsbGVnZWRHb3Zlcm5vclBGPUUoem9lKS5nZXRQdWJsaWNGYWNldChhbGxlZ2VkR292ZXJub3IpO1xuY29uc3QgZWxlY3RvcmF0ZT1hd2FpdCBFKGFsbGVnZWRHb3Zlcm5vclBGKS5nZXRFbGVjdG9yYXRlKCk7XG5lbGVjdG9yYXRlPT09YWxsZWdlZEVsZWN0b3JhdGV8fFxuRmFpbCBgVGhlIGFsbGVnZWRFbGVjdG9yYXRlIGRpZG4ndCBtYXRjaCB0aGUgYWN0dWFsICR7cShlbGVjdG9yYXRlKX1gO1xuXG5yZXR1cm4gdHJ1ZTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb250cmFjdEVsZWN0b3JhdGUoYXNzZXJ0Q29udHJhY3RFbGVjdG9yYXRlKTtcblxuaGFyZGVuKGFzc2VydENvbnRyYWN0R292ZXJuYW5jZSk7XG5oYXJkZW4oYXNzZXJ0Q29udHJhY3RFbGVjdG9yYXRlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydENvbnRyYWN0R292ZXJuYW5jZSI6WyJhc3NlcnRDb250cmFjdEdvdmVybmFuY2UiXSwiYXNzZXJ0Q29udHJhY3RFbGVjdG9yYXRlIjpbImFzc2VydENvbnRyYWN0RWxlY3RvcmF0ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABW0VcR6RkAAOkZAAA9AAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jYWxsYmFjay5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJjYWxsRSIsImNhbGxTeW5jIiwiaXNDYWxsYmFjayIsIm1ha2VGdW5jdGlvbkNhbGxiYWNrIiwibWFrZU1ldGhvZENhbGxiYWNrIiwibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIiwibWFrZVN5bmNNZXRob2RDYWxsYmFjayIsInByZXBhcmVBdHRlbnVhdG9yIiwicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsbWFrZUVycm9yLHEsRSxpc09iamVjdCxpc1Bhc3NhYmxlU3ltYm9sLGdldEludGVyZmFjZU1ldGhvZEtleXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiaXNQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChpc1Bhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImdldEludGVyZmFjZU1ldGhvZEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtmcm9tRW50cmllc309T2JqZWN0O1xuXG5jb25zdHtvd25LZXlzOnJhd093bktleXN9PVJlZmxlY3Q7XG5jb25zdCBvd25LZXlzPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJhd093bktleXM7XG5cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzUHJvcGVydHlLZXk9KGtleSk9PntcbnN3aXRjaCh0eXBlb2Yga2V5KXtcbmNhc2Unc3RyaW5nJzpcbmNhc2UnbnVtYmVyJzpcbmNhc2Unc3ltYm9sJzpcbnJldHVybiB0cnVlO1xuZGVmYXVsdDpcbnJldHVybiBmYWxzZTt9XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2FsbFN5bmM9KGNhbGxiYWNrLC4uLmFyZ3MpPT57XG5jb25zdHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZH09Y2FsbGJhY2s7XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkKXtcbnJldHVybiB0YXJnZXQoLi4uYm91bmQsLi4uYXJncyk7XG4gfVxucmV0dXJuIHRhcmdldFttZXRob2ROYW1lXSguLi5ib3VuZCwuLi5hcmdzKTtcbiB9OyRozY9fb25jZS5jYWxsU3luYyhjYWxsU3luYyk7XG5oYXJkZW4oY2FsbFN5bmMpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2FsbEU9KGNhbGxiYWNrLC4uLmFyZ3MpPT57XG5jb25zdHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZH09Y2FsbGJhY2s7XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkKXtcbnJldHVybiBFKHRhcmdldCkoLi4uYm91bmQsLi4uYXJncyk7XG4gfVxucmV0dXJuIEUodGFyZ2V0KVttZXRob2ROYW1lXSguLi5ib3VuZCwuLi5hcmdzKTtcbiB9OyRozY9fb25jZS5jYWxsRShjYWxsRSk7XG5oYXJkZW4oY2FsbEUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjaz0odGFyZ2V0LC4uLmJvdW5kKT0+e1xudHlwZW9mIHRhcmdldD09PSdmdW5jdGlvbid8fFxuRmFpbCBgc3luYyBmdW5jdGlvbiBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhIGZ1bmN0aW9uOiAke3RhcmdldH1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsYm91bmQsaXNTeW5jOnRydWV9KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICovY2IpO1xuIH07JGjNj19vbmNlLm1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayhtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUZ1bmN0aW9uQ2FsbGJhY2s9KHRhcmdldCwuLi5ib3VuZCk9PntcbmlzT2JqZWN0KHRhcmdldCl8fFxuRmFpbCBgZnVuY3Rpb24gY2FsbGJhY2sgdGFyZ2V0IG11c3QgYmUgYSBmdW5jdGlvbiBwcmVzZW5jZTogJHt0YXJnZXR9YDtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNiPWhhcmRlbih7dGFyZ2V0LGJvdW5kfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICovY2IpO1xuIH07JGjNj19vbmNlLm1ha2VGdW5jdGlvbkNhbGxiYWNrKG1ha2VGdW5jdGlvbkNhbGxiYWNrKTtcbmhhcmRlbihtYWtlRnVuY3Rpb25DYWxsYmFjayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3luY01ldGhvZENhbGxiYWNrPSh0YXJnZXQsbWV0aG9kTmFtZSwuLi5ib3VuZCk9PntcbmlzT2JqZWN0KHRhcmdldCl8fFxuRmFpbCBgc3luYyBtZXRob2QgY2FsbGJhY2sgdGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0OiAke3RhcmdldH1gO1xudHlwZW9mIG1ldGhvZE5hbWU9PT0nc3RyaW5nJ3x8XG5pc1Bhc3NhYmxlU3ltYm9sKG1ldGhvZE5hbWUpfHxcbkZhaWwgYG1ldGhvZCBuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgcGFzc2FibGUgc3ltYm9sOiAke21ldGhvZE5hbWV9YDtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNiPWhhcmRlbih7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmQsaXNTeW5jOnRydWV9KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICovY2IpO1xuIH07JGjNj19vbmNlLm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2sobWFrZVN5bmNNZXRob2RDYWxsYmFjayk7XG5oYXJkZW4obWFrZVN5bmNNZXRob2RDYWxsYmFjayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWV0aG9kQ2FsbGJhY2s9KHRhcmdldCxtZXRob2ROYW1lLC4uLmJvdW5kKT0+e1xuaXNPYmplY3QodGFyZ2V0KXx8RmFpbCBgbWV0aG9kIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGFuIG9iamVjdDogJHt0YXJnZXR9YDtcbnR5cGVvZiBtZXRob2ROYW1lPT09J3N0cmluZyd8fFxuaXNQYXNzYWJsZVN5bWJvbChtZXRob2ROYW1lKXx8XG5GYWlsIGBtZXRob2QgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIHBhc3NhYmxlIHN5bWJvbDogJHttZXRob2ROYW1lfWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICovY2IpO1xuIH07JGjNj19vbmNlLm1ha2VNZXRob2RDYWxsYmFjayhtYWtlTWV0aG9kQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VNZXRob2RDYWxsYmFjayk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDYWxsYmFjaz0oY2FsbGJhY2spPT57XG5pZighaXNPYmplY3QoY2FsbGJhY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZH09Y2FsbGJhY2s7XG5yZXR1cm4oXG5pc09iamVjdCh0YXJnZXQpJiYoXG5tZXRob2ROYW1lPT09dW5kZWZpbmVkfHxcbnR5cGVvZiBtZXRob2ROYW1lPT09J3N0cmluZyd8fFxuaXNQYXNzYWJsZVN5bWJvbChtZXRob2ROYW1lKSkmJlxuQXJyYXkuaXNBcnJheShib3VuZCkpO1xuXG4gfTskaM2PX29uY2UuaXNDYWxsYmFjayhpc0NhbGxiYWNrKTtcbmhhcmRlbihpc0NhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVBdHRlbnVhdG9yPShcbnpvbmUsXG5tZXRob2ROYW1lcyxcbntpbnRlcmZhY2VHdWFyZCx0YWc9J0F0dGVudWF0b3InfT17fSk9Plxue1xuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWV0aG9kcz0vKiAgICAgICAgICAgICAgICAgICovXG5mcm9tRW50cmllcyhcbm1ldGhvZE5hbWVzLm1hcCgoa2V5KT0+e1xuLy9cbmlmKCFpc1Byb3BlcnR5S2V5KGtleSkpe1xudGhyb3cgRmFpbCBga2V5ICR7cShrZXkpfSBpcyBub3QgYSBQcm9wZXJ0eUtleWA7XG4gfVxuXG5jb25zdCBtPS8qICAgICAgICAgICAgICAgICAgKi97XG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAqL1xuW2tleV0oLi4uYXJncyl7XG4vL1xuY29uc3QgY2I9dGhpcy5zdGF0ZS5jYnNba2V5XTtcbmlmKCFjYil7XG5jb25zdCBlcnI9bWFrZUVycm9yKCBgdW5pbXBsZW1lbnRlZCAke3EodGFnKX0gbWV0aG9kICR7cShrZXkpfWApO1xuaWYodGhpcy5zdGF0ZS5pc1N5bmMpe1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuIH1cbmlmKGNiLmlzU3luYyl7XG5yZXR1cm4gY2FsbFN5bmMoY2IsLi4uYXJncyk7XG4gfVxucmV0dXJuIGNhbGxFKGNiLC4uLmFyZ3MpO1xuIH19W1xua2V5XTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgKi9ba2V5LG1dKTtcbiB9KSk7XG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlQXR0ZW51YXRvcj16b25lLmV4b0NsYXNzKFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG4vKlxuXG5cblxuXG4gICAgICovXG4oe1xudGFyZ2V0PW51bGwsXG5pc1N5bmM9ZmFsc2UsXG5vdmVycmlkZXM9LyogICAgICAgICAgICAgICAgICAgICove319KT0+XG57XG5jb25zdCBjYnM9LyogICAgICAgICAgICAgICAgICAgICove307XG5cbmNvbnN0IHJlbWFpbmluZz1uZXcgU2V0KG1ldGhvZE5hbWVzKTtcbmZvcihjb25zdCBrZXkgb2Ygb3duS2V5cyhvdmVycmlkZXMpKXtcbnJlbWFpbmluZy5oYXMoa2V5KXx8XG5GYWlsIGAke3EodGFnKX0gb3ZlcnJpZGVzWyR7cShrZXkpfV0gbm90IGFsbG93ZWQgYnkgbWV0aG9kTmFtZXNgO1xuXG5yZW1haW5pbmcuZGVsZXRlKGtleSk7XG5jb25zdCBjYj1vdmVycmlkZXNba2V5XTtcbmNiPT1udWxsfHxcbmlzQ2FsbGJhY2soY2IpfHxcbkZhaWwgYCR7cSh0YWcpfSBvdmVycmlkZXNbJHtxKGtleSl9XSBpcyBub3QgYSBjYWxsYmFjazsgZ290ICR7Y2J9YDtcbmNic1trZXldPWNiO1xuIH1cbmZvcihjb25zdCBrZXkgb2YgcmVtYWluaW5nKXtcbmlmKGlzU3luYyl7XG5jYnNba2V5XT1tYWtlU3luY01ldGhvZENhbGxiYWNrKHRhcmdldCxrZXkpO1xuIH1lbHNle1xuY2JzW2tleV09bWFrZU1ldGhvZENhbGxiYWNrKHRhcmdldCxrZXkpO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtjYnMsaXNTeW5jfSk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgKi9tZXRob2RzKTtcblxucmV0dXJuIG1ha2VBdHRlbnVhdG9yO1xuIH07JGjNj19vbmNlLnByZXBhcmVBdHRlbnVhdG9yKHByZXBhcmVBdHRlbnVhdG9yKTtcbmhhcmRlbihwcmVwYXJlQXR0ZW51YXRvcik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcj0oem9uZSxpbnRlcmZhY2VHdWFyZCxvcHRzPXt9KT0+e1xuY29uc3QgbWV0aG9kTmFtZXM9Z2V0SW50ZXJmYWNlTWV0aG9kS2V5cyhpbnRlcmZhY2VHdWFyZCk7XG5jb25zdCBtYWtlQXR0ZW51YXRvcj1wcmVwYXJlQXR0ZW51YXRvcih6b25lLG1ldGhvZE5hbWVzLHtcbi4uLm9wdHMsXG5pbnRlcmZhY2VHdWFyZH0pO1xuXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9tYWtlQXR0ZW51YXRvcik7XG4gfTskaM2PX29uY2UucHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yKHByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcik7XG5oYXJkZW4ocHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImNhbGxTeW5jIjpbImNhbGxTeW5jIl0sImNhbGxFIjpbImNhbGxFIl0sIm1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayI6WyJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siXSwibWFrZUZ1bmN0aW9uQ2FsbGJhY2siOlsibWFrZUZ1bmN0aW9uQ2FsbGJhY2siXSwibWFrZVN5bmNNZXRob2RDYWxsYmFjayI6WyJtYWtlU3luY01ldGhvZENhbGxiYWNrIl0sIm1ha2VNZXRob2RDYWxsYmFjayI6WyJtYWtlTWV0aG9kQ2FsbGJhY2siXSwiaXNDYWxsYmFjayI6WyJpc0NhbGxiYWNrIl0sInByZXBhcmVBdHRlbnVhdG9yIjpbInByZXBhcmVBdHRlbnVhdG9yIl0sInByZXBhcmVHdWFyZGVkQXR0ZW51YXRvciI6WyJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMgP9Gc0FAADNBQAAOwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29uZmlnLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJCcmlkZ2VJZCIsIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIiwiVkJhbmtBY2NvdW50IiwiV2FsbGV0TmFtZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEJyaWRnZUlkPS8qICAgICAgICAgICAgICAgICove1xuQkFOSzonYmFuaycsXG5DT1JFOidjb3JlJyxcbkRJQkM6J2RpYmMnLFxuU1RPUkFHRTonc3RvcmFnZScsXG5QUk9WSVNJT046J3Byb3Zpc2lvbicsXG5QUk9WSVNJT05fU01BUlRfV0FMTEVUOidwcm92aXNpb25XYWxsZXQnLFxuVkxPQ0FMQ0hBSU46J3Zsb2NhbGNoYWluJyxcblZUUkFOU0ZFUjondnRyYW5zZmVyJyxcbldBTExFVDond2FsbGV0J307JGjNj19vbmNlLkJyaWRnZUlkKEJyaWRnZUlkKTtcblxuaGFyZGVuKEJyaWRnZUlkKTtcblxuY29uc3QgICAgICAgIENvc21vc0luaXRLZXlUb0JyaWRnZUlkPXtcbnZiYW5rUG9ydDpCcmlkZ2VJZC5CQU5LLFxudmliY1BvcnQ6QnJpZGdlSWQuRElCQ307JGjNj19vbmNlLkNvc21vc0luaXRLZXlUb0JyaWRnZUlkKENvc21vc0luaXRLZXlUb0JyaWRnZUlkKTtcblxuXG5jb25zdCAgICAgICAgV2FsbGV0TmFtZT0vKiAgICAgICAgICAgICAgICAqL3tcbmRlcG9zaXRGYWNldDonZGVwb3NpdEZhY2V0J307JGjNj19vbmNlLldhbGxldE5hbWUoV2FsbGV0TmFtZSk7XG5cbmhhcmRlbihXYWxsZXROYW1lKTtcblxuLy9cbmNvbnN0ICAgICAgICBWQmFua0FjY291bnQ9LyogICAgICAgICAgICAgICAgKi97XG5yZXNlcnZlOntcbm1vZHVsZTondmJhbmsvcmVzZXJ2ZScsXG5hZGRyZXNzOidhZ29yaWMxYWUwbG10emxncmNubGE5eGprcGFhcnE1ZDVkZmV6NjNoM251Y2wnfSxcblxucHJvdmlzaW9uOntcbm1vZHVsZTondmJhbmsvcHJvdmlzaW9uJyxcbmFkZHJlc3M6J2Fnb3JpYzFtZWd6eXRnNjVjeXJnenM2ZnZ6eGdyY3F2d3dsN3VncHQ2MjM0Nid9fTskaM2PX29uY2UuVkJhbmtBY2NvdW50KFZCYW5rQWNjb3VudCk7XG5cblxuaGFyZGVuKFZCYW5rQWNjb3VudCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJCcmlkZ2VJZCI6WyJCcmlkZ2VJZCJdLCJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCI6WyJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCJdLCJXYWxsZXROYW1lIjpbIldhbGxldE5hbWUiXSwiVkJhbmtBY2NvdW50IjpbIlZCYW5rQWNjb3VudCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACcqLSXSAQAAEgEAAA6AAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9kZWJ1Zy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVRyYWNlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxubGV0IGRlYnVnSW5zdGFuY2U9MTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVHJhY2VyPShuYW1lLGVuYWJsZT10cnVlKT0+e1xuZGVidWdJbnN0YW5jZSs9MTtcbmxldCBkZWJ1Z0NvdW50PTE7XG5jb25zdCBrZXk9IGAtLS0tLSAke25hbWV9LiR7ZGVidWdJbnN0YW5jZX0gYDtcbi8vXG5zd2l0Y2goZW5hYmxlKXtcbmNhc2UgZmFsc2U6e1xuY29uc3QgbG9nRGlzYWJsZWQ9KC4uLl9hcmdzKT0+eyB9O1xucmV0dXJuIGxvZ0Rpc2FibGVkO1xuIH1cbmNhc2UndmVyYm9zZSc6e1xuY29uc3QgaW5mb1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsLi4uYXJncyk7XG4gfWVsc2V7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsb3B0TG9nLC4uLmFyZ3MpO1xuIH1cbiB9O1xucmV0dXJuIGluZm9UaWNrO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgZGVidWdUaWNrPShvcHRMb2csLi4uYXJncyk9PntcbmlmKG9wdExvZy5sb2cpe1xub3B0TG9nLmxvZyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gZGVidWdUaWNrO1xuIH19XG5cbiB9OyRozY9fb25jZS5tYWtlVHJhY2VyKG1ha2VUcmFjZXIpO1xuaGFyZGVuKG1ha2VUcmFjZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYWNlciI6WyJtYWtlVHJhY2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAALV4MKOAgAAjgIAADsAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2Vycm9ycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJOb25OdWxsaXNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIE5vbk51bGxpc2g9KHZhbCxvcHREZXRhaWxzPSBgdW5leHBlY3RlZCAke3EodmFsKX1gKT0+e1xuaWYodmFsIT1udWxsKXtcbi8vXG5yZXR1cm4gdmFsO1xuIH1cbmFzc2VydC5mYWlsKG9wdERldGFpbHMpO1xuIH07JGjNj19vbmNlLk5vbk51bGxpc2goTm9uTnVsbGlzaCk7XG5oYXJkZW4oTm9uTnVsbGlzaCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJOb25OdWxsaXNoIjpbIk5vbk51bGxpc2giXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAH/arhAsFAAALBQAAOgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9jb25maWcuanMiLCIuL2RlYnVnLmpzIiwiLi9lcnJvcnMuanMiLCIuL2pzLXV0aWxzLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3Nlcy11dGlscy5qcyIsIi4vdHlwZUNoZWNrLmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIl0sImV4cG9ydHMiOltudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL2NvbmZpZy5qcyIsIi4vZGVidWcuanMiLCIuL2Vycm9ycy5qcyIsIi4vanMtdXRpbHMuanMiLCIuL21ldGhvZC10b29scy5qcyIsIi4vc2VzLXV0aWxzLmpzIiwiLi90eXBlQ2hlY2suanMiLCIuL3R5cGVHdWFyZHMuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2NvbmZpZy5qc1wiLCBbXV0sW1wiLi9kZWJ1Zy5qc1wiLCBbXV0sW1wiLi9lcnJvcnMuanNcIiwgW11dLFtcIi4vanMtdXRpbHMuanNcIiwgW11dLFtcIi4vbWV0aG9kLXRvb2xzLmpzXCIsIFtdXSxbXCIuL3Nlcy11dGlscy5qc1wiLCBbXV0sW1wiLi90eXBlQ2hlY2suanNcIiwgW11dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOltbIm9iamVjdE1hcCIsIm9iamVjdE1hcCJdXSwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6W1sib2JqZWN0TWV0YU1hcCIsIm9iamVjdE1ldGFNYXAiXV0sIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjpbWyJmcm9tVW5pcXVlRW50cmllcyIsImZyb21VbmlxdWVFbnRyaWVzIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADML6bVHwcAAB8HAAA9AAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9qcy11dGlscy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVlcENvcHlKc29uYWJsZSIsImRlZXBNYXBPYmplY3QiLCJtYWtlTWVhc3VyZVNlY29uZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcENvcHlKc29uYWJsZT0odmFsdWUpPT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZXBDb3B5SnNvbmFibGUoZGVlcENvcHlKc29uYWJsZSk7XG5jb25zdCBkZWVwTWFwT2JqZWN0SW50ZXJuYWw9KHZhbHVlLG5hbWUsY29udGFpbmVyLG1hcHBlcik9PntcbmlmKGNvbnRhaW5lciYmdHlwZW9mIG5hbWU9PT0nc3RyaW5nJyl7XG5jb25zdCBtYXBwZWQ9bWFwcGVyKHZhbHVlLG5hbWUsY29udGFpbmVyKTtcbmlmKG1hcHBlZCE9PXZhbHVlKXtcbnJldHVybiBtYXBwZWQ7XG4gfVxuIH1cblxuaWYodHlwZW9mIHZhbHVlIT09J29iamVjdCd8fCF2YWx1ZSl7XG5yZXR1cm4gdmFsdWU7XG4gfVxuXG5sZXQgd2FzTWFwcGVkPWZhbHNlO1xuY29uc3QgbWFwcGVkRW50cmllcz1PYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChbaW5uZXJOYW1lLGlubmVyVmFsdWVdKT0+e1xuY29uc3QgbWFwcGVkSW5uZXJWYWx1ZT1kZWVwTWFwT2JqZWN0SW50ZXJuYWwoXG5pbm5lclZhbHVlLFxuaW5uZXJOYW1lLFxudmFsdWUsXG5tYXBwZXIpO1xuXG53YXNNYXBwZWR8fD1tYXBwZWRJbm5lclZhbHVlIT09aW5uZXJWYWx1ZTtcbnJldHVybltpbm5lck5hbWUsbWFwcGVkSW5uZXJWYWx1ZV07XG4gfSk7XG5cbnJldHVybiB3YXNNYXBwZWQ/T2JqZWN0LmZyb21FbnRyaWVzKG1hcHBlZEVudHJpZXMpOnZhbHVlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcE1hcE9iamVjdD0ob2JqLG1hcHBlcik9PlxuZGVlcE1hcE9iamVjdEludGVybmFsKG9iaix1bmRlZmluZWQsdW5kZWZpbmVkLG1hcHBlcik7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZXBNYXBPYmplY3QoZGVlcE1hcE9iamVjdCk7XG5jb25zdCAgICAgICAgbWFrZU1lYXN1cmVTZWNvbmRzPShjdXJyZW50VGltZU1pbGxpc2VjKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBtZWFzdXJlU2Vjb25kcz1hc3luYyhmbik9PntcbmNvbnN0IHQwPWN1cnJlbnRUaW1lTWlsbGlzZWMoKTtcbmNvbnN0IHJlc3VsdD1hd2FpdCBmbigpO1xuY29uc3QgZHVyYXRpb25NaWxsaXNlYz1jdXJyZW50VGltZU1pbGxpc2VjKCktdDA7XG5yZXR1cm57cmVzdWx0LGR1cmF0aW9uOmR1cmF0aW9uTWlsbGlzZWMvMTAwMH07XG4gfTtcbnJldHVybiBtZWFzdXJlU2Vjb25kcztcbiB9OyRozY9fb25jZS5tYWtlTWVhc3VyZVNlY29uZHMobWFrZU1lYXN1cmVTZWNvbmRzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBDb3B5SnNvbmFibGUiOlsiZGVlcENvcHlKc29uYWJsZSJdLCJkZWVwTWFwT2JqZWN0IjpbImRlZXBNYXBPYmplY3QiXSwibWFrZU1lYXN1cmVTZWNvbmRzIjpbIm1ha2VNZWFzdXJlU2Vjb25kcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAmbRSr0xUAANMVAABFAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL3BhdHRlcm5zIiwiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyIsIi4vY2FsbGJhY2suanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRDYXBEYXRhIiwiYXNzZXJ0UGF0aFNlZ21lbnQiLCJpc1N0cmVhbUNlbGwiLCJtYWtlQ2hhaW5TdG9yYWdlUm9vdCIsIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UiLCJtYWtlU3RvcmFnZU5vZGVDaGlsZCIsInByZXBhcmVDaGFpblN0b3JhZ2VOb2RlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRSxGYXIsTSxtYWtlSGVhcFpvbmUsY2I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qc1wiLCBbW1wibWFrZUhlYXBab25lXCIsIFskaM2PX2EgPT4gKG1ha2VIZWFwWm9uZSA9ICRozY9fYSldXV1dLFtcIi4vY2FsbGJhY2suanNcIiwgW1tcIipcIiwgWyRozY9fYSA9PiAoY2IgPSAkaM2PX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlQ2hhaW5TdG9yYWdlUm9vdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZUNoYWluU3RvcmFnZVJvb3RcIn0pOyRozY9fb25jZS5tYWtlQ2hhaW5TdG9yYWdlUm9vdChtYWtlQ2hhaW5TdG9yYWdlUm9vdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VTdG9yYWdlTm9kZUNoaWxkLCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlU3RvcmFnZU5vZGVDaGlsZFwifSk7JGjNj19vbmNlLm1ha2VTdG9yYWdlTm9kZUNoaWxkKG1ha2VTdG9yYWdlTm9kZUNoaWxkKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBDaGFpblN0b3JhZ2VOb2RlST1NLmludGVyZmFjZSgnU3RvcmFnZU5vZGUnLHtcbnNldFZhbHVlOk0uY2FsbFdoZW4oTS5zdHJpbmcoKSkucmV0dXJucygpLFxuZ2V0UGF0aDpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0U3RvcmVLZXk6TS5jYWxsV2hlbigpLnJldHVybnMoTS5yZWNvcmQoKSksXG5tYWtlQ2hpbGROb2RlOk0uY2FsbChNLnN0cmluZygpKS5cbm9wdGlvbmFsKE0uc3BsaXRSZWNvcmQoe30se3NlcXVlbmNlOk0uYm9vbGVhbigpfSx7fSkpLlxucmV0dXJucyhNLnJlbW90YWJsZSgnU3RvcmFnZU5vZGUnKSl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTdHJlYW1DZWxsPShjZWxsKT0+XG5jZWxsJiZcbnR5cGVvZiBjZWxsPT09J29iamVjdCcmJlxuQXJyYXkuaXNBcnJheShjZWxsLnZhbHVlcykmJlxudHlwZW9mIGNlbGwuYmxvY2tIZWlnaHQ9PT0nc3RyaW5nJyYmXG4vXjAkfF5bMS05XVswLTldKiQvLnRlc3QoY2VsbC5ibG9ja0hlaWdodCk7JGjNj19vbmNlLmlzU3RyZWFtQ2VsbChpc1N0cmVhbUNlbGwpO1xuaGFyZGVuKGlzU3RyZWFtQ2VsbCk7XG5cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDYXBEYXRhPShkYXRhKT0+e1xuYXNzZXJ0LnR5cGVvZihkYXRhLCdvYmplY3QnKTtcbmFzc2VydChkYXRhKTtcbmFzc2VydC50eXBlb2YoZGF0YS5ib2R5LCdzdHJpbmcnKTtcbmFzc2VydChBcnJheS5pc0FycmF5KGRhdGEuc2xvdHMpKTtcbi8vXG4gfTskaM2PX29uY2UuYXNzZXJ0Q2FwRGF0YShhc3NlcnRDYXBEYXRhKTtcbmhhcmRlbihhc3NlcnRDYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHBhdGhTZWdtZW50UGF0dGVybj0vXlthLXpBLVowLTlfLV17MSwxMDB9JC87XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQYXRoU2VnbWVudD0obmFtZSk9PntcbnBhdGhTZWdtZW50UGF0dGVybi50ZXN0KG5hbWUpfHxcbkZhaWwgYFBhdGggc2VnbWVudCBuYW1lcyBtdXN0IGNvbnNpc3Qgb2YgMSB0byAxMDAgY2hhcmFjdGVycyBsaW1pdGVkIHRvIEFTQ0lJIGFscGhhbnVtZXJpY3MsIHVuZGVyc2NvcmVzLCBhbmQvb3IgZGFzaGVzOiAke25hbWV9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRQYXRoU2VnbWVudChhc3NlcnRQYXRoU2VnbWVudCk7XG5oYXJkZW4oYXNzZXJ0UGF0aFNlZ21lbnQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZT0oem9uZSk9Pntcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VDaGFpblN0b3JhZ2VOb2RlPXpvbmUuZXhvQ2xhc3MoXG4nQ2hhaW5TdG9yYWdlTm9kZScsXG5DaGFpblN0b3JhZ2VOb2RlSSxcbi8qXG5cblxuXG5cblxuXG4gICAgICovXG4obWVzc2VuZ2VyLHBhdGgse3NlcXVlbmNlPWZhbHNlfT17fSk9PntcbmFzc2VydC50eXBlb2YocGF0aCwnc3RyaW5nJyk7XG5hc3NlcnQudHlwZW9mKHNlcXVlbmNlLCdib29sZWFuJyk7XG5yZXR1cm4gaGFyZGVuKHtwYXRoLG1lc3NlbmdlcixzZXF1ZW5jZX0pO1xuIH0sXG57XG5nZXRQYXRoKCl7XG5yZXR1cm4gdGhpcy5zdGF0ZS5wYXRoO1xuIH0sXG4vKlxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgZ2V0U3RvcmVLZXkoKXtcbmNvbnN0e3BhdGgsbWVzc2VuZ2VyfT10aGlzLnN0YXRlO1xucmV0dXJuIGNiLmNhbGxFKG1lc3Nlbmdlcix7XG5tZXRob2Q6J2dldFN0b3JlS2V5JyxcbmFyZ3M6W3BhdGhdfSk7XG5cbiB9LFxuLypcblxuXG5cblxuICAgICAgICovXG5tYWtlQ2hpbGROb2RlKG5hbWUsY2hpbGROb2RlT3B0aW9ucz17fSl7XG5jb25zdHtzZXF1ZW5jZSxwYXRoLG1lc3Nlbmdlcn09dGhpcy5zdGF0ZTtcbmFzc2VydFBhdGhTZWdtZW50KG5hbWUpO1xuY29uc3QgbWVyZ2VkT3B0aW9ucz17c2VxdWVuY2UsLi4uY2hpbGROb2RlT3B0aW9uc307XG5yZXR1cm4gbWFrZUNoYWluU3RvcmFnZU5vZGUoXG5tZXNzZW5nZXIsXG4gYCR7cGF0aH0uJHtuYW1lfWAsXG5tZXJnZWRPcHRpb25zKTtcblxuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgc2V0VmFsdWUodmFsdWUpe1xuY29uc3R7c2VxdWVuY2UscGF0aCxtZXNzZW5nZXJ9PXRoaXMuc3RhdGU7XG5hc3NlcnQudHlwZW9mKHZhbHVlLCdzdHJpbmcnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGVudHJ5O1xuaWYoIXNlcXVlbmNlJiYhdmFsdWUpe1xuZW50cnk9W3BhdGhdO1xuIH1lbHNle1xuZW50cnk9W3BhdGgsdmFsdWVdO1xuIH1cbmF3YWl0IGNiLmNhbGxFKG1lc3Nlbmdlcix7XG5tZXRob2Q6c2VxdWVuY2U/J2FwcGVuZCc6J3NldCcsXG5hcmdzOltlbnRyeV19KTtcblxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG59KTtcblxucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VOb2RlO1xuIH07JGjNj19vbmNlLnByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKHByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKTtcblxuY29uc3QgbWFrZUhlYXBDaGFpblN0b3JhZ2VOb2RlPXByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKG1ha2VIZWFwWm9uZSgpKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlQ2hhaW5TdG9yYWdlUm9vdChcbmhhbmRsZVN0b3JhZ2VNZXNzYWdlLFxucm9vdFBhdGgsXG5yb290T3B0aW9ucz17fSlcbntcbmNvbnN0IG1lc3Nlbmdlcj1jYi5tYWtlRnVuY3Rpb25DYWxsYmFjayhoYW5kbGVTdG9yYWdlTWVzc2FnZSk7XG5cbi8vXG5jb25zdCByb290Tm9kZT1tYWtlSGVhcENoYWluU3RvcmFnZU5vZGUobWVzc2VuZ2VyLHJvb3RQYXRoLHJvb3RPcHRpb25zKTtcbnJldHVybiByb290Tm9kZTtcbiB9XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlTnVsbFN0b3JhZ2VOb2RlPSgpPT57XG4vL1xucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VSb290KFxuRmFyKCdOdWxsTWVzc2VuZ2VyJywoKT0+bnVsbCksXG4nbnVsbCcpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5hc3luYyBmdW5jdGlvbiAgICAgICAgbWFrZVN0b3JhZ2VOb2RlQ2hpbGQoc3RvcmFnZU5vZGVSZWYsY2hpbGROYW1lKXtcbmNvbnN0IGV4aXN0aW5nU3RvcmFnZU5vZGU9YXdhaXQgc3RvcmFnZU5vZGVSZWY7XG5jb25zdCBzdG9yYWdlTm9kZT1leGlzdGluZ1N0b3JhZ2VOb2RlfHxtYWtlTnVsbFN0b3JhZ2VOb2RlKCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkubWFrZUNoaWxkTm9kZShjaGlsZE5hbWUpO1xuIH1cbmhhcmRlbihtYWtlU3RvcmFnZU5vZGVDaGlsZCk7XG5cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZT0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbnJldHVybiBhc3luYyh2YWx1ZSk9PntcbmNvbnN0IG1hcnNoYWxsZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShtYXJzaGFsbGVkKTtcbnJldHVybiBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkKTtcbiB9O1xuIH07JGjNj19vbmNlLm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1N0cmVhbUNlbGwiOlsiaXNTdHJlYW1DZWxsIl0sImFzc2VydENhcERhdGEiOlsiYXNzZXJ0Q2FwRGF0YSJdLCJhc3NlcnRQYXRoU2VnbWVudCI6WyJhc3NlcnRQYXRoU2VnbWVudCJdLCJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSI6WyJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSJdLCJtYWtlQ2hhaW5TdG9yYWdlUm9vdCI6WyJtYWtlQ2hhaW5TdG9yYWdlUm9vdCJdLCJtYWtlU3RvcmFnZU5vZGVDaGlsZCI6WyJtYWtlU3RvcmFnZU5vZGVDaGlsZCJdLCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIjpbIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAtr0hXmsIAABrCAAAQQAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbWV0aG9kLXRvb2xzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiXSwiZXhwb3J0cyI6WyJiaW5kQWxsTWV0aG9kcyIsImdldE1ldGhvZE5hbWVzIiwiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNPYmplY3Q7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7Z2V0UHJvdG90eXBlT2YsY3JlYXRlLGZyb21FbnRyaWVzLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuY29uc3R7b3duS2V5cyxhcHBseX09UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmNvbnN0IG93bk5hbWVzPS8qICAgICAgICAgICAgICAqL293bktleXMoZGVzY3MpO1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duTmFtZXMpe1xuLy9cbi8vXG5pZih0eXBlb2YgdmFsW25hbWVdPT09J2Z1bmN0aW9uJyl7XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxuIH1cbmlmKCFpc09iamVjdCh2YWwpKXtcbmJyZWFrO1xuIH1cbmxheWVyPWdldFByb3RvdHlwZU9mKGxheWVyKTtcbiB9XG5yZXR1cm4gaGFyZGVuKFsuLi5uYW1lc10uc29ydChjb21wYXJlU3RyaW5naWZpZWQpKTtcbiB9OyRozY9fb25jZS5nZXRNZXRob2ROYW1lcyhnZXRNZXRob2ROYW1lcyk7XG5oYXJkZW4oZ2V0TWV0aG9kTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldFN0cmluZ01ldGhvZE5hbWVzPSh2YWwpPT5cbi8qICAgICAgICAgICAgICAgICAgICovXG5nZXRNZXRob2ROYW1lcyh2YWwpLmZpbHRlcigobmFtZSk9PnR5cGVvZiBuYW1lPT09J3N0cmluZycpO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZ2V0U3RyaW5nTWV0aG9kTmFtZXMoZ2V0U3RyaW5nTWV0aG9kTmFtZXMpO1xuY29uc3QgICAgICAgIGJpbmRBbGxNZXRob2RzPShvYmopPT5cbmhhcmRlbihcbmNyZWF0ZShcbm9iaixcbmZyb21FbnRyaWVzKFxuZ2V0TWV0aG9kTmFtZXMob2JqKS5tYXAoKG5hbWUpPT5bXG5uYW1lLFxue1xudmFsdWU6KC8qICAgICAgICAgICAgICAgICAgICAqLy4uLmFyZ3MpPT5cbmFwcGx5KG9ialtuYW1lXSxvYmosYXJncyksXG5lbnVtZXJhYmxlOnRydWV9XSkpKSk7JGjNj19vbmNlLmJpbmRBbGxNZXRob2RzKGJpbmRBbGxNZXRob2RzKTtcblxuXG5cblxuXG5oYXJkZW4oYmluZEFsbE1ldGhvZHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0TWV0aG9kTmFtZXMiOlsiZ2V0TWV0aG9kTmFtZXMiXSwiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiOlsiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiXSwiYmluZEFsbE1ldGhvZHMiOlsiYmluZEFsbE1ldGhvZHMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmgUfr4YdAACGHQAAPgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvc2VzLXV0aWxzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL3N0cmVhbSIsImplc3NpZS5qcyJdLCJleHBvcnRzIjpbIlByb21pc2VBbGxPckVycm9ycyIsImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiLCJhbGxWYWx1ZXMiLCJhc3NlcnRBbGxEZWZpbmVkIiwiZGVlcGx5RnVsZmlsbGVkT2JqZWN0IiwiZm9yZXZlciIsInN5bmNocm9uaXplZFRlZSIsInVudGlsVHJ1ZSIsIndoaWxlVHJ1ZSIsIndpdGhEZWZlcnJlZENsZWFudXAiLCJ6aXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLFgsZGVlcGx5RnVsZmlsbGVkLGlzT2JqZWN0LG1ha2VQcm9taXNlS2l0LG1ha2VRdWV1ZSxhc3luY0dlbmVyYXRlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjNj19hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9zdHJlYW1cIiwgW1tcIm1ha2VRdWV1ZVwiLCBbJGjNj19hID0+IChtYWtlUXVldWUgPSAkaM2PX2EpXV1dXSxbXCJqZXNzaWUuanNcIiwgW1tcImFzeW5jR2VuZXJhdGVcIiwgWyRozY9fYSA9PiAoYXN5bmNHZW5lcmF0ZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtmcm9tRW50cmllcyxrZXlzLHZhbHVlc309T2JqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkT2JqZWN0PWFzeW5jKG9iaik9PntcbmlzT2JqZWN0KG9iail8fEZhaWwgYHBhcmFtIG11c3QgYmUgYW4gb2JqZWN0YDtcbnJldHVybiBkZWVwbHlGdWxmaWxsZWQob2JqKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmRlZXBseUZ1bGZpbGxlZE9iamVjdChkZWVwbHlGdWxmaWxsZWRPYmplY3QpO1xuY29uc3QgbWFrZUFnZ3JlZ2F0ZUVycm9yPVxudHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPT09J2Z1bmN0aW9uJz9cbihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKT0+QWdncmVnYXRlRXJyb3IoZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk6XG4oZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk9PntcbnJldHVybiBtYWtlRXJyb3IobWVzc2FnZT8/J211bHRpcGxlIGVycm9ycycsdW5kZWZpbmVkLHtcbi4uLm9wdGlvbnMsXG5lcnJvcnN9KTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBQcm9taXNlQWxsT3JFcnJvcnM9YXN5bmMoaXRlbXMpPT57XG5yZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGl0ZW1zKS50aGVuKChyZXN1bHRzKT0+e1xuY29uc3QgZXJyb3JzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZXN1bHRzLmZpbHRlcigoe3N0YXR1c30pPT5zdGF0dXM9PT0ncmVqZWN0ZWQnKS5cbm1hcCgocmVzdWx0KT0+cmVzdWx0LnJlYXNvbik7XG5pZighZXJyb3JzLmxlbmd0aCl7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdHMubWFwKFxuKHJlc3VsdCk9PnJlc3VsdC52YWx1ZSkpO1xuXG4gfWVsc2UgaWYoZXJyb3JzLmxlbmd0aD09PTEpe1xudGhyb3cgZXJyb3JzWzBdO1xuIH1lbHNle1xudGhyb3cgbWFrZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gfVxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlQWxsT3JFcnJvcnMoUHJvbWlzZUFsbE9yRXJyb3JzKTtcbmNvbnN0ICAgICAgICBhZ2dyZWdhdGVUcnlGaW5hbGx5PWFzeW5jKHRyaWVyLGZpbmFsaXplcik9PlxudHJpZXIoKS50aGVuKFxuYXN5bmMocmVzdWx0KT0+ZmluYWxpemVyKCkudGhlbigoKT0+cmVzdWx0KSxcbmFzeW5jKHRyeUVycm9yKT0+XG5maW5hbGl6ZXIodHJ5RXJyb3IpLlxudGhlbihcbigpPT50cnlFcnJvcixcbihmaW5hbGl6ZUVycm9yKT0+bWFrZUFnZ3JlZ2F0ZUVycm9yKFt0cnlFcnJvcixmaW5hbGl6ZUVycm9yXSkpLlxuXG50aGVuKChlcnJvcik9PlByb21pc2UucmVqZWN0KGVycm9yKSkpO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hZ2dyZWdhdGVUcnlGaW5hbGx5KGFnZ3JlZ2F0ZVRyeUZpbmFsbHkpO1xuY29uc3QgICAgICAgIHdpdGhEZWZlcnJlZENsZWFudXA9YXN5bmMoZm4pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNsZWFudXBzTElGTz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWRkQ2xlYW51cD0oY2xlYW51cCk9PntcbmNsZWFudXBzTElGTy51bnNoaWZ0KGNsZWFudXApO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZmluYWxpemVyPWFzeW5jKGVycik9Pntcbi8vXG5jb25zdCBjbGVhbnVwUmVzdWx0cz1jbGVhbnVwc0xJRk8ubWFwKGFzeW5jKGNsZWFudXApPT57XG5hd2FpdCBudWxsO1xucmV0dXJuIGNsZWFudXAoZXJyKTtcbiB9KTtcbmF3YWl0IFByb21pc2VBbGxPckVycm9ycyhjbGVhbnVwUmVzdWx0cyk7XG4gfTtcbnJldHVybiBhZ2dyZWdhdGVUcnlGaW5hbGx5KCgpPT5mbihhZGRDbGVhbnVwKSxmaW5hbGl6ZXIpO1xuIH07XG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS53aXRoRGVmZXJyZWRDbGVhbnVwKHdpdGhEZWZlcnJlZENsZWFudXApO1xuY29uc3QgICAgICAgIGFzc2VydEFsbERlZmluZWQ9KG9iaik9PntcbmNvbnN0IG1pc3Npbmc9W107XG5mb3IoY29uc3Rba2V5LHZhbF1vZiBPYmplY3QuZW50cmllcyhvYmopKXtcbmlmKHZhbD09PXVuZGVmaW5lZCl7XG5taXNzaW5nLnB1c2goa2V5KTtcbiB9XG4gfVxuaWYobWlzc2luZy5sZW5ndGg+MCl7XG5GYWlsIGBtaXNzaW5nICR7cShtaXNzaW5nKX1gO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5hc3NlcnRBbGxEZWZpbmVkKGFzc2VydEFsbERlZmluZWQpO1xuY29uc3Qgbm90RG9uZT1oYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6dW5kZWZpbmVkfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWx3YXlzRG9uZT1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcblxuY29uc3QgICAgICAgIGZvcmV2ZXI9YXN5bmNHZW5lcmF0ZSgoKT0+bm90RG9uZSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmZvcmV2ZXIoZm9yZXZlcik7XG5jb25zdCAgICAgICAgd2hpbGVUcnVlPShwcm9kdWNlKT0+XG5hc3luY0dlbmVyYXRlKGFzeW5jKCk9PntcbmNvbnN0IHZhbHVlPWF3YWl0IHByb2R1Y2UoKTtcbmlmKCF2YWx1ZSl7XG5yZXR1cm4gYWx3YXlzRG9uZTtcbiB9XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6ZmFsc2UsXG52YWx1ZX0pO1xuXG4gfSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLndoaWxlVHJ1ZSh3aGlsZVRydWUpO1xuY29uc3QgICAgICAgIHVudGlsVHJ1ZT0ocHJvZHVjZSk9PlxuYXN5bmNHZW5lcmF0ZShhc3luYygpPT57XG5jb25zdCB2YWx1ZT1hd2FpdCBwcm9kdWNlKCk7XG5pZih2YWx1ZSl7XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6dHJ1ZSxcbnZhbHVlfSk7XG5cbiB9XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6ZmFsc2UsXG52YWx1ZX0pO1xuXG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS51bnRpbFRydWUodW50aWxUcnVlKTtcbmNvbnN0ICAgICAgICB6aXA9KHhzLHlzKT0+aGFyZGVuKHhzLm1hcCgoeCxpKT0+W3gseXNbK2ldXSkpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLnppcCh6aXApO1xuY29uc3QgICAgICAgIGFsbFZhbHVlcz1hc3luYyhvYmopPT57XG5jb25zdCByZXNvbHZlZD1hd2FpdCBQcm9taXNlLmFsbCh2YWx1ZXMob2JqKSk7XG4vL1xucmV0dXJuIGhhcmRlbihmcm9tRW50cmllcyh6aXAoa2V5cyhvYmopLHJlc29sdmVkKSkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hbGxWYWx1ZXMoYWxsVmFsdWVzKTtcbmNvbnN0ICAgICAgICBzeW5jaHJvbml6ZWRUZWU9KHNvdXJjZVN0cmVhbSxyZWFkZXJDb3VudCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZVJlc3VsdDtcblxuLypcblxuXG5cbiAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBxdWV1ZXM9W107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1bGxOZXh0PWFzeW5jKCk9PntcbmNvbnN0IHJlcXVlc3RzPWF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChxdWV1ZXMubWFwKChxdWV1ZSk9PnF1ZXVlLmdldCgpKSk7XG5jb25zdCByZWplY3Rpb25zPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlcnM9W107XG5sZXQgZG9uZT1mYWxzZTtcbmZvcihjb25zdCBzZXR0bGVkUmVzdWx0IG9mIHJlcXVlc3RzKXtcbmlmKHNldHRsZWRSZXN1bHQuc3RhdHVzPT09J3JlamVjdGVkJyl7XG5yZWplY3Rpb25zLnB1c2goc2V0dGxlZFJlc3VsdC5yZWFzb24pO1xuIH1lbHNle1xuZG9uZXx8PSEhc2V0dGxlZFJlc3VsdC52YWx1ZS5kb25lO1xucmVzb2x2ZXJzLnB1c2goc2V0dGxlZFJlc3VsdC52YWx1ZS52YWx1ZSk7XG4gfVxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoZG9uZVJlc3VsdCl7XG5yZXN1bHQ9UHJvbWlzZS5yZXNvbHZlKGRvbmVSZXN1bHQpO1xuIH1lbHNlIGlmKHJlamVjdGlvbnMubGVuZ3RoKXtcbmNvbnN0IGVycm9yPW1ha2VFcnJvcihYIGBUZWVkIHN0cmVhbSB0aHJld2ApO1xuYW5ub3RhdGVFcnJvcihlcnJvcixYIGBUZWVkIHJlamVjdGlvbnM6ICR7cmVqZWN0aW9uc31gKTtcbnJlc3VsdD1cbnNvdXJjZVN0cmVhbS50aHJvdz8uKGVycm9yKXx8XG5Qcm9taXNlLnJlc29sdmUoc291cmNlU3RyZWFtLnJldHVybj8uKCkpLnRoZW4oKCk9PlxuUHJvbWlzZS5yZWplY3QoZXJyb3IpKTtcblxuIH1lbHNlIGlmKGRvbmUpe1xucmVzdWx0PVxuc291cmNlU3RyZWFtLnJldHVybj8uKCl8fFxuUHJvbWlzZS5yZXNvbHZlKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfWVsc2V7XG5yZXN1bHQ9c291cmNlU3RyZWFtLm5leHQoKTtcbiB9XG5yZXN1bHQudGhlbihcbihyKT0+e1xuaWYoci5kb25lKXtcbmRvbmVSZXN1bHQ9cjtcbiB9XG4gfSxcbigpPT57XG5kb25lUmVzdWx0PXtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfTtcbiB9KTtcblxuZm9yKGNvbnN0IHJlc29sdmUgb2YgcmVzb2x2ZXJzKXtcbnJlc29sdmUocmVzdWx0KTtcbiB9XG5yZXR1cm4gcHVsbE5leHQoKTtcbiB9O1xuXG5jb25zdCByZWFkZXJzPUFycmF5LmZyb20oe2xlbmd0aDpyZWFkZXJDb3VudH0pLm1hcCgoKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHF1ZXVlPW1ha2VRdWV1ZSgpO1xucXVldWVzLnB1c2gocXVldWUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVhZGVyPWhhcmRlbih7XG4gICAgICBhc3luYyBuZXh0KCl7XG4vKlxuXG5cblxuICAgICAgICAgKi9cbmNvbnN0e3Byb21pc2UscmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnF1ZXVlLnB1dCh7dmFsdWU6cmVzb2x2ZSxkb25lOmZhbHNlfSk7XG5yZXR1cm4gcHJvbWlzZTtcbiB9LFxuICAgICAgYXN5bmMgcmV0dXJuKCl7XG4vKlxuXG5cblxuICAgICAgICAgKi9cbmNvbnN0e3Byb21pc2UscmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnF1ZXVlLnB1dCh7dmFsdWU6cmVzb2x2ZSxkb25lOnRydWV9KTtcbnJldHVybiBwcm9taXNlO1xuIH0sXG4gICAgICBhc3luYyB0aHJvdyhyZWFzb24pe1xuY29uc3QgcmVqZWN0aW9uPVByb21pc2UucmVqZWN0KHJlYXNvbik7XG5xdWV1ZS5wdXQocmVqZWN0aW9uKTtcbnJldHVybiByZWplY3Rpb247XG4gfSxcbi8vXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gcmVhZGVyO1xuIH0sXG4vL1xuICAgICAgYXN5bmNbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKXtcbmF3YWl0IHJlYWRlci5yZXR1cm4oKTtcbiB9fSk7XG5cbnJldHVybiByZWFkZXI7XG4gfSk7XG5cbnZvaWQgcHVsbE5leHQoKTtcbnJldHVybiByZWFkZXJzO1xuIH07JGjNj19vbmNlLnN5bmNocm9uaXplZFRlZShzeW5jaHJvbml6ZWRUZWUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVlcGx5RnVsZmlsbGVkT2JqZWN0IjpbImRlZXBseUZ1bGZpbGxlZE9iamVjdCJdLCJQcm9taXNlQWxsT3JFcnJvcnMiOlsiUHJvbWlzZUFsbE9yRXJyb3JzIl0sImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiOlsiYWdncmVnYXRlVHJ5RmluYWxseSJdLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIjpbIndpdGhEZWZlcnJlZENsZWFudXAiXSwiYXNzZXJ0QWxsRGVmaW5lZCI6WyJhc3NlcnRBbGxEZWZpbmVkIl0sImZvcmV2ZXIiOlsiZm9yZXZlciJdLCJ3aGlsZVRydWUiOlsid2hpbGVUcnVlIl0sInVudGlsVHJ1ZSI6WyJ1bnRpbFRydWUiXSwiemlwIjpbInppcCJdLCJhbGxWYWx1ZXMiOlsiYWxsVmFsdWVzIl0sInN5bmNocm9uaXplZFRlZSI6WyJzeW5jaHJvbml6ZWRUZWUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAASflQRSEGAAAhBgAAQgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdGVzdGluZy11dGlscy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZXZlbnRMb29wSXRlcmF0aW9uIiwiaW5zcGVjdE1hcFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLypcblxuXG4gKi9cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlbnRMb29wSXRlcmF0aW9uPWFzeW5jKCk9PlxubmV3IFByb21pc2UoKHJlc29sdmUpPT5zZXRJbW1lZGlhdGUocmVzb2x2ZSkpOyRozY9fb25jZS5ldmVudExvb3BJdGVyYXRpb24oZXZlbnRMb29wSXRlcmF0aW9uKTtcbmhhcmRlbihldmVudExvb3BJdGVyYXRpb24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdPclRhZz0odmFsdWUpPT57XG5pZih0eXBlb2YgdmFsdWU9PT0nc3RyaW5nJyl7XG5yZXR1cm4gdmFsdWU7XG4gfWVsc2UgaWYodHlwZW9mIHZhbHVlPT09J29iamVjdCcmJlN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSl7XG5yZXR1cm4gdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiB9XG5yZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiB9O1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbnNwZWN0TWFwU3RvcmU9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9iaj17fTtcbmZvcihjb25zdCBrZXkgb2Ygc3RvcmUua2V5cygpKXtcbmNvbnN0IHZhbHVlPXN0b3JlLmdldChrZXkpO1xuY29uc3QgaGFzS2V5cz10eXBlb2YgdmFsdWU9PT0nb2JqZWN0JyYmJ2tleXMnaW4gdmFsdWU7XG5jb25zdCBpbmRleD1zdHJpbmdPclRhZyhrZXkpO1xuaWYoaGFzS2V5cyYmJ2dldCdpbiB2YWx1ZSl7XG5vYmpbaW5kZXhdPWluc3BlY3RNYXBTdG9yZSh2YWx1ZSk7XG4gfWVsc2UgaWYoaGFzS2V5cyl7XG5vYmpbaW5kZXhdPUFycmF5LmZyb20odmFsdWUua2V5cygpKTtcbiB9ZWxzZXtcbm9ialtpbmRleF09XG52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlP1xudmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTpcbnZhbHVlO1xuIH1cbiB9XG5yZXR1cm4gb2JqO1xuIH07JGjNj19vbmNlLmluc3BlY3RNYXBTdG9yZShpbnNwZWN0TWFwU3RvcmUpO1xuaGFyZGVuKGluc3BlY3RNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJldmVudExvb3BJdGVyYXRpb24iOlsiZXZlbnRMb29wSXRlcmF0aW9uIl0sImluc3BlY3RNYXBTdG9yZSI6WyJpbnNwZWN0TWFwU3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh6paIP0CAAD9AgAAPgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdHlwZUNoZWNrLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiY2FzdCIsIm11c3RNYXRjaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCB0eXBlbGVzc011c3RNYXRjaDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAodHlwZWxlc3NNdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtdXN0TWF0Y2g9dHlwZWxlc3NNdXN0TWF0Y2g7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTtcbmNvbnN0ICAgICAgICBjYXN0PShzcGVjaW1lbixwYXR0KT0+e1xuLy9cbi8vXG4vL1xubXVzdE1hdGNoKHNwZWNpbWVuLHBhdHQpO1xucmV0dXJuIHNwZWNpbWVuO1xuIH07JGjNj19vbmNlLmNhc3QoY2FzdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtdXN0TWF0Y2giOlsibXVzdE1hdGNoIl0sImNhc3QiOlsiY2FzdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACilQEQTgMAAE4DAAA/AAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlR3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiU3RvcmFnZU5vZGVTaGFwZSIsIlVuZ3VhcmRlZEhlbHBlckkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuY29uc3QgICAgICAgIFN0b3JhZ2VOb2RlU2hhcGU9TS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5TdG9yYWdlTm9kZVNoYXBlKFN0b3JhZ2VOb2RlU2hhcGUpO1xuY29uc3QgICAgICAgIFVuZ3VhcmRlZEhlbHBlckk9TS5pbnRlcmZhY2UoXG4naGVscGVyJyxcbnt9LFxuLy9cbntzbG9wcHk6dHJ1ZX0pOyRozY9fb25jZS5Vbmd1YXJkZWRIZWxwZXJJKFVuZ3VhcmRlZEhlbHBlckkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiU3RvcmFnZU5vZGVTaGFwZSI6WyJTdG9yYWdlTm9kZVNoYXBlIl0sIlVuZ3VhcmRlZEhlbHBlckkiOlsiVW5ndWFyZGVkSGVscGVySSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAABAAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAm4dBahIHAAASBwAAQAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdXBncmFkZS1hcGkuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlIiwiaXNBYmFuZG9uZWRFcnJvciIsImlzVXBncmFkZURpc2Nvbm5lY3Rpb24iLCJtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxtYXRjaGVzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHtpc0Zyb3plbn09T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZT1oYXJkZW4oe1xubmFtZTondmF0VXBncmFkZWQnLFxudXBncmFkZU1lc3NhZ2U6TS5zdHJpbmcoKSxcbmluY2FybmF0aW9uTnVtYmVyOk0ubnVtYmVyKCl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUoVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSk7XG5jb25zdCAgICAgICAgbWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uPSh1cGdyYWRlTWVzc2FnZSx0b0luY2FybmF0aW9uTnVtYmVyKT0+XG5oYXJkZW4oe1xubmFtZTondmF0VXBncmFkZWQnLFxudXBncmFkZU1lc3NhZ2UsXG5pbmNhcm5hdGlvbk51bWJlcjp0b0luY2FybmF0aW9uTnVtYmVyfSk7JGjNj19vbmNlLm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbihtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24pO1xuXG5oYXJkZW4obWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNVcGdyYWRlRGlzY29ubmVjdGlvbj0ocmVhc29uKT0+XG5yZWFzb24hPW51bGwmJi8vXG5pc0Zyb3plbihyZWFzb24pJiZcbm1hdGNoZXMocmVhc29uLFVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUpOyRozY9fb25jZS5pc1VwZ3JhZGVEaXNjb25uZWN0aW9uKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24pO1xuaGFyZGVuKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQWJhbmRvbmVkRXJyb3I9KHJlYXNvbik9PlxucmVhc29uIT1udWxsJiYvL1xuaXNGcm96ZW4ocmVhc29uKSYmXG5tYXRjaGVzKHJlYXNvbixNLmVycm9yKCkpJiZcbi8vXG4vL1xucmVhc29uLm1lc3NhZ2U9PT0ndmF0IHRlcm1pbmF0ZWQnOyRozY9fb25jZS5pc0FiYW5kb25lZEVycm9yKGlzQWJhbmRvbmVkRXJyb3IpO1xuaGFyZGVuKGlzQWJhbmRvbmVkRXJyb3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSI6WyJVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlIl0sIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiI6WyJtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24iXSwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiI6WyJpc1VwZ3JhZGVEaXNjb25uZWN0aW9uIl0sImlzQWJhbmRvbmVkRXJyb3IiOlsiaXNBYmFuZG9uZWRFcnJvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACu+GMDBwgAAAcIAABJAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIiwib2JzZXJ2ZUl0ZXJhdGlvbiIsIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVOb3RpZmllciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLHN1YnNjcmliZUxhdGVzdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUxhdGVzdFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVMYXRlc3QgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyPXN1YnNjcmliZUxhdGVzdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllcihtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllcik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZUl0ZXJhdG9yPShhc3luY0l0ZXJhdG9yUCxpdGVyYXRpb25PYnNlcnZlcik9PntcbnJldHVybiBuZXcgUHJvbWlzZSgoYWNrLG9ic2VydmVyRXJyb3IpPT57XG5jb25zdCByZWN1cj0oKT0+e1xuRS53aGVuKFxuRShhc3luY0l0ZXJhdG9yUCkubmV4dCgpLFxuKHt2YWx1ZSxkb25lfSk9PntcbmlmKGRvbmUpe1xuaXRlcmF0aW9uT2JzZXJ2ZXIuZmluaXNoJiZpdGVyYXRpb25PYnNlcnZlci5maW5pc2godmFsdWUpO1xuYWNrKHVuZGVmaW5lZCk7XG4gfWVsc2V7XG5pdGVyYXRpb25PYnNlcnZlci51cGRhdGVTdGF0ZSYmXG5pdGVyYXRpb25PYnNlcnZlci51cGRhdGVTdGF0ZSh2YWx1ZSk7XG5yZWN1cigpO1xuIH1cbiB9LFxuKHJlYXNvbik9Pntcbml0ZXJhdGlvbk9ic2VydmVyLmZhaWwmJml0ZXJhdGlvbk9ic2VydmVyLmZhaWwocmVhc29uKTtcbmFjayh1bmRlZmluZWQpO1xuIH0pLlxuY2F0Y2gob2JzZXJ2ZXJFcnJvcik7XG4gfTtcbnJlY3VyKCk7XG4gfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5vYnNlcnZlSXRlcmF0b3Iob2JzZXJ2ZUl0ZXJhdG9yKTtcbmNvbnN0ICAgICAgICBvYnNlcnZlSXRlcmF0aW9uPShhc3luY0l0ZXJhYmxlUCxpdGVyYXRpb25PYnNlcnZlcik9PntcbmNvbnN0IGl0ZXJhdG9yUD1FKGFzeW5jSXRlcmFibGVQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbnJldHVybiBvYnNlcnZlSXRlcmF0b3IoaXRlcmF0b3JQLGl0ZXJhdGlvbk9ic2VydmVyKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm9ic2VydmVJdGVyYXRpb24ob2JzZXJ2ZUl0ZXJhdGlvbik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZU5vdGlmaWVyPShub3RpZmllclAsaXRlcmF0aW9uT2JzZXJ2ZXIpPT5cbm9ic2VydmVJdGVyYXRpb24oc3Vic2NyaWJlTGF0ZXN0KG5vdGlmaWVyUCksaXRlcmF0aW9uT2JzZXJ2ZXIpOyRozY9fb25jZS5vYnNlcnZlTm90aWZpZXIob2JzZXJ2ZU5vdGlmaWVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIjpbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIl0sIm9ic2VydmVJdGVyYXRvciI6WyJvYnNlcnZlSXRlcmF0b3IiXSwib2JzZXJ2ZUl0ZXJhdGlvbiI6WyJvYnNlcnZlSXRlcmF0aW9uIl0sIm9ic2VydmVOb3RpZmllciI6WyJvYnNlcnZlTm90aWZpZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAtRbSkN0HAADdBwAAOgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9wdWJsaXNoLWtpdC5qcyIsIi4vc3Vic2NyaWJlLmpzIiwiLi9ub3RpZmllci5qcyIsIi4vc3Vic2NyaWJlci5qcyIsIi4vdG9waWMuanMiLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIiwiLi9zdG9yZXN1Yi5qcyIsIi4vc3RvcmVkLW5vdGlmaWVyLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJleHBvcnRzIjpbIm1ha2VOb3RpZmllcktpdCIsIm1ha2VOb3RpZmllcktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiLCJtYWtlU3Vic2NyaXB0aW9uS2l0Iiwib2JzZXJ2ZUl0ZXJhdG9yIiwib2JzZXJ2ZUl0ZXJhdG9yIiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Iiwic3Vic2NyaWJlTGF0ZXN0Iiwic3Vic2NyaWJlTGF0ZXN0IixudWxsXSwicmVleHBvcnRzIjpbIi4vc3RvcmVkLW5vdGlmaWVyLmpzIiwiLi9zdG9yZXN1Yi5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vcHVibGlzaC1raXQuanNcIiwgW11dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtdXSxbXCIuL25vdGlmaWVyLmpzXCIsIFtdXSxbXCIuL3N1YnNjcmliZXIuanNcIiwgW11dLFtcIi4vdG9waWMuanNcIiwgW11dLFtcIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNcIiwgW11dLFtcIi4vc3RvcmVzdWIuanNcIiwgW11dLFtcIi4vc3RvcmVkLW5vdGlmaWVyLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9wdWJsaXNoLWtpdC5qcyI6W1sibWFrZVB1Ymxpc2hLaXQiLCJtYWtlUHVibGlzaEtpdCJdLFsicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Il0sWyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIiwiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSJdLFsiSXRlcmFibGVFYWNoVG9waWNJIiwiSXRlcmFibGVFYWNoVG9waWNJIl0sWyJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIl0sWyJTdWJzY3JpYmVyU2hhcGUiLCJTdWJzY3JpYmVyU2hhcGUiXV0sIi4vc3Vic2NyaWJlLmpzIjpbWyJzdWJzY3JpYmVFYWNoIiwic3Vic2NyaWJlRWFjaCJdLFsic3Vic2NyaWJlTGF0ZXN0Iiwic3Vic2NyaWJlTGF0ZXN0Il1dLCIuL25vdGlmaWVyLmpzIjpbWyJtYWtlTm90aWZpZXIiLCJtYWtlTm90aWZpZXIiXSxbIm1ha2VOb3RpZmllcktpdCIsIm1ha2VOb3RpZmllcktpdCJdLFsibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiLCJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSJdLFsibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciJdXSwiLi9zdWJzY3JpYmVyLmpzIjpbWyJtYWtlU3Vic2NyaXB0aW9uIiwibWFrZVN1YnNjcmlwdGlvbiJdLFsibWFrZVN1YnNjcmlwdGlvbktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiXV0sIi4vdG9waWMuanMiOltbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiLCJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl1dLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIjpbWyJvYnNlcnZlTm90aWZpZXIiLCJvYnNlcnZlTm90aWZpZXIiXSxbIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVJdGVyYXRvciJdLFsib2JzZXJ2ZUl0ZXJhdGlvbiIsIm9ic2VydmVJdGVyYXRpb24iXSxbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIiwibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANlbosJxEAAAcRAAAD0AAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL25vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VOb3RpZmllciIsIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIiwibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiLCJtYWtlTm90aWZpZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEUsRmFyLG1ha2VQdWJsaXNoS2l0LHN1YnNjcmliZUxhdGVzdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtbXCJtYWtlUHVibGlzaEtpdFwiLCBbJGjNj19hID0+IChtYWtlUHVibGlzaEtpdCA9ICRozY9fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVMYXRlc3RcIiwgWyRozY9fYSA9PiAoc3Vic2NyaWJlTGF0ZXN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllcj0oc2hhcmFibGVJbnRlcm5hbHNQKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi4uLnN1YnNjcmliZUxhdGVzdChzaGFyYWJsZUludGVybmFsc1ApLFxuZ2V0VXBkYXRlU2luY2U6YXN5bmModXBkYXRlQ291bnQpPT5cbkUoc2hhcmFibGVJbnRlcm5hbHNQKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmdldFNoYXJhYmxlTm90aWZpZXJJbnRlcm5hbHM6YXN5bmMoKT0+c2hhcmFibGVJbnRlcm5hbHNQLFxuLypcblxuXG5cbiAgICAgKi9cbmdldFN0b3JlS2V5OigpPT5oYXJkZW4oe25vdGlmaWVyfSl9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU5vdGlmaWVyKG1ha2VOb3RpZmllcik7XG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXI9KHN1YnNjcmliZXIpPT57XG4vKlxuXG4gICAqL1xuY29uc3QgYmFzZU5vdGlmaWVyPWhhcmRlbih7XG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQ9dW5kZWZpbmVkKT0+XG5FKHN1YnNjcmliZXIpLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBub3RpZmllcj1GYXIoJ25vdGlmaWVyJyx7XG4uLi5tYWtlTm90aWZpZXIoYmFzZU5vdGlmaWVyKSxcbi4uLmJhc2VOb3RpZmllcn0pO1xuXG5yZXR1cm4gbm90aWZpZXI7XG4gfTskaM2PX29uY2UubWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIobWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuaGFyZGVuKG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllcktpdD0oLi4uaW5pdGlhbFN0YXRlQXJyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VQdWJsaXNoS2l0KCk7XG5cbmNvbnN0IG5vdGlmaWVyPW1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKHN1YnNjcmliZXIpO1xuXG5jb25zdCB1cGRhdGVyPUZhcigndXBkYXRlcicse1xudXBkYXRlU3RhdGU6KHN0YXRlKT0+cHVibGlzaGVyLnB1Ymxpc2goc3RhdGUpLFxuZmluaXNoOihjb21wbGV0aW9uKT0+cHVibGlzaGVyLmZpbmlzaChjb21wbGV0aW9uKSxcbmZhaWw6KHJlYXNvbik9PnB1Ymxpc2hlci5mYWlsKHJlYXNvbil9KTtcblxuXG5hc3NlcnQoaW5pdGlhbFN0YXRlQXJyLmxlbmd0aDw9MSwndG9vIG1hbnkgYXJndW1lbnRzJyk7XG5pZihpbml0aWFsU3RhdGVBcnIubGVuZ3RoPT09MSl7XG51cGRhdGVyLnVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZUFyclswXSk7XG4gfVxuXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oe25vdGlmaWVyLHVwZGF0ZXJ9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU5vdGlmaWVyS2l0KG1ha2VOb3RpZmllcktpdCk7XG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGU9KGFzeW5jSXRlcmFibGVQKT0+e1xuY29uc3QgaXRlcmF0b3JQPUUoYXN5bmNJdGVyYWJsZVApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgb3B0TmV4dFByb21pc2U7XG5sZXQgY3VycmVudFVwZGF0ZUNvdW50PTBuO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGN1cnJlbnRSZXNwb25zZTtcbmxldCBmaW5hbD1mYWxzZTtcblxuLypcblxuICAgKi9cbmNvbnN0IGJhc2VOb3RpZmllcj1GYXIoJ2Jhc2VOb3RpZmllcicse1xuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQ9LTFuKXtcbmlmKHVwZGF0ZUNvdW50PGN1cnJlbnRVcGRhdGVDb3VudCl7XG5pZihjdXJyZW50UmVzcG9uc2Upe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShjdXJyZW50UmVzcG9uc2UpO1xuIH1cbiB9ZWxzZSBpZih1cGRhdGVDb3VudCE9PWN1cnJlbnRVcGRhdGVDb3VudCl7XG50aHJvdyBFcnJvcihcbidnZXRVcGRhdGVTaW5jZSBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgdXBkYXRlQ291bnQuJyk7XG5cbiB9XG5cbi8vXG5pZihmaW5hbCl7XG5hc3NlcnQoY3VycmVudFJlc3BvbnNlIT09dW5kZWZpbmVkKTtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoY3VycmVudFJlc3BvbnNlKTtcbiB9XG5pZighb3B0TmV4dFByb21pc2Upe1xuY29uc3QgbmV4dEl0ZXJSZXN1bHRQPUUoaXRlcmF0b3JQKS5uZXh0KCk7XG5vcHROZXh0UHJvbWlzZT1FLndoZW4oXG5uZXh0SXRlclJlc3VsdFAsXG4oe2RvbmUsdmFsdWV9KT0+e1xuYXNzZXJ0KCFmaW5hbCk7XG5pZihkb25lKXtcbmZpbmFsPXRydWU7XG4gfVxuY3VycmVudFVwZGF0ZUNvdW50Kz0xbjtcbmN1cnJlbnRSZXNwb25zZT1oYXJkZW4oe1xudmFsdWUsXG51cGRhdGVDb3VudDpkb25lP3VuZGVmaW5lZDpjdXJyZW50VXBkYXRlQ291bnR9KTtcblxub3B0TmV4dFByb21pc2U9dW5kZWZpbmVkO1xucmV0dXJuIGN1cnJlbnRSZXNwb25zZTtcbiB9LFxuKF9yZWFzb24pPT57XG5maW5hbD10cnVlO1xuY3VycmVudFJlc3BvbnNlPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5uZXh0SXRlclJlc3VsdFA7XG5vcHROZXh0UHJvbWlzZT11bmRlZmluZWQ7XG5yZXR1cm4gY3VycmVudFJlc3BvbnNlO1xuIH0pO1xuXG4gfVxucmV0dXJuIG9wdE5leHRQcm9taXNlO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLy9cbi8vXG4uLi5tYWtlTm90aWZpZXIoYmFzZU5vdGlmaWVyKSxcbi4uLmJhc2VOb3RpZmllcn0pO1xuXG5yZXR1cm4gbm90aWZpZXI7XG4gfTskaM2PX29uY2UubWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUobWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUpO1xuaGFyZGVuKG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VOb3RpZmllciI6WyJtYWtlTm90aWZpZXIiXSwibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiOlsibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiXSwibWFrZU5vdGlmaWVyS2l0IjpbIm1ha2VOb3RpZmllcktpdCJdLCJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSI6WyJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB0ejOhLSsAAC0rAABAAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9wdWJsaXNoLWtpdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL3BhdHRlcm5zIiwiQGFnb3JpYy92YXQtZGF0YSJdLCJleHBvcnRzIjpbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiLCJJdGVyYWJsZUVhY2hUb3BpY0kiLCJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIlB1Ymxpc2hlckkiLCJTdWJzY3JpYmVySSIsIlN1YnNjcmliZXJTaGFwZSIsIlVwZGF0ZUNvdW50U2hhcGUiLCJtYWtlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInB1Ymxpc2hLaXRJS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxFLEZhcixtYWtlUHJvbWlzZUtpdCxNLGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCxjYW5CZUR1cmFibGUscHJlcGFyZUV4b0NsYXNzS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcImNhbkJlRHVyYWJsZVwiLCBbJGjNj19hID0+IChjYW5CZUR1cmFibGUgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0IHNpbms9KCk9PnsgfTtcbmNvbnN0IG1ha2VRdWlldFJlamVjdGlvbj0ocmVhc29uKT0+e1xuY29uc3QgcmVqZWN0aW9uPWhhcmRlbihQcm9taXNlLnJlamVjdChyZWFzb24pKTtcbnZvaWQgRS53aGVuKHJlamVjdGlvbixzaW5rLHNpbmspO1xucmV0dXJuIHJlamVjdGlvbjtcbiB9O1xuY29uc3QgdG9vRmFyUmVqZWN0aW9uPW1ha2VRdWlldFJlamVjdGlvbihcbmhhcmRlbihFcnJvcignQ2Fubm90IHJlYWQgcGFzdCBlbmQgb2YgaXRlcmF0aW9uLicpKSk7XG5cblxuY29uc3QgICAgICAgIFB1Ymxpc2hlckk9TS5pbnRlcmZhY2UoJ1B1Ymxpc2hlcicse1xucHVibGlzaDpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpLFxuZmluaXNoOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5mYWlsOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCl9KTtcblxuXG4vL1xuJGjNj19vbmNlLlB1Ymxpc2hlckkoUHVibGlzaGVySSk7Y29uc3QgVXBkYXRlQ291bnRTaGFwZT1NLm9yKE0uYmlnaW50KCksTS5udW1iZXIoKSk7JGjNj19vbmNlLlVwZGF0ZUNvdW50U2hhcGUoVXBkYXRlQ291bnRTaGFwZSk7XG5jb25zdCAgICAgICAgU3Vic2NyaWJlckk9TS5pbnRlcmZhY2UoJ1N1YnNjcmliZXInLHtcbnN1YnNjcmliZUFmdGVyOk0uY2FsbCgpLm9wdGlvbmFsKE0uYmlnaW50KCkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZ2V0VXBkYXRlU2luY2U6TS5jYWxsKCkub3B0aW9uYWwoVXBkYXRlQ291bnRTaGFwZSkucmV0dXJucyhNLnByb21pc2UoKSl9KTskaM2PX29uY2UuU3Vic2NyaWJlckkoU3Vic2NyaWJlckkpO1xuXG5jb25zdCAgICAgICAgcHVibGlzaEtpdElLaXQ9aGFyZGVuKHtcbnB1Ymxpc2hlcjpQdWJsaXNoZXJJLFxuc3Vic2NyaWJlcjpTdWJzY3JpYmVySX0pOyRozY9fb25jZS5wdWJsaXNoS2l0SUtpdChwdWJsaXNoS2l0SUtpdCk7XG5cblxuY29uc3QgICAgICAgIEZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGU9TS5pbnRlcmZhY2UoXG4nRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3InLFxue1xuZm9yazpNLmNhbGwoKS5yZXR1cm5zKE0uYW55KCkpLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKE0uYW55KCkpLC8vXG5uZXh0Ok0uY2FsbFdoZW4oKS5yZXR1cm5zKE0uYW55KCkpfSk7JGjNj19vbmNlLkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUoRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSXRlcmFibGVFYWNoVG9waWNJPU0uaW50ZXJmYWNlKCdJdGVyYWJsZUVhY2hUb3BpYycse1xuc3Vic2NyaWJlQWZ0ZXI6XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoU3Vic2NyaWJlckkpLm1ldGhvZEd1YXJkcy5zdWJzY3JpYmVBZnRlcixcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06TS5jYWxsKCkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvcicpKX0pOyRozY9fb25jZS5JdGVyYWJsZUVhY2hUb3BpY0koSXRlcmFibGVFYWNoVG9waWNJKTtcblxuXG5cbmNvbnN0ICAgICAgICBJdGVyYWJsZUxhdGVzdFRvcGljST1NLmludGVyZmFjZSgnSXRlcmFibGVMYXRlc3RUb3BpYycse1xuZ2V0VXBkYXRlU2luY2U6XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoU3Vic2NyaWJlckkpLm1ldGhvZEd1YXJkcy5nZXRVcGRhdGVTaW5jZSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06TS5jYWxsKCkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvcicpKX0pO1xuXG5cblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLkl0ZXJhYmxlTGF0ZXN0VG9waWNJKEl0ZXJhYmxlTGF0ZXN0VG9waWNJKTtcbmNvbnN0IHdlYWtNZW1vaXplVW5hcnk9KGZuKT0+e1xuY29uc3QgY2FjaGU9bmV3IFdlYWtNYXAoKTtcbnJldHVybihhcmcpPT57XG4vKiAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9hcmc9YXJnO1xuaWYoY2FjaGUuaGFzKG9hcmcpKXtcbnJldHVybiBjYWNoZS5nZXQob2FyZyk7XG4gfVxuY29uc3QgcmVzdWx0PWZuKGFyZyk7XG5jYWNoZS5zZXQob2FyZyxyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VVcGRhdGVSZWNvcmRGcm9tUHVibGljYXRpb25SZWNvcmQ9KHJlY29yZCk9PntcbmNvbnN0e1xuaGVhZDp7dmFsdWUsZG9uZX0sXG5wdWJsaXNoQ291bnR9PVxucmVjb3JkO1xuaWYoZG9uZSl7XG4vL1xucmV0dXJuIGhhcmRlbih7dmFsdWUsdXBkYXRlQ291bnQ6dW5kZWZpbmVkfSk7XG4gfVxucmV0dXJuIGhhcmRlbih7dmFsdWUsdXBkYXRlQ291bnQ6cHVibGlzaENvdW50fSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQdWJsaXNoS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHRhaWxQO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdGFpbFI7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG5cbmxldCBjdXJyZW50UHVibGlzaENvdW50PTBuO1xubGV0IGN1cnJlbnRQPXRhaWxQO1xuY29uc3QgYWR2YW5jZUN1cnJlbnQ9KGRvbmUsdmFsdWUscmVqZWN0aW9uKT0+e1xuaWYodGFpbFI9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgc3RhdGUgYWZ0ZXIgdGVybWluYXRpb24uJyk7XG4gfVxuXG5jdXJyZW50UHVibGlzaENvdW50Kz0xbjtcbmN1cnJlbnRQPXRhaWxQO1xuY29uc3QgcmVzb2x2ZUN1cnJlbnQ9dGFpbFI7XG5cbmlmKGRvbmUpe1xudGFpbFA9dG9vRmFyUmVqZWN0aW9uO1xudGFpbFI9dW5kZWZpbmVkO1xuIH1lbHNle1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xuIH1cblxuaWYocmVqZWN0aW9uKXtcbnJlc29sdmVDdXJyZW50KHJlamVjdGlvbik7XG4gfWVsc2V7XG5yZXNvbHZlQ3VycmVudChcbmhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudDpjdXJyZW50UHVibGlzaENvdW50LFxudGFpbDp0YWlsUH0pKTtcblxuXG4gfVxuIH07XG5cbmNvbnN0IG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZD13ZWFrTWVtb2l6ZVVuYXJ5KFxubWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZCk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qgc3Vic2NyaWJlcj1GYXIoJ1N1YnNjcmliZXInLHtcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQ9LTFuKT0+e1xuYXNzZXJ0LnR5cGVvZihwdWJsaXNoQ291bnQsJ2JpZ2ludCcpO1xuaWYocHVibGlzaENvdW50PT09Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gdGFpbFA7XG4gfWVsc2UgaWYocHVibGlzaENvdW50PGN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIGN1cnJlbnRQO1xuIH1lbHNle1xudGhyb3cgRXJyb3IoXG4nc3Vic2NyaWJlQWZ0ZXIgYXJndW1lbnQgbXVzdCBiZSBhIHByZXZpb3VzbHktaXNzdWVkIHB1Ymxpc2hDb3VudC4nKTtcblxuIH1cbiB9LFxuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50KT0+e1xuaWYodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKS50aGVuKG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZCk7XG4gfVxudXBkYXRlQ291bnQ9QmlnSW50KHVwZGF0ZUNvdW50KTtcbnJldHVybihcbnN1YnNjcmliZXJcbi8vXG4vL1xuLy9cbi5zdWJzY3JpYmVBZnRlcih1cGRhdGVDb3VudClcbi8vXG4vL1xuLnRoZW4oKCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UoKSkpO1xuXG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVibGlzaGVyPUZhcignUHVibGlzaGVyJyx7XG5wdWJsaXNoOih2YWx1ZSk9PntcbmFkdmFuY2VDdXJyZW50KGZhbHNlLHZhbHVlKTtcbiB9LFxuZmluaXNoOihmaW5hbFZhbHVlKT0+e1xuYWR2YW5jZUN1cnJlbnQodHJ1ZSxmaW5hbFZhbHVlKTtcbiB9LFxuZmFpbDoocmVhc29uKT0+e1xuYWR2YW5jZUN1cnJlbnQodHJ1ZSx1bmRlZmluZWQsbWFrZVF1aWV0UmVqZWN0aW9uKHJlYXNvbikpO1xuIH19KTtcblxucmV0dXJuIGhhcmRlbih7cHVibGlzaGVyLHN1YnNjcmliZXJ9KTtcbiB9OyRozY9fb25jZS5tYWtlUHVibGlzaEtpdChtYWtlUHVibGlzaEtpdCk7XG5oYXJkZW4obWFrZVB1Ymxpc2hLaXQpO1xuXG5jb25zdCBEdXJhYmxlUHVibGlzaEtpdFN0YXRlU2hhcGU9aGFyZGVuKHtcbnZhbHVlRHVyYWJpbGl0eTpNLmFueSgpLFxucHVibGlzaENvdW50Ok0uYW55KCksXG5zdGF0dXM6TS5hbnkoKSxcbmhhc1ZhbHVlOk0uYW55KCksXG52YWx1ZTpNLmFueSgpfSk7XG5cblxuLy9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgaW5pdER1cmFibGVQdWJsaXNoS2l0U3RhdGU9KG9wdGlvbnM9e30pPT57XG5jb25zdHt2YWx1ZUR1cmFiaWxpdHk9J21hbmRhdG9yeSd9PW9wdGlvbnM7XG5hc3NlcnQuZXF1YWwodmFsdWVEdXJhYmlsaXR5LCdtYW5kYXRvcnknKTtcbnJldHVybntcbi8vXG52YWx1ZUR1cmFiaWxpdHksXG5cbi8vXG5wdWJsaXNoQ291bnQ6MG4sXG5zdGF0dXM6J2xpdmUnLC8vXG5cbi8vXG4vL1xuLy9cbmhhc1ZhbHVlOmZhbHNlLFxudmFsdWU6dW5kZWZpbmVkfTtcblxuIH07XG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKlxuXG5cbiAqL1xuY29uc3QgZ2V0RXBoZW1lcmFsS2V5PShmYWNldHMpPT5mYWNldHMucHVibGlzaGVyO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YT1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcHJvdmlkZUN1cnJlbnRQPShzdGF0ZSxmYWNldHMsdGFpbCk9PntcbmNvbnN0IGVwaGVtZXJhbEtleT1nZXRFcGhlbWVyYWxLZXkoZmFjZXRzKTtcbmNvbnN0IGZvdW5kRGF0YT1kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuZ2V0KGVwaGVtZXJhbEtleSk7XG5jb25zdCBjdXJyZW50UD1mb3VuZERhdGEmJmZvdW5kRGF0YS5jdXJyZW50UDtcbmlmKGN1cnJlbnRQKXtcbnJldHVybiBjdXJyZW50UDtcbiB9XG5cbmNvbnN0e3B1Ymxpc2hDb3VudCxzdGF0dXMsaGFzVmFsdWUsdmFsdWV9PXN0YXRlO1xuaWYoIWhhc1ZhbHVlKXtcbmFzc2VydChzdGF0dXM9PT0nbGl2ZScpO1xucmV0dXJuIHRhaWw7XG4gfVxuaWYoc3RhdHVzPT09J2xpdmUnfHxzdGF0dXM9PT0nZmluaXNoZWQnKXtcbmNvbnN0IGNlbGw9aGFyZGVuKHtcbmhlYWQ6e3ZhbHVlLGRvbmU6c3RhdHVzIT09J2xpdmUnfSxcbnB1Ymxpc2hDb3VudCxcbnRhaWx9KTtcblxucmV0dXJuIEUucmVzb2x2ZShjZWxsKTtcbiB9ZWxzZSBpZihzdGF0dXM9PT0nZmFpbGVkJyl7XG5yZXR1cm4gbWFrZVF1aWV0UmVqZWN0aW9uKHZhbHVlKTtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYEludmFsaWQgZHVyYWJsZSBwcm9taXNlIGtpdCBzdGF0dXM6ICR7cShzdGF0dXMpfWA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhPShzdGF0ZSxmYWNldHMpPT57XG5jb25zdCBlcGhlbWVyYWxLZXk9Z2V0RXBoZW1lcmFsS2V5KGZhY2V0cyk7XG5jb25zdCBmb3VuZERhdGE9ZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLmdldChlcGhlbWVyYWxLZXkpO1xuaWYoZm91bmREYXRhKXtcbnJldHVybiBmb3VuZERhdGE7XG4gfVxuXG5jb25zdHtzdGF0dXN9PXN0YXRlO1xubGV0IHRhaWxQO1xubGV0IHRhaWxSO1xuaWYoc3RhdHVzPT09J2xpdmUnKXtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcbnZvaWQgRS53aGVuKHRhaWxQLHNpbmssc2luayk7XG4gfWVsc2UgaWYoc3RhdHVzPT09J2ZpbmlzaGVkJ3x8c3RhdHVzPT09J2ZhaWxlZCcpe1xudGFpbFA9dG9vRmFyUmVqZWN0aW9uO1xuIH1lbHNle1xudGhyb3cgRmFpbCBgSW52YWxpZCBkdXJhYmxlIHByb21pc2Uga2l0IHN0YXR1czogJHtxKHN0YXR1cyl9YDtcbiB9XG4vL1xuY29uc3Qgb2JqPWhhcmRlbih7Y3VycmVudFA6dW5kZWZpbmVkLHRhaWxQLHRhaWxSfSk7XG5kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuc2V0KGVwaGVtZXJhbEtleSxvYmopO1xucmV0dXJuIG9iajtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0PShjb250ZXh0LHZhbHVlLHRhcmdldFN0YXR1cz0nbGl2ZScpPT57XG5jb25zdHtzdGF0ZSxmYWNldHN9PWNvbnRleHQ7XG5jb25zdHt2YWx1ZUR1cmFiaWxpdHksc3RhdHVzfT1zdGF0ZTtcbmlmKHN0YXR1cyE9PSdsaXZlJyl7XG50aHJvdyBFcnJvcignQ2Fubm90IHVwZGF0ZSBzdGF0ZSBhZnRlciB0ZXJtaW5hdGlvbi4nKTtcbiB9XG5jb25zdCBkb25lPXRhcmdldFN0YXR1cyE9PSdsaXZlJztcbmlmKGRvbmV8fHZhbHVlRHVyYWJpbGl0eT09PSdtYW5kYXRvcnknKXtcbmNhbkJlRHVyYWJsZSh2YWx1ZSl8fEZhaWwgYENhbm5vdCBhY2NlcHQgbm9uLWR1cmFibGUgdmFsdWU6ICR7dmFsdWV9YDtcbiB9XG5jb25zdHt0YWlsUDpvbGRUYWlsUCx0YWlsUjpyZXNvbHZlT2xkVGFpbH09XG5wcm92aWRlRHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhKHN0YXRlLGZhY2V0cyk7XG5hc3NlcnQudHlwZW9mKHJlc29sdmVPbGRUYWlsLCdmdW5jdGlvbicpO1xuXG5jb25zdCBwdWJsaXNoQ291bnQ9c3RhdGUucHVibGlzaENvdW50KzFuO1xuc3RhdGUucHVibGlzaENvdW50PXB1Ymxpc2hDb3VudDtcblxubGV0IHRhaWxQO1xubGV0IHRhaWxSO1xuaWYoZG9uZSl7XG5zdGF0ZS5zdGF0dXM9dGFyZ2V0U3RhdHVzO1xudGFpbFA9dG9vRmFyUmVqZWN0aW9uO1xudGFpbFI9dW5kZWZpbmVkO1xuIH1lbHNle1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xudm9pZCBFLndoZW4odGFpbFAsc2luayxzaW5rKTtcbiB9XG5cbmxldCBjdXJyZW50UDtcbmlmKHRhcmdldFN0YXR1cz09PSdmYWlsZWQnKXtcbnN0YXRlLmhhc1ZhbHVlPXRydWU7XG5zdGF0ZS52YWx1ZT12YWx1ZTtcbmNvbnN0IHJlamVjdGlvbj1tYWtlUXVpZXRSZWplY3Rpb24odmFsdWUpO1xucmVzb2x2ZU9sZFRhaWwocmVqZWN0aW9uKTtcbiB9ZWxzZXtcbi8vXG4vL1xuaWYoZG9uZXx8dmFsdWVEdXJhYmlsaXR5IT09J2lnbm9yZWQnJiZjYW5CZUR1cmFibGUodmFsdWUpKXtcbnN0YXRlLmhhc1ZhbHVlPXRydWU7XG5zdGF0ZS52YWx1ZT12YWx1ZTtcbiB9ZWxzZXtcbnN0YXRlLmhhc1ZhbHVlPWZhbHNlO1xuc3RhdGUudmFsdWU9dW5kZWZpbmVkO1xuLy9cbmN1cnJlbnRQPW9sZFRhaWxQO1xuIH1cblxucmVzb2x2ZU9sZFRhaWwoXG5oYXJkZW4oe1xuaGVhZDp7dmFsdWUsZG9uZX0sXG5wdWJsaXNoQ291bnQsXG50YWlsOnRhaWxQfSkpO1xuXG5cbiB9XG5cbmR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5zZXQoXG5nZXRFcGhlbWVyYWxLZXkoZmFjZXRzKSxcbmhhcmRlbih7Y3VycmVudFAsdGFpbFAsdGFpbFJ9KSk7XG5cbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdD0oYmFnZ2FnZSxraW5kTmFtZSk9Pntcbi8vXG4vL1xuY29uc3QgbWFrZU1lbW9pemVkVXBkYXRlUmVjb3JkPW1ha2VVcGRhdGVSZWNvcmRGcm9tUHVibGljYXRpb25SZWNvcmQ7XG5cbi8qXG5cbiAgICovXG5yZXR1cm4gcHJlcGFyZUV4b0NsYXNzS2l0KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxucHVibGlzaEtpdElLaXQsXG5pbml0RHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZSxcbntcbi8vXG4vL1xucHVibGlzaGVyOntcbnB1Ymxpc2godmFsdWUpe1xuYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0KHRoaXMsdmFsdWUpO1xuIH0sXG5maW5pc2goZmluYWxWYWx1ZSl7XG5hZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQodGhpcyxmaW5hbFZhbHVlLCdmaW5pc2hlZCcpO1xuIH0sXG5mYWlsKHJlYXNvbil7XG5hZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQodGhpcyxyZWFzb24sJ2ZhaWxlZCcpO1xuIH19LFxuXG5cbi8vXG4vL1xuc3Vic2NyaWJlcjp7XG5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQ9LTFuKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcbmNvbnN0e3B1Ymxpc2hDb3VudDpjdXJyZW50UHVibGlzaENvdW50fT1zdGF0ZTtcbmNvbnN0e2N1cnJlbnRQLHRhaWxQfT1wcm92aWRlRHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhKFxuc3RhdGUsXG5mYWNldHMpO1xuXG5pZihwdWJsaXNoQ291bnQ9PT1jdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiB0YWlsUDtcbiB9ZWxzZSBpZihwdWJsaXNoQ291bnQ8Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gY3VycmVudFB8fHByb3ZpZGVDdXJyZW50UChzdGF0ZSxmYWNldHMsdGFpbFApO1xuIH1lbHNle1xudGhyb3cgRXJyb3IoXG4nc3Vic2NyaWJlQWZ0ZXIgYXJndW1lbnQgbXVzdCBiZSBhIHByZXZpb3VzbHktaXNzdWVkIHB1Ymxpc2hDb3VudC4nKTtcblxuIH1cbiB9LFxuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpe1xuY29uc3R7XG5mYWNldHM6e3N1YnNjcmliZXJ9fT1cbnRoaXM7XG5pZih1cGRhdGVDb3VudD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gc3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcigpLnRoZW4obWFrZU1lbW9pemVkVXBkYXRlUmVjb3JkKTtcbiB9XG51cGRhdGVDb3VudD1CaWdJbnQodXBkYXRlQ291bnQpO1xucmV0dXJuKFxuc3Vic2NyaWJlclxuLy9cbi8vXG4vL1xuLnN1YnNjcmliZUFmdGVyKHVwZGF0ZUNvdW50KVxuLy9cbi8vXG4udGhlbigoKT0+c3Vic2NyaWJlci5nZXRVcGRhdGVTaW5jZSgpKSk7XG5cbiB9fX0sXG5cblxue1xuc3RhdGVTaGFwZTpEdXJhYmxlUHVibGlzaEtpdFN0YXRlU2hhcGV9KTtcblxuXG4gfTskaM2PX29uY2UucHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCk7XG5oYXJkZW4ocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KTtcblxuY29uc3QgICAgICAgIFN1YnNjcmliZXJTaGFwZT1NLnJlbW90YWJsZSgnU3Vic2NyaWJlcicpOyRozY9fb25jZS5TdWJzY3JpYmVyU2hhcGUoU3Vic2NyaWJlclNoYXBlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlB1Ymxpc2hlckkiOlsiUHVibGlzaGVySSJdLCJVcGRhdGVDb3VudFNoYXBlIjpbIlVwZGF0ZUNvdW50U2hhcGUiXSwiU3Vic2NyaWJlckkiOlsiU3Vic2NyaWJlckkiXSwicHVibGlzaEtpdElLaXQiOlsicHVibGlzaEtpdElLaXQiXSwiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSI6WyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIl0sIkl0ZXJhYmxlRWFjaFRvcGljSSI6WyJJdGVyYWJsZUVhY2hUb3BpY0kiXSwiSXRlcmFibGVMYXRlc3RUb3BpY0kiOlsiSXRlcmFibGVMYXRlc3RUb3BpY0kiXSwibWFrZVB1Ymxpc2hLaXQiOlsibWFrZVB1Ymxpc2hLaXQiXSwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IjpbInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCJdLCJTdWJzY3JpYmVyU2hhcGUiOlsiU3Vic2NyaWJlclNoYXBlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKidGFwRCAAAEQgAAEQAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N0b3JlZC1ub3RpZmllci5qc3siaW1wb3J0cyI6WyJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsIkBlbmRvL2ZhciIsIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlU3RvcmVkTm90aWZpZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLEUsRmFyLG9ic2VydmVOb3RpZmllcjskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFzc2VydEFsbERlZmluZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QWxsRGVmaW5lZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlTm90aWZpZXJcIiwgWyRozY9fYSA9PiAob2JzZXJ2ZU5vdGlmaWVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkTm90aWZpZXI9KG5vdGlmaWVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5hc3NlcnRBbGxEZWZpbmVkKHtub3RpZmllcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyfSk7XG5cbmNvbnN0IG1hcnNoYWxsVG9TdG9yYWdlPW1ha2VTZXJpYWxpemVUb1N0b3JhZ2Uoc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik7XG5cbm9ic2VydmVOb3RpZmllcihub3RpZmllcix7XG51cGRhdGVTdGF0ZSh2YWx1ZSl7XG5tYXJzaGFsbFRvU3RvcmFnZSh2YWx1ZSkuY2F0Y2goKHJlYXNvbik9PlxuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgZmFpbGVkIHRvIHVwZGF0ZVN0YXRlJyxyZWFzb24pKTtcblxuIH0sXG5mYWlsKHJlYXNvbil7XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBmYWlsZWQgdG8gaXRlcmF0ZScscmVhc29uKTtcbiB9fSkuXG5jYXRjaCgocmVhc29uKT0+e1xuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgaGFsdGVkIGl0ZXJhdGlvbicscmVhc29uKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZWROb3RpZmllcj1GYXIoJ1N0b3JlZE5vdGlmaWVyJyx7XG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT5FKG5vdGlmaWVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5nZXRQYXRoOigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRQYXRoKCksXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcn0pO1xuXG5yZXR1cm4gc3RvcmVkTm90aWZpZXI7XG4gfTskaM2PX29uY2UubWFrZVN0b3JlZE5vdGlmaWVyKG1ha2VTdG9yZWROb3RpZmllcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3RvcmVkTm90aWZpZXIiOlsibWFrZVN0b3JlZE5vdGlmaWVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKcTAjPtFQAA7RUAAD0AAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N0b3Jlc3ViLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLCIuL3B1Ymxpc2gta2l0LmpzIiwiLi9zdWJzY3JpYmVyLmpzIiwiLi9zdWJzY3JpYmUuanMiXSwiZXhwb3J0cyI6WyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiLCJtYWtlU3RvcmVkUHVibGlzaEtpdCIsIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiLCJtYWtlU3RvcmVkU3Vic2NyaWJlciIsIm1ha2VTdG9yZWRTdWJzY3JpcHRpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxGYXIsbWFrZU1hcnNoYWwsYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLG9ic2VydmVJdGVyYXRpb24sbWFrZVB1Ymxpc2hLaXQsbWFrZVN1YnNjcmlwdGlvbktpdCxzdWJzY3JpYmVFYWNoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wiYXNzZXJ0QWxsRGVmaW5lZFwiLCBbJGjNj19hID0+IChhc3NlcnRBbGxEZWZpbmVkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qc1wiLCBbW1wibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZVwiLCBbJGjNj19hID0+IChtYWtlU2VyaWFsaXplVG9TdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc1wiLCBbW1wib2JzZXJ2ZUl0ZXJhdGlvblwiLCBbJGjNj19hID0+IChvYnNlcnZlSXRlcmF0aW9uID0gJGjNj19hKV1dXV0sW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbW1wibWFrZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZXIuanNcIiwgW1tcIm1ha2VTdWJzY3JpcHRpb25LaXRcIiwgWyRozY9fYSA9PiAobWFrZVN1YnNjcmlwdGlvbktpdCA9ICRozY9fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVFYWNoXCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUVhY2ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGZvckVhY2hQdWJsaWNhdGlvblJlY29yZD1hc3luYyhzdWJzY3JpYmVyLGNvbnN1bWVWYWx1ZSk9Pntcbi8vXG4vL1xuY29uc3QgaXRlcmF0b3I9c3Vic2NyaWJlRWFjaChzdWJzY3JpYmVyKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxubGV0IGZpbmlzaGVkPWZhbHNlO1xuYXdhaXQgbnVsbDtcbndoaWxlKCFmaW5pc2hlZCl7XG5jb25zdHt2YWx1ZSxkb25lfT1hd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5hd2FpdCBjb25zdW1lVmFsdWUodmFsdWUpO1xuZmluaXNoZWQ9ISFkb25lO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkKGZvckVhY2hQdWJsaWNhdGlvblJlY29yZCk7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFN1YnNjcmliZXI9KHN1YnNjcmliZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmFzc2VydEFsbERlZmluZWQoe3N1YnNjcmliZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcn0pO1xuXG5jb25zdCBtYXJzaGFsbFRvU3RvcmFnZT1tYWtlU2VyaWFsaXplVG9TdG9yYWdlKHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpO1xuXG4vL1xuZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkKHN1YnNjcmliZXIsbWFyc2hhbGxUb1N0b3JhZ2UpLmNhdGNoKChlcnIpPT57XG4vL1xuLy9cbmNvbnNvbGUuZXJyb3IoJ1N0b3JlZFN1YnNjcmliZXIgZmFpbGVkIHRvIGl0ZXJhdGUnLGVycik7XG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdW5zZXJpYWxpemVyPUZhcigndW5zZXJpYWxpemVyJyx7XG5mcm9tQ2FwRGF0YTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSksXG51bnNlcmlhbGl6ZTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZXN1Yj1GYXIoJ1N0b3JlZFN1YnNjcmliZXInLHtcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQpPT5zdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCksXG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT5zdWJzY3JpYmVyLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KSxcbmdldFBhdGg6KCk9PkUoc3RvcmFnZU5vZGUpLmdldFBhdGgoKSxcbmdldFN0b3JlS2V5OigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRTdG9yZUtleSgpLFxuZ2V0VW5zZXJpYWxpemVyOigpPT51bnNlcmlhbGl6ZXJ9KTtcblxucmV0dXJuIHN0b3Jlc3ViO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTdG9yZWRTdWJzY3JpYmVyKG1ha2VTdG9yZWRTdWJzY3JpYmVyKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkU3Vic2NyaXB0aW9uPShcbnN1YnNjcmlwdGlvbixcbnN0b3JhZ2VOb2RlLFxubWFyc2hhbGxlcj1tYWtlTWFyc2hhbCh1bmRlZmluZWQsdW5kZWZpbmVkLHtcbm1hcnNoYWxTYXZlRXJyb3I6KCk9PnsgfSxcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KSk9PlxuXG57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplcj1GYXIoJ3Vuc2VyaWFsaXplcicse1xuZnJvbUNhcERhdGE6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpLFxudW5zZXJpYWxpemU6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpfSk7XG5cblxuLy9cbmxldCBwdWJsaXNoRmFpbGVkPWZhbHNlO1xubGV0IHB1Ymxpc2hFeGNlcHRpb247XG5cbmNvbnN0IGZhaWw9KGVycik9PntcbnB1Ymxpc2hGYWlsZWQ9dHJ1ZTtcbnB1Ymxpc2hFeGNlcHRpb249ZXJyO1xuIH07XG5cbi8vXG4vL1xuY29uc3QgcHVibGlzaFZhbHVlPShvYmopPT57XG5hc3NlcnQoc3RvcmFnZU5vZGUpO1xuaWYocHVibGlzaEZhaWxlZCl7XG4vL1xudGhyb3cgcHVibGlzaEV4Y2VwdGlvbjtcbiB9XG5cbi8vXG5FKG1hcnNoYWxsZXIpLlxudG9DYXBEYXRhKG9iaikuXG50aGVuKChzZXJpYWxpemVkKT0+e1xuY29uc3QgZW5jb2RlZD1KU09OLnN0cmluZ2lmeShzZXJpYWxpemVkKTtcbnJldHVybiBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShlbmNvZGVkKTtcbiB9KS5cbmNhdGNoKGZhaWwpO1xuIH07XG5cbmlmKHN0b3JhZ2VOb2RlKXtcbi8vXG5vYnNlcnZlSXRlcmF0aW9uKHN1YnNjcmlwdGlvbix7XG51cGRhdGVTdGF0ZTpwdWJsaXNoVmFsdWUsXG5maW5pc2g6cHVibGlzaFZhbHVlfSkuXG5jYXRjaChmYWlsKTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RvcmVzdWI9RmFyKCdTdG9yZWRTdWJzY3JpcHRpb24nLHtcbi8vXG5nZXRTdG9yZUtleTphc3luYygpPT57XG5pZighc3RvcmFnZU5vZGUpe1xucmV0dXJuIGhhcmRlbih7c3Vic2NyaXB0aW9ufSk7XG4gfVxuY29uc3Qgc3RvcmVLZXk9YXdhaXQgRShzdG9yYWdlTm9kZSkuZ2V0U3RvcmVLZXkoKTtcbnJldHVybiBoYXJkZW4oey4uLnN0b3JlS2V5LHN1YnNjcmlwdGlvbn0pO1xuIH0sXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcixcbmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzOigpPT5cbnN1YnNjcmlwdGlvbi5nZXRTaGFyYWJsZVN1YnNjcmlwdGlvbkludGVybmFscygpLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c3Vic2NyaXB0aW9uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLFxuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudCk9PnN1YnNjcmlwdGlvbi5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpfSk7XG5cbnJldHVybiBzdG9yZXN1YjtcbiB9OyRozY9fb25jZS5tYWtlU3RvcmVkU3Vic2NyaXB0aW9uKG1ha2VTdG9yZWRTdWJzY3JpcHRpb24pO1xuaGFyZGVuKG1ha2VTdG9yZWRTdWJzY3JpcHRpb24pO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkUHVibGlzaGVyS2l0PShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyLGNoaWxkUGF0aCk9PntcbmNvbnN0e3B1YmxpY2F0aW9uLHN1YnNjcmlwdGlvbn09bWFrZVN1YnNjcmlwdGlvbktpdCgpO1xuXG5pZihzdG9yYWdlTm9kZSYmY2hpbGRQYXRoKXtcbnN0b3JhZ2VOb2RlPUUoc3RvcmFnZU5vZGUpLm1ha2VDaGlsZE5vZGUoY2hpbGRQYXRoKTtcbiB9XG5cbi8vXG5jb25zdCBzdWJzY3JpYmVyPW1ha2VTdG9yZWRTdWJzY3JpcHRpb24oXG5zdWJzY3JpcHRpb24sXG5zdG9yYWdlTm9kZSxcbm1hcnNoYWxsZXIpO1xuXG5cbnJldHVybntcbnB1Ymxpc2hlcjpwdWJsaWNhdGlvbixcbnN1YnNjcmliZXJ9O1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlU3RvcmVkUHVibGlzaGVyS2l0KG1ha2VTdG9yZWRQdWJsaXNoZXJLaXQpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRQdWJsaXNoS2l0PShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKT0+e1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VQdWJsaXNoS2l0KCk7XG5cbnJldHVybntcbnB1Ymxpc2hlcixcbi8vXG5zdWJzY3JpYmVyOm1ha2VTdG9yZWRTdWJzY3JpYmVyKHN1YnNjcmliZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcil9O1xuXG4gfTskaM2PX29uY2UubWFrZVN0b3JlZFB1Ymxpc2hLaXQobWFrZVN0b3JlZFB1Ymxpc2hLaXQpO1xuaGFyZGVuKG1ha2VTdG9yZWRQdWJsaXNoS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCI6WyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiXSwibWFrZVN0b3JlZFN1YnNjcmliZXIiOlsibWFrZVN0b3JlZFN1YnNjcmliZXIiXSwibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiI6WyJtYWtlU3RvcmVkU3Vic2NyaXB0aW9uIl0sIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiOlsibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCJdLCJtYWtlU3RvcmVkUHVibGlzaEtpdCI6WyJtYWtlU3RvcmVkUHVibGlzaEtpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAVB17zIRIAACESAAA+AAAAQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zdWJzY3JpYmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzIl0sImV4cG9ydHMiOlsic3Vic2NyaWJlIiwic3Vic2NyaWJlRWFjaCIsInN1YnNjcmliZUxhdGVzdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLEZhaWwsYW5ub3RhdGVFcnJvcixFLEZhcixpc09iamVjdCxpc1VwZ3JhZGVEaXNjb25uZWN0aW9uOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzXCIsIFtbXCJpc1VwZ3JhZGVEaXNjb25uZWN0aW9uXCIsIFskaM2PX2EgPT4gKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBzaW5rPSgpPT57IH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcmVjb25uZWN0QXNOZWVkZWQ9YXN5bmMoZ2V0dGVyLHNlZWQ9W10pPT57XG5sZXQgZGlzY29ubmVjdGlvbjtcbmxldCBsYXN0VmVyc2lvbj0tSW5maW5pdHk7XG4vL1xuYXdhaXQgbnVsbDtcbmZvcihsZXQgaT0wOztpKz0xKXtcbnRyeXtcbmNvbnN0IHJlc3VsdFA9aTxzZWVkLmxlbmd0aD9zZWVkW2ldOmdldHRlcigpO1xuY29uc3QgcmVzdWx0PWF3YWl0IHJlc3VsdFA7XG5yZXR1cm4gcmVzdWx0O1xuIH1jYXRjaChlcnIpe1xuaWYoaXNVcGdyYWRlRGlzY29ubmVjdGlvbihlcnIpKXtcbmlmKCFkaXNjb25uZWN0aW9uKXtcbmRpc2Nvbm5lY3Rpb249ZXJyO1xuIH1cbmNvbnN0e2luY2FybmF0aW9uTnVtYmVyOnZlcnNpb259PWVycjtcbmlmKHZlcnNpb24+bGFzdFZlcnNpb24pe1xuLy9cbi8vXG4vL1xubGFzdFZlcnNpb249dmVyc2lvbjtcbmNvbnRpbnVlO1xuIH1cbiB9XG4vL1xuLy9cbi8vXG5pZihpc09iamVjdChlcnIpJiZkaXNjb25uZWN0aW9uJiZkaXNjb25uZWN0aW9uIT09ZXJyKXtcbnRyeXtcbmFubm90YXRlRXJyb3IoXG5lcnIsXG5YIGBBdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSBkaXNjb25uZWN0aW9uOiAke2Rpc2Nvbm5lY3Rpb259YCk7XG5cbiB9Y2F0Y2goX2Vycil7XG4vL1xuIH1cbiB9XG50aHJvdyBlcnI7XG4gfVxuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmU9KGl0UCk9PlxuRmFyKCdBc3luY0l0ZXJhYmxlJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT57XG5jb25zdCBpdD1FKGl0UClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5jb25zdCBzZWxmPUZhcignQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDphc3luYygpPT5FKGl0KS5uZXh0KCl9KTtcblxucmV0dXJuIHNlbGY7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uuc3Vic2NyaWJlKHN1YnNjcmliZSk7XG5jb25zdCBtYWtlRWFjaEl0ZXJhdG9yPSh0b3BpYyxuZXh0Q2VsbFApPT57XG4vL1xuLy9cbmNvbnN0IHNlbGY9RmFyKCdFYWNoSXRlcmF0b3InLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnNlbGYsXG5uZXh0OigpPT57XG5jb25zdHtcbmhlYWQ6cmVzdWx0UCxcbnB1Ymxpc2hDb3VudDpwdWJsaXNoQ291bnRQLFxudGFpbDp0YWlsUH09XG5FLmdldChuZXh0Q2VsbFApO1xuXG4vL1xuLy9cbmNvbnN0IGdldFN1Y2Nlc3Nvcj1hc3luYygpPT57XG5jb25zdCBwdWJsaXNoQ291bnQ9YXdhaXQgcHVibGlzaENvdW50UDtcbmFzc2VydC50eXBlb2YocHVibGlzaENvdW50LCdiaWdpbnQnKTtcbmNvbnN0IHN1Y2Nlc3Nvcj1hd2FpdCBFKHRvcGljKS5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpO1xuY29uc3QgbmV3UHVibGlzaENvdW50PXN1Y2Nlc3Nvci5wdWJsaXNoQ291bnQ7XG5pZihuZXdQdWJsaXNoQ291bnQhPT1wdWJsaXNoQ291bnQrMW4pe1xuRmFpbCBgZWFjaEl0ZXJhdG9yIGJyb2tlbiBieSBnYXAgZnJvbSBwdWJsaXNoQ291bnQgJHtwdWJsaXNoQ291bnR9IHRvICR7bmV3UHVibGlzaENvdW50fWA7XG4gfVxucmV0dXJuIHN1Y2Nlc3NvcjtcbiB9O1xuXG4vL1xuLy9cbm5leHRDZWxsUD1yZWNvbm5lY3RBc05lZWRlZChnZXRTdWNjZXNzb3IsW3RhaWxQXSk7XG5cbi8vXG4vL1xuLy9cbi8vXG52b2lkIEUud2hlbihwdWJsaXNoQ291bnRQLHNpbmssc2luayk7XG52b2lkIEUud2hlbihuZXh0Q2VsbFAsc2luayxzaW5rKTtcbnJldHVybiByZXN1bHRQO1xuIH0sXG5mb3JrOigpPT5tYWtlRWFjaEl0ZXJhdG9yKHRvcGljLG5leHRDZWxsUCl9KTtcblxucmV0dXJuIHNlbGY7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmVFYWNoPSh0b3BpYyk9PntcbmNvbnN0IGl0ZXJhYmxlPUZhcignRWFjaEl0ZXJhYmxlJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT57XG5jb25zdCBmaXJzdENlbGxQPXJlY29ubmVjdEFzTmVlZGVkKCgpPT5FKHRvcGljKS5zdWJzY3JpYmVBZnRlcigpKTtcbnJldHVybiBtYWtlRWFjaEl0ZXJhdG9yKHRvcGljLGZpcnN0Q2VsbFApO1xuIH19KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLnN1YnNjcmliZUVhY2goc3Vic2NyaWJlRWFjaCk7XG5oYXJkZW4oc3Vic2NyaWJlRWFjaCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjbG9uZUxhdGVzdEl0ZXJhdG9yPSh0b3BpYyxsb2NhbFVwZGF0ZUNvdW50LHRlcm1pbmFsUmVzdWx0KT0+e1xubGV0IG11dGV4PVByb21pc2UucmVzb2x2ZSgpO1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVSZXF1ZXN0TmV4dFJlc3VsdD1hc3luYygpPT57XG5pZih0ZXJtaW5hbFJlc3VsdCl7XG4vL1xuLy9cbnJldHVybiB0ZXJtaW5hbFJlc3VsdDtcbiB9XG5cbi8vXG4vL1xuY29uc3R7dmFsdWUsdXBkYXRlQ291bnR9PWF3YWl0IHJlY29ubmVjdEFzTmVlZGVkKCgpPT5cbkUodG9waWMpLmdldFVwZGF0ZVNpbmNlKGxvY2FsVXBkYXRlQ291bnQpKTtcblxuLy9cbmxvY2FsVXBkYXRlQ291bnQ9dXBkYXRlQ291bnQ7XG5cbi8vXG5pZih1cGRhdGVDb3VudD09PXVuZGVmaW5lZCl7XG50ZXJtaW5hbFJlc3VsdD1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZX0pO1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9O1xuXG5jb25zdCBzZWxmPUZhcignTGF0ZXN0SXRlcmF0b3InLHtcbmZvcms6KCk9PmNsb25lTGF0ZXN0SXRlcmF0b3IodG9waWMsbG9jYWxVcGRhdGVDb3VudCx0ZXJtaW5hbFJlc3VsdCksXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDphc3luYygpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbmlmKHRlcm1pbmFsUmVzdWx0KXtcbi8vXG4vL1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cblxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IG5leHRSZXN1bHQ9bXV0ZXgudGhlbihtYXliZVJlcXVlc3ROZXh0UmVzdWx0KTtcbm11dGV4PW5leHRSZXN1bHQudGhlbihzaW5rLHNpbmspO1xuLy9cblxucmV0dXJuIG5leHRSZXN1bHQ7XG4gfX0pO1xuXG5yZXR1cm4gc2VsZjtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBtYWtlTGF0ZXN0SXRlcmF0b3I9KHRvcGljKT0+Y2xvbmVMYXRlc3RJdGVyYXRvcih0b3BpYyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc3Vic2NyaWJlTGF0ZXN0PSh0b3BpYyk9PntcbmNvbnN0IGl0ZXJhYmxlPUZhcignTGF0ZXN0SXRlcmFibGUnLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9Pm1ha2VMYXRlc3RJdGVyYXRvcih0b3BpYyl9KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLnN1YnNjcmliZUxhdGVzdChzdWJzY3JpYmVMYXRlc3QpO1xuaGFyZGVuKHN1YnNjcmliZUxhdGVzdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdWJzY3JpYmUiOlsic3Vic2NyaWJlIl0sInN1YnNjcmliZUVhY2giOlsic3Vic2NyaWJlRWFjaCJdLCJzdWJzY3JpYmVMYXRlc3QiOlsic3Vic2NyaWJlTGF0ZXN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIdoe1/RBwAA0QcAAD8AAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N1YnNjcmliZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiLi9zdWJzY3JpYmUuanMiLCIuL3B1Ymxpc2gta2l0LmpzIiwiLi90b3BpYy5qcyJdLCJleHBvcnRzIjpbIm1ha2VTdWJzY3JpcHRpb24iLCJtYWtlU3Vic2NyaXB0aW9uS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLHN1YnNjcmliZUVhY2gsbWFrZVB1Ymxpc2hLaXQsbWFrZVBpbm5lZEhpc3RvcnlUb3BpYzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlRWFjaFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVFYWNoID0gJGjNj19hKV1dXV0sW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbW1wibWFrZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3RvcGljLmpzXCIsIFtbXCJtYWtlUGlubmVkSGlzdG9yeVRvcGljXCIsIFskaM2PX2EgPT4gKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTdWJzY3JpcHRpb249KHRvcGljKT0+e1xuY29uc3Qgc3Vic2NyaXB0aW9uPUZhcignU3Vic2NyaXB0aW9uJyx7XG4uLi5zdWJzY3JpYmVFYWNoKHRvcGljKSxcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudCk9PkUodG9waWMpLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzOmFzeW5jKCk9PnRvcGljLFxuXG5nZXRTdG9yZUtleTooKT0+aGFyZGVuKHtzdWJzY3JpcHRpb259KX0pO1xuXG5yZXR1cm4gc3Vic2NyaXB0aW9uO1xuIH07JGjNj19vbmNlLm1ha2VTdWJzY3JpcHRpb24obWFrZVN1YnNjcmlwdGlvbik7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbik7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlU3Vic2NyaXB0aW9uS2l0PSgpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuLy9cbi8vXG5cbmNvbnN0IHBpbm5lZEhpc3RvcnlUb3BpYz1tYWtlUGlubmVkSGlzdG9yeVRvcGljKHN1YnNjcmliZXIpO1xuY29uc3Qgc3Vic2NyaXB0aW9uPW1ha2VTdWJzY3JpcHRpb24ocGlubmVkSGlzdG9yeVRvcGljKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1YmxpY2F0aW9uPUZhcigncHVibGljYXRpb24nLHtcbnVwZGF0ZVN0YXRlOihub25GaW5hbFZhbHVlKT0+cHVibGlzaGVyLnB1Ymxpc2gobm9uRmluYWxWYWx1ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe3B1YmxpY2F0aW9uLHN1YnNjcmlwdGlvbn0pO1xuIH07JGjNj19vbmNlLm1ha2VTdWJzY3JpcHRpb25LaXQobWFrZVN1YnNjcmlwdGlvbktpdCk7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3Vic2NyaXB0aW9uIjpbIm1ha2VTdWJzY3JpcHRpb24iXSwibWFrZVN1YnNjcmlwdGlvbktpdCI6WyJtYWtlU3Vic2NyaXB0aW9uS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEdaGtrtAwAA7QMAADoAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3RvcGljLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFyOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGlubmVkSGlzdG9yeVRvcGljPSh0b3BpYyk9Pntcbi8vXG5cbi8vXG5jb25zdCBwaW5uZWRQdWJMaXN0PXRvcGljLnN1YnNjcmliZUFmdGVyKCk7XG5cbnJldHVybiBGYXIoJ1Bpbm5lZEhpc3RvcnlUb3BpYycse1xuc3Vic2NyaWJlQWZ0ZXI6YXN5bmMocHVibGlzaENvdW50PS0xbik9PntcbmlmKHB1Ymxpc2hDb3VudD09PS0xbil7XG5yZXR1cm4gcGlubmVkUHViTGlzdDtcbiB9XG5yZXR1cm4gdG9waWMuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KTtcbiB9LFxuZ2V0VXBkYXRlU2luY2U6YXN5bmModXBkYXRlQ291bnQ9dW5kZWZpbmVkKT0+e1xuLy9cbnJldHVybiB0b3BpYy5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCk7XG4gfX0pO1xuXG4gfTskaM2PX29uY2UubWFrZVBpbm5lZEhpc3RvcnlUb3BpYyhtYWtlUGlubmVkSGlzdG9yeVRvcGljKTtcbmhhcmRlbihtYWtlUGlubmVkSGlzdG9yeVRvcGljKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQaW5uZWRIaXN0b3J5VG9waWMiOlsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAABAAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkSzJEY4BAACOAQAAOgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zdWJzY3JpYmUuanN7ImltcG9ydHMiOlsiLi9zcmMvc3Vic2NyaWJlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvc3Vic2NyaWJlLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9zdWJzY3JpYmUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8UWFMoIGAACCBgAAQwAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS90b29scy90ZXN0U3VwcG9ydHMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3Rlc3RpbmctdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlRmFrZU1hcnNoYWxsZXIiLCJtYWtlRmFrZVN0b3JhZ2UiLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXIsbWFrZU1hcnNoYWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGYWtlU3RvcmFnZT0ocGF0aCxwdWJsaWNhdGlvbik9PntcbmxldCBzZXRWYWx1ZUNhbGxzPTA7XG5jb25zdCBmdWxsUGF0aD0gYHB1Ymxpc2guJHtwYXRofWA7XG5jb25zdCBzdG9yZUtleT1oYXJkZW4oe1xuc3RvcmVOYW1lOidzd2luZ3NldCcsXG5zdG9yZVN1YmtleTogYHN3aW5nc2V0L2RhdGE6JHtmdWxsUGF0aH1gLFxuZGF0YVByZWZpeEJ5dGVzOicnfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3JhZ2U9RmFyKCdTdG9yYWdlTm9kZScse1xuZ2V0UGF0aDooKT0+cGF0aCxcbmdldFN0b3JlS2V5OmFzeW5jKCk9PnN0b3JlS2V5LFxuc2V0VmFsdWU6YXN5bmModmFsdWUpPT57XG5zZXRWYWx1ZUNhbGxzKz0xO1xuYXNzZXJ0LnR5cGVvZih2YWx1ZSwnc3RyaW5nJyk7XG5pZihwdWJsaWNhdGlvbil7XG5wdWJsaWNhdGlvbi51cGRhdGVTdGF0ZSh2YWx1ZSk7XG4gfVxuIH0sXG5tYWtlQ2hpbGROb2RlOigpPT5zdG9yYWdlLFxuY291bnRTZXRWYWx1ZUNhbGxzOigpPT5zZXRWYWx1ZUNhbGxzfSk7XG5cbnJldHVybiBzdG9yYWdlO1xuIH07JGjNj19vbmNlLm1ha2VGYWtlU3RvcmFnZShtYWtlRmFrZVN0b3JhZ2UpO1xuaGFyZGVuKG1ha2VGYWtlU3RvcmFnZSk7XG5cbmNvbnN0ICAgICAgICBtYWtlRmFrZU1hcnNoYWxsZXI9KCk9PlxubWFrZU1hcnNoYWwodW5kZWZpbmVkLHVuZGVmaW5lZCx7XG5tYXJzaGFsU2F2ZUVycm9yOigpPT57IH19KTskaM2PX29uY2UubWFrZUZha2VNYXJzaGFsbGVyKG1ha2VGYWtlTWFyc2hhbGxlcik7XG5cbmhhcmRlbihtYWtlRmFrZU1hcnNoYWxsZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qcyI6W1siZXZlbnRMb29wSXRlcmF0aW9uIiwiZXZlbnRMb29wSXRlcmF0aW9uIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VGYWtlU3RvcmFnZSI6WyJtYWtlRmFrZVN0b3JhZ2UiXSwibWFrZUZha2VNYXJzaGFsbGVyIjpbIm1ha2VGYWtlTWFyc2hhbGxlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADIQNAGlA0AAJQNAAA3AAAAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyIsIi4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsIkBlbmRvL2V4byIsIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyIsIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLCIuL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5IiwiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyIsIm11c3RNYXRjaCIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHR5cGVsZXNzTXVzdE1hdGNoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+ICh0eXBlbGVzc011c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3N0b3JlLXV0aWxzLmpzXCIsIFtdXSxbXCJAZW5kby9leG9cIiwgW11dLFtcIi4vbGVnYWN5L2xlZ2FjeU1hcC5qc1wiLCBbXV0sW1wiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qc1wiLCBbXV0sW1wiLi90eXBlcy5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtdXN0TWF0Y2g9dHlwZWxlc3NNdXN0TWF0Y2g7JGjNj19vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzIjpbWyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIiwibWFrZVNjYWxhcldlYWtTZXRTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiOltbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTY2FsYXJTZXRTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIjpbWyJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhcldlYWtNYXBTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiOltbIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdXSwiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanMiOltbInByb3ZpZGVMYXp5IiwicHJvdmlkZUxhenkiXV0sIkBlbmRvL3BhdHRlcm5zIjpbWyJpc0tleSIsImlzS2V5Il0sWyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiXSxbImFzc2VydFNjYWxhcktleSIsImFzc2VydFNjYWxhcktleSJdLFsibWFrZUNvcHlTZXQiLCJtYWtlQ29weVNldCJdLFsiZ2V0Q29weVNldEtleXMiLCJnZXRDb3B5U2V0S2V5cyJdLFsibWFrZUNvcHlCYWciLCJtYWtlQ29weUJhZyJdLFsibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLFsiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5QmFnRW50cmllcyJdLFsibWFrZUNvcHlNYXAiLCJtYWtlQ29weU1hcCJdLFsiZ2V0Q29weU1hcEVudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyJdLFsiY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXSxbImNvZXJjZVRvQmFnRW50cmllcyIsImNvZXJjZVRvQmFnRW50cmllcyJdLFsiY29tcGFyZUtleXMiLCJjb21wYXJlS2V5cyJdLFsia2V5TFQiLCJrZXlMVCJdLFsia2V5TFRFIiwia2V5TFRFIl0sWyJrZXlFUSIsImtleUVRIl0sWyJrZXlHVEUiLCJrZXlHVEUiXSxbImtleUdUIiwia2V5R1QiXSxbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSJdLFsic2V0VW5pb24iLCJzZXRVbmlvbiJdLFsic2V0RGlzam9pbnRVbmlvbiIsInNldERpc2pvaW50VW5pb24iXSxbInNldEludGVyc2VjdGlvbiIsInNldEludGVyc2VjdGlvbiJdLFsic2V0RGlzam9pbnRTdWJ0cmFjdCIsInNldERpc2pvaW50U3VidHJhY3QiXSxbImJhZ0lzU3VwZXJiYWciLCJiYWdJc1N1cGVyYmFnIl0sWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdLFsiTSIsIk0iXSxbImdldFJhbmtDb3ZlciIsImdldFJhbmtDb3ZlciJdLFsiaXNQYXR0ZXJuIiwiaXNQYXR0ZXJuIl0sWyJhc3NlcnRQYXR0ZXJuIiwiYXNzZXJ0UGF0dGVybiJdLFsibWF0Y2hlcyIsIm1hdGNoZXMiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiaXNDb3B5TWFwIiwiaXNDb3B5TWFwIl1dLCJAZW5kby9leG8iOltbImluaXRFbXB0eSIsImluaXRFbXB0eSJdLFsiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyJdLFsiZGVmaW5lRXhvQ2xhc3NLaXQiLCJkZWZpbmVFeG9DbGFzc0tpdCJdLFsibWFrZUV4byIsIm1ha2VFeG8iXV0sIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyI6W1sibWFrZUxlZ2FjeU1hcCIsIm1ha2VMZWdhY3lNYXAiXV0sIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiOltbIm1ha2VMZWdhY3lXZWFrTWFwIiwibWFrZUxlZ2FjeVdlYWtNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADwIquuNQUAADUFAABCAAAAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9sZWdhY3kvbGVnYWN5TWFwLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VMZWdhY3lNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUxlZ2FjeU1hcD0odGFnPSdrZXknKT0+e1xuY29uc3QgbT1uZXcgTWFwKCk7XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIW0uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxubS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IG5vdCBmb3VuZDogJHtrZXl9YDtcbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4gbS5oYXMoa2V5KTtcbiB9LFxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5tLnNldChrZXksdmFsdWUpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xucmV0dXJuIG0uZ2V0KGtleSk7XG4gfSxcbnNldDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5tLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xubS5kZWxldGUoa2V5KTtcbiB9LFxua2V5czooKT0+bS5rZXlzKCksXG52YWx1ZXM6KCk9Pm0udmFsdWVzKCksXG5lbnRyaWVzOigpPT5tLmVudHJpZXMoKSxcbmdldFNpemU6KCk9Pm0uc2l6ZSxcbmNsZWFyOigpPT5tLmNsZWFyKCl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VMZWdhY3lNYXAobWFrZUxlZ2FjeU1hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeU1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTGVnYWN5TWFwIjpbIm1ha2VMZWdhY3lNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAusRN7fcEAAD3BAAARgAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZUxlZ2FjeVdlYWtNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMZWdhY3lXZWFrTWFwPSh0YWc9J2tleScpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3bT1uZXcgV2Vha01hcCgpO1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiF3bS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG53bS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IG5vdCBmb3VuZDogJHtrZXl9YDtcbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4gd20uaGFzKGtleSk7XG4gfSxcbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xud20uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmdldDooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICovd20uZ2V0KGtleSkpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xud20uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG53bS5kZWxldGUoa2V5KTtcbiB9fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTGVnYWN5V2Vha01hcChtYWtlTGVnYWN5V2Vha01hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeVdlYWtNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUxlZ2FjeVdlYWtNYXAiOlsibWFrZUxlZ2FjeVdlYWtNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAO148gpwQAACcEAAARwAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiLCIuL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsIi4vc3RvcmUtdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlTWFwU3RvcmVNZXRob2RzIiwibWFrZVNjYWxhck1hcFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFyLGFzc2VydFBhc3NhYmxlLGZpbHRlckl0ZXJhYmxlLG1hcEl0ZXJhYmxlLGNvbXBhcmVSYW5rLGFzc2VydFNjYWxhcktleSxtYWtlQ29weU1hcCxtYXRjaGVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzLG1ha2VDdXJyZW50S2V5c0tpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjNj19hID0+IChmaWx0ZXJJdGVyYWJsZSA9ICRozY9fYSldXSxbXCJtYXBJdGVyYWJsZVwiLCBbJGjNj19hID0+IChtYXBJdGVyYWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImFzc2VydFNjYWxhcktleVwiLCBbJGjNj19hID0+IChhc3NlcnRTY2FsYXJLZXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiLi9zY2FsYXJXZWFrTWFwU3RvcmUuanNcIiwgW1tcIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzXCIsIFskaM2PX2EgPT4gKG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZS11dGlscy5qc1wiLCBbW1wibWFrZUN1cnJlbnRLZXlzS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VDdXJyZW50S2V5c0tpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXBTdG9yZU1ldGhvZHM9KFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbnRhZz0na2V5Jyk9Plxue1xuY29uc3R7YXNzZXJ0VXBkYXRlT25BZGQsYXNzZXJ0VXBkYXRlT25EZWxldGUsaXRlcmFibGVLZXlzfT1cbm1ha2VDdXJyZW50S2V5c0tpdChcbigpPT5qc21hcC5rZXlzKCksXG4oayk9PmpzbWFwLmhhcyhrKSxcbmNvbXBhcmVSYW5rLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZSxcbnRhZyk7XG5cblxuLypcblxuXG5cbiAgICovXG5jb25zdCBrZXlzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+e1xuaWYoa2V5UGF0dD09PXVuZGVmaW5lZCYmdmFsdWVQYXR0PT09dW5kZWZpbmVkKXtcbnJldHVybiBpdGVyYWJsZUtleXM7XG4gfVxuY29uc3QgZmlsdGVyPShrKT0+e1xuaWYoa2V5UGF0dCE9PXVuZGVmaW5lZCYmIW1hdGNoZXMoayxrZXlQYXR0KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbmlmKHZhbHVlUGF0dCE9PXVuZGVmaW5lZCYmIW1hdGNoZXMoanNtYXAuZ2V0KGspLHZhbHVlUGF0dCkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnJldHVybiB0cnVlO1xuIH07XG5yZXR1cm4gZmlsdGVySXRlcmFibGUoaXRlcmFibGVLZXlzLGZpbHRlcik7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCB2YWx1ZXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbm1hcEl0ZXJhYmxlKGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpLChrKT0+LyogICAgICAgICAgICAqL2pzbWFwLmdldChrKSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgZW50cmllcz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFwSXRlcmFibGUoa2V5cyhrZXlQYXR0LHZhbHVlUGF0dCksKGspPT5bXG5rLFxuLyogICAgICAgICAgICAqL2pzbWFwLmdldChrKV0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuLi4ubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMoXG5qc21hcCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbnRhZyksXG5cbmtleXMsXG52YWx1ZXMsXG5lbnRyaWVzLFxuXG5zbmFwc2hvdDooa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFrZUNvcHlNYXAoZW50cmllcyhrZXlQYXR0LHZhbHVlUGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5rZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQ/XG5qc21hcC5zaXplOlxuWy4uLmtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+e1xuaWYoa2V5UGF0dD09PXVuZGVmaW5lZCYmdmFsdWVQYXR0PT09dW5kZWZpbmVkKXtcbmpzbWFwLmNsZWFyKCk7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiBrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSl7XG5qc21hcC5kZWxldGUoa2V5KTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VNYXBTdG9yZU1ldGhvZHMobWFrZU1hcFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhck1hcFN0b3JlPShcbnRhZz0na2V5JyxcbntrZXlTaGFwZT11bmRlZmluZWQsdmFsdWVTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc21hcD1uZXcgTWFwKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4odmFsdWVTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLVk9rVG9TZXQ9KF9rZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbih2YWx1ZSk7XG5cbmFzc2VydFBhc3NhYmxlKHZhbHVlKTtcbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUsJ21hcFN0b3JlIHZhbHVlJyk7XG4gfVxuIH07XG5cbmNvbnN0IGFzc2VydEtWT2tUb0FkZD0oa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4oa2V5KTtcblxuYXNzZXJ0U2NhbGFyS2V5KGtleSk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2goa2V5LGtleVNoYXBlLCdtYXBTdG9yZSBrZXknKTtcbiB9XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIE1hcFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZU1hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxudW5kZWZpbmVkLFxudGFnKX0pO1xuXG5cbiB9OyRozY9fb25jZS5tYWtlU2NhbGFyTWFwU3RvcmUobWFrZVNjYWxhck1hcFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyTWFwU3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1hcFN0b3JlTWV0aG9kcyI6WyJtYWtlTWFwU3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJNYXBTdG9yZSI6WyJtYWtlU2NhbGFyTWFwU3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmCzfJc0LAADNCwAARwAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiLCIuL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmUtdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyU2V0U3RvcmUiLCJtYWtlU2V0U3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFyLGZpbHRlckl0ZXJhYmxlLGNvbXBhcmVSYW5rLGFzc2VydFNjYWxhcktleSxtYWtlQ29weVNldCxtYXRjaGVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzLG1ha2VDdXJyZW50S2V5c0tpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjNj19hID0+IChmaWx0ZXJJdGVyYWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImFzc2VydFNjYWxhcktleVwiLCBbJGjNj19hID0+IChhc3NlcnRTY2FsYXJLZXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlTZXQgPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanNcIiwgW1tcIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzXCIsIFskaM2PX2EgPT4gKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZS11dGlscy5qc1wiLCBbW1wibWFrZUN1cnJlbnRLZXlzS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VDdXJyZW50S2V5c0tpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNldFN0b3JlTWV0aG9kcz0oXG5qc3NldCxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0e2Fzc2VydFVwZGF0ZU9uQWRkLGFzc2VydFVwZGF0ZU9uRGVsZXRlLGl0ZXJhYmxlS2V5c309XG5tYWtlQ3VycmVudEtleXNLaXQoXG4oKT0+anNzZXQua2V5cygpLFxuKGspPT5qc3NldC5oYXMoayksXG5jb21wYXJlUmFuayxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxua2V5TmFtZSk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qga2V5cz0oa2V5UGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQ/XG5pdGVyYWJsZUtleXM6XG5maWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsKGspPT5tYXRjaGVzKGssa2V5UGF0dCkpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKFxuanNzZXQsXG5hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxua2V5TmFtZSksXG5cblxua2V5cyxcblxudmFsdWVzOmtleXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCk9Pm1ha2VDb3B5U2V0KGtleXMoa2V5UGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCk9Plxua2V5UGF0dD09PXVuZGVmaW5lZD9qc3NldC5zaXplOlsuLi5rZXlzKGtleVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCk9PntcbmlmKGtleVBhdHQ9PT11bmRlZmluZWQpe1xuanNzZXQuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCkpe1xuanNzZXQuZGVsZXRlKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTZXRTdG9yZU1ldGhvZHMobWFrZVNldFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhclNldFN0b3JlPShcbnRhZz0na2V5JyxcbntrZXlTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc3NldD1uZXcgU2V0KCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5cbmFzc2VydFNjYWxhcktleShrZXkpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnc2V0U3RvcmUga2V5Jyk7XG4gfVxuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgU2V0U3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJTZXRTdG9yZShtYWtlU2NhbGFyU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU2V0U3RvcmVNZXRob2RzIjpbIm1ha2VTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhclNldFN0b3JlIjpbIm1ha2VTY2FsYXJTZXRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADpDjncsA0AALANAABLAAAAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsRmFyLGFzc2VydFBhc3NhYmxlLHBhc3NTdHlsZU9mLGdldENvcHlNYXBFbnRyaWVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLGlzQ29weU1hcDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0Q29weU1hcEVudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJpZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV0sW1wiaXNDb3B5TWFwXCIsIFskaM2PX2EgPT4gKGlzQ29weU1hcCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzPShcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIWpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcblxuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbmpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IG5vdCBmb3VuZDogJHtrZXl9YDtcblxucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBqc21hcC5oYXMoa2V5KTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi9qc21hcC5nZXQoa2V5KSk7XG4gfSxcblxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuYXNzZXJ0S1ZPa1RvU2V0KGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmlmKGFzc2VydEtleU9rVG9EZWxldGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0S2V5T2tUb0RlbGV0ZShrZXkpO1xuIH1cbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH0sXG5cbmFkZEFsbDooZW50cmllcyk9PntcbmlmKHR5cGVvZiBlbnRyaWVzW1N5bWJvbC5pdGVyYXRvcl0hPT0nZnVuY3Rpb24nKXtcbmlmKE9iamVjdC5pc0Zyb3plbihlbnRyaWVzKSYmaXNDb3B5TWFwKGVudHJpZXMpKXtcbi8vXG5lbnRyaWVzPWdldENvcHlNYXBFbnRyaWVzKGVudHJpZXMpO1xuIH1lbHNle1xuRmFpbCBgcHJvdmlkZWQgZGF0YSBzb3VyY2UgaXMgbm90IGl0ZXJhYmxlOiAke2VudHJpZXN9YDtcbiB9XG4gfVxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9lbnRyaWVzKXtcbi8vXG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMobWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJXZWFrTWFwU3RvcmU9KFxudGFnPSdrZXknLFxue2xvbmdMaXZlZD10cnVlLGtleVNoYXBlPXVuZGVmaW5lZCx2YWx1ZVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzbWFwPW5ldyhsb25nTGl2ZWQ/V2Vha01hcDpNYXApKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4odmFsdWVTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLVk9rVG9TZXQ9KF9rZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbih2YWx1ZSk7XG5cbmFzc2VydFBhc3NhYmxlKHZhbHVlKTtcbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUsJ3dlYWtNYXBTdG9yZSB2YWx1ZScpO1xuIH1cbiB9O1xuXG5jb25zdCBhc3NlcnRLVk9rVG9BZGQ9KGtleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5wYXNzU3R5bGVPZihrZXkpPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgT25seSByZW1vdGFibGVzIGNhbiBiZSBrZXlzIG9mIHNjYWxhciBXZWFrTWFwU3RvcmVzOiAke2tleX1gO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnd2Vha01hcFN0b3JlIGtleScpO1xuIH1cbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgV2Vha01hcFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMoXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbnVuZGVmaW5lZCxcbnRhZyl9KTtcblxuXG4gfTskaM2PX29uY2UubWFrZVNjYWxhcldlYWtNYXBTdG9yZShtYWtlU2NhbGFyV2Vha01hcFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyV2Vha01hcFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIjpbIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiOlsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABUfScVcwoAAHMKAABLAAAAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsRmFyLHBhc3NTdHlsZU9mLGdldENvcHlTZXRLZXlzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLGlzQ29weVNldDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0Q29weVNldEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV0sW1wiaXNDb3B5U2V0XCIsIFskaM2PX2EgPT4gKGlzQ29weVNldCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzPShcbmpzc2V0LFxuYXNzZXJ0S2V5T2tUb0FkZCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbmpzc2V0LmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IG5vdCBmb3VuZDogJHtrZXl9YDtcblxucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBqc3NldC5oYXMoa2V5KTtcbiB9LFxuXG5hZGQ6KGtleSk9PntcbmFzc2VydEtleU9rVG9BZGQoa2V5KTtcbmpzc2V0LmFkZChrZXkpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuaWYoYXNzZXJ0S2V5T2tUb0RlbGV0ZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRLZXlPa1RvRGVsZXRlKGtleSk7XG4gfVxuanNzZXQuZGVsZXRlKGtleSk7XG4gfSxcblxuYWRkQWxsOihrZXlzKT0+e1xuaWYodHlwZW9mIGtleXNbU3ltYm9sLml0ZXJhdG9yXSE9PSdmdW5jdGlvbicpe1xuaWYoT2JqZWN0LmlzRnJvemVuKGtleXMpJiZpc0NvcHlTZXQoa2V5cykpe1xuLy9cbmtleXM9Z2V0Q29weVNldEtleXMoa2V5cyk7XG4gfWVsc2V7XG5GYWlsIGBwcm92aWRlZCBkYXRhIHNvdXJjZSBpcyBub3QgaXRlcmFibGU6ICR7a2V5c31gO1xuIH1cbiB9XG5mb3IoY29uc3Qga2V5IG9mLyogICAgICAgICAgICAgICAgICAgICAgKi9rZXlzKXtcbmFzc2VydEtleU9rVG9BZGQoa2V5KTtcbmpzc2V0LmFkZChrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyV2Vha1NldFN0b3JlPShcbnRhZz0na2V5Jyxcbntsb25nTGl2ZWQ9dHJ1ZSxrZXlTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc3NldD1uZXcobG9uZ0xpdmVkP1dlYWtTZXQ6U2V0KSgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLZXlPa1RvQWRkPShrZXkpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xucGFzc1N0eWxlT2Yoa2V5KT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYE9ubHkgcmVtb3RhYmxlcyBjYW4gYmUga2V5cyBvZiBzY2FsYXIgV2Vha1N0b3JlczogJHtrZXl9YDtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3dlYWtTZXRTdG9yZSBrZXknKTtcbiB9XG4gfTtcblxucmV0dXJuIEZhciggYHNjYWxhciBXZWFrU2V0U3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlV2Vha1NldFN0b3JlTWV0aG9kcyhqc3NldCxhc3NlcnRLZXlPa1RvQWRkLHVuZGVmaW5lZCx0YWcpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlU2NhbGFyV2Vha1NldFN0b3JlKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiOlsibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhcldlYWtTZXRTdG9yZSI6WyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHnbC4erDgAAqw4AAEQAAABAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJhcHBlbmRUb1N0b3JlZEFycmF5IiwiaXNDb3B5TWFwIiwiaXNDb3B5U2V0IiwibWFrZUF0b21pY1Byb3ZpZGVyIiwibWFrZUN1cnJlbnRLZXlzS2l0IiwicHJvdmlkZUxhenkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEZhcixNLG1hdGNoZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9Pm1hdGNoZXMocyxNLnNldCgpKTtcblxuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9Pm1hdGNoZXMobSxNLm1hcCgpKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzQ29weU1hcChpc0NvcHlNYXApO1xuY29uc3QgICAgICAgIG1ha2VDdXJyZW50S2V5c0tpdD0oXG5nZXRSYXdLZXlzLFxuY2hlY2tIYXMsXG5jb21wYXJlLFxuYXNzZXJ0T2tUb0FkZCxcbmFzc2VydE9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xubGV0IHVwZGF0ZUNvdW50PTA7XG5sZXQgc29ydGVkS2V5c01lbW87XG5cbmNvbnN0IGFzc2VydFVwZGF0ZU9uQWRkPShrLHY9dW5kZWZpbmVkKT0+e1xuYXNzZXJ0T2tUb0FkZChrLHYpO1xudXBkYXRlQ291bnQrPTE7XG5zb3J0ZWRLZXlzTWVtbz11bmRlZmluZWQ7XG4gfTtcblxuY29uc3QgYXNzZXJ0VXBkYXRlT25EZWxldGU9KGspPT5hc3NlcnRPa1RvRGVsZXRlJiZhc3NlcnRPa1RvRGVsZXRlKGspO1xuXG5jb25zdCBnZXRTb3J0ZWRLZXlzPSgpPT57XG5pZihzb3J0ZWRLZXlzTWVtbz09PXVuZGVmaW5lZCl7XG5zb3J0ZWRLZXlzTWVtbz1oYXJkZW4oWy4uLmdldFJhd0tleXMoKV0uc29ydChjb21wYXJlKSk7XG4gfVxucmV0dXJuIHNvcnRlZEtleXNNZW1vO1xuIH07XG5cbmNvbnN0IGl0ZXJhYmxlS2V5cz1GYXIoJ0l0ZXJhYmxlIG9mIGtleXMnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBnZW5lcmF0aW9uPXVwZGF0ZUNvdW50O1xuZ2V0U29ydGVkS2V5cygpO1xuY29uc3QgbGVuPXNvcnRlZEtleXNNZW1vLmxlbmd0aDtcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdJdGVyYXRvciBvZiBrZXlzJyx7XG5uZXh0OigpPT57XG5nZW5lcmF0aW9uPT09dXBkYXRlQ291bnR8fEZhaWwgYFN0b3JlICR7cShrZXlOYW1lKX0gY3Vyc29yIHN0YWxlYDtcbi8vXG4vL1xuZm9yKDs7KXtcbmlmKGk8bGVuKXtcbmNvbnN0IHZhbHVlPXNvcnRlZEtleXNNZW1vW2ldO1xuaSs9MTtcbmlmKGNoZWNrSGFzKHZhbHVlKSl7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH1cbiB9XG4gfX0pO1xuXG4gfX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbml0ZXJhYmxlS2V5c30pO1xuXG4gfTskaM2PX29uY2UubWFrZUN1cnJlbnRLZXlzS2l0KG1ha2VDdXJyZW50S2V5c0tpdCk7XG5oYXJkZW4obWFrZUN1cnJlbnRLZXlzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJvdmlkZUxhenk9KG1hcFN0b3JlLGtleSxtYWtlVmFsdWUpPT57XG5pZighbWFwU3RvcmUuaGFzKGtleSkpe1xubWFwU3RvcmUuaW5pdChrZXksbWFrZVZhbHVlKGtleSkpO1xuIH1cbnJldHVybiBtYXBTdG9yZS5nZXQoa2V5KTtcbiB9OyRozY9fb25jZS5wcm92aWRlTGF6eShwcm92aWRlTGF6eSk7XG5oYXJkZW4ocHJvdmlkZUxhenkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXRvbWljUHJvdmlkZXI9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwZW5kaW5nPW5ldyBNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUFzeW5jPShrZXksbWFrZVZhbHVlLGZpbmlzaFZhbHVlKT0+e1xuaWYoc3RvcmUuaGFzKGtleSkpe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShzdG9yZS5nZXQoa2V5KSk7XG4gfVxuaWYoIXBlbmRpbmcuaGFzKGtleSkpe1xuY29uc3QgdmFsUD1tYWtlVmFsdWUoa2V5KS5cbnRoZW4oKHYpPT57XG5zdG9yZS5pbml0KGtleSx2KTtcbnJldHVybiB2O1xuIH0pLlxudGhlbigodik9PntcbmlmKGZpbmlzaFZhbHVlKXtcbnJldHVybiBmaW5pc2hWYWx1ZShrZXksdikudGhlbigoKT0+dik7XG4gfVxucmV0dXJuIHY7XG4gfSkuXG5maW5hbGx5KCgpPT57XG5wZW5kaW5nLmRlbGV0ZShrZXkpO1xuIH0pO1xucGVuZGluZy5zZXQoa2V5LHZhbFApO1xuIH1cbmNvbnN0IHZhbFA9cGVuZGluZy5nZXQoa2V5KTtcbmFzc2VydCh2YWxQKTtcbnJldHVybiB2YWxQO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Byb3ZpZGVBc3luY30pO1xuIH07JGjNj19vbmNlLm1ha2VBdG9taWNQcm92aWRlcihtYWtlQXRvbWljUHJvdmlkZXIpO1xuaGFyZGVuKG1ha2VBdG9taWNQcm92aWRlcik7XG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXBwZW5kVG9TdG9yZWRBcnJheT0obWFwU3RvcmUsa2V5LGl0ZW0pPT57XG5pZihtYXBTdG9yZS5oYXMoa2V5KSl7XG5jb25zdCBleHRhbnQ9bWFwU3RvcmUuZ2V0KGtleSk7XG5tYXBTdG9yZS5zZXQoa2V5LGhhcmRlbihbLi4uZXh0YW50LGl0ZW1dKSk7XG4gfWVsc2V7XG5tYXBTdG9yZS5pbml0KGtleSxoYXJkZW4oW2l0ZW1dKSk7XG4gfVxuIH07JGjNj19vbmNlLmFwcGVuZFRvU3RvcmVkQXJyYXkoYXBwZW5kVG9TdG9yZWRBcnJheSk7XG5oYXJkZW4oYXBwZW5kVG9TdG9yZWRBcnJheSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlTZXQiOlsiaXNDb3B5U2V0Il0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwibWFrZUN1cnJlbnRLZXlzS2l0IjpbIm1ha2VDdXJyZW50S2V5c0tpdCJdLCJwcm92aWRlTGF6eSI6WyJwcm92aWRlTGF6eSJdLCJtYWtlQXRvbWljUHJvdmlkZXIiOlsibWFrZUF0b21pY1Byb3ZpZGVyIl0sImFwcGVuZFRvU3RvcmVkQXJyYXkiOlsiYXBwZW5kVG9TdG9yZWRBcnJheSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAA3AAAAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA33gQZiICAAAiAgAAMgAAAEBhZ29yaWMvdGltZS12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL3RpbWVNYXRoLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL3R5cGVzLWluZGV4LmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdGltZU1hdGguanMiLCIuL3NyYy90eXBlR3VhcmRzLmpzIiwiLi9zcmMvdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3RpbWVNYXRoLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlR3VhcmRzLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy1pbmRleC5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAxnWLOcRMAAHETAAA5AAAAQGFnb3JpYy90aW1lLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3RpbWVNYXRoLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJUaW1lTWF0aCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsRmFpbCxxLG11c3RNYXRjaCxSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSxUaW1lc3RhbXBSZWNvcmRTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW1tcIlJlbGF0aXZlVGltZVJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKFJlbGF0aXZlVGltZVJlY29yZFNoYXBlID0gJGjNj19hKV1dLFtcIlRpbWVzdGFtcFJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKFRpbWVzdGFtcFJlY29yZFNoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBhZ3JlZWRUaW1lckJyYW5kPShsZWZ0QnJhbmQscmlnaHRCcmFuZCk9PntcbmlmKGxlZnRCcmFuZD09PXVuZGVmaW5lZCl7XG5pZihyaWdodEJyYW5kPT09dW5kZWZpbmVkKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfWVsc2V7XG5yZXR1cm4gcmlnaHRCcmFuZDtcbiB9XG4gfWVsc2UgaWYocmlnaHRCcmFuZD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gbGVmdEJyYW5kO1xuIH1lbHNle1xubGVmdEJyYW5kPT09cmlnaHRCcmFuZHx8XG5GYWlsIGBUaW1lckJyYW5kcyBtdXN0IG1hdGNoOiAke3EobGVmdEJyYW5kKX0gdnMgJHtxKHJpZ2h0QnJhbmQpfWA7XG5yZXR1cm4gbGVmdEJyYW5kO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzaGFyZWRUaW1lckJyYW5kPShsZWZ0LHJpZ2h0KT0+e1xuY29uc3QgbGVmdEJyYW5kPXR5cGVvZiBsZWZ0PT09J2JpZ2ludCc/dW5kZWZpbmVkOmxlZnQudGltZXJCcmFuZDtcbmNvbnN0IHJpZ2h0QnJhbmQ9dHlwZW9mIHJpZ2h0PT09J2JpZ2ludCc/dW5kZWZpbmVkOnJpZ2h0LnRpbWVyQnJhbmQ7XG5yZXR1cm4gYWdyZWVkVGltZXJCcmFuZChsZWZ0QnJhbmQscmlnaHRCcmFuZCk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGFic0xpa2U9KGxlZnQscmlnaHQsYWJzVmFsdWUpPT57XG5OYXQoYWJzVmFsdWUpO1xuY29uc3QgdGltZXJCcmFuZD1zaGFyZWRUaW1lckJyYW5kKGxlZnQscmlnaHQpO1xuaWYodGltZXJCcmFuZCl7XG5yZXR1cm4gaGFyZGVuKHtcbnRpbWVyQnJhbmQsXG5hYnNWYWx1ZX0pO1xuXG4gfWVsc2V7XG5yZXR1cm4gYWJzVmFsdWU7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCByZWxMaWtlPShsZWZ0LHJpZ2h0LHJlbFZhbHVlKT0+e1xuTmF0KHJlbFZhbHVlKTtcbmNvbnN0IHRpbWVyQnJhbmQ9c2hhcmVkVGltZXJCcmFuZChsZWZ0LHJpZ2h0KTtcbmlmKHRpbWVyQnJhbmQpe1xucmV0dXJuIGhhcmRlbih7XG50aW1lckJyYW5kLFxucmVsVmFsdWV9KTtcblxuIH1lbHNle1xucmV0dXJuIHJlbFZhbHVlO1xuIH1cbiB9O1xuXG4vL1xuLy9cbi8vXG5cbmNvbnN0IGFic1ZhbHVlPShhYnMpPT57XG5pZih0eXBlb2YgYWJzPT09J2JpZ2ludCcpe1xucmV0dXJuIE5hdChhYnMpO1xuIH1cbm11c3RNYXRjaChhYnMsVGltZXN0YW1wUmVjb3JkU2hhcGUsJ3RpbWVzdGFtcCcpO1xucmV0dXJuIE5hdChhYnMuYWJzVmFsdWUpO1xuIH07XG5cbmNvbnN0IHJlbFZhbHVlPShyZWwpPT57XG5pZih0eXBlb2YgcmVsPT09J2JpZ2ludCcpe1xucmV0dXJuIE5hdChyZWwpO1xuIH1cbm11c3RNYXRjaChyZWwsUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUsJ3JlbGF0aXZlJyk7XG5yZXR1cm4gTmF0KHJlbC5yZWxWYWx1ZSk7XG4gfTtcblxuY29uc3QgbWFrZVRpbWVzdGFtcFJlY29yZD0oYWJzLHRpbWVyQnJhbmQpPT5cbmhhcmRlbih7YWJzVmFsdWU6YWJzLHRpbWVyQnJhbmR9KTtcbmNvbnN0IG1ha2VSZWxhdGl2ZVRpbWVSZWNvcmQ9KHJlbCx0aW1lckJyYW5kKT0+XG5oYXJkZW4oe3JlbFZhbHVlOnJlbCx0aW1lckJyYW5kfSk7XG5cbmNvbnN0IGNvZXJjZVRpbWVzdGFtcFJlY29yZD0odHMsYnJhbmQpPT57XG5icmFuZHx8RmFpbCBgbXVzdCBoYXZlIGEgYnJhbmRgO1xuaWYodHlwZW9mIHRzPT09J251bWJlcicpe1xudHM9TmF0KHRzKTtcbiB9XG5pZih0eXBlb2YgdHM9PT0nYmlnaW50Jyl7XG5yZXR1cm4gbWFrZVRpbWVzdGFtcFJlY29yZCh0cyxicmFuZCk7XG4gfWVsc2V7XG5jb25zdHt0aW1lckJyYW5kfT10cztcbm11c3RNYXRjaCh0cyxUaW1lc3RhbXBSZWNvcmRTaGFwZSwndGltZXN0YW1wJyk7XG5hZ3JlZWRUaW1lckJyYW5kKHRpbWVyQnJhbmQsYnJhbmQpO1xucmV0dXJuIHRzO1xuIH1cbiB9O1xuXG5jb25zdCBjb2VyY2VSZWxhdGl2ZVRpbWVSZWNvcmQ9KHJ0LGJyYW5kKT0+e1xuYnJhbmR8fEZhaWwgYG11c3QgaGF2ZSBhIGJyYW5kYDtcbmlmKHR5cGVvZiBydD09PSdudW1iZXInKXtcbnJ0PU5hdChydCk7XG4gfVxuaWYodHlwZW9mIHJ0PT09J2JpZ2ludCcpe1xucmV0dXJuIG1ha2VSZWxhdGl2ZVRpbWVSZWNvcmQocnQsYnJhbmQpO1xuIH1lbHNle1xuY29uc3R7dGltZXJCcmFuZH09cnQ7XG5tdXN0TWF0Y2gocnQsUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUsJ3JlbGF0aXZlVGltZScpO1xuYWdyZWVkVGltZXJCcmFuZCh0aW1lckJyYW5kLGJyYW5kKTtcbnJldHVybiBydDtcbiB9XG4gfTtcblxuY29uc3QgYWRkQWJzUmVsPShhYnMscmVsKT0+XG5hYnNMaWtlKGFicyxyZWwsYWJzVmFsdWUoYWJzKStyZWxWYWx1ZShyZWwpKTtcblxuY29uc3QgYWRkUmVsUmVsPShyZWwxLHJlbDIpPT5cbnJlbExpa2UocmVsMSxyZWwyLHJlbFZhbHVlKHJlbDEpK3JlbFZhbHVlKHJlbDIpKTtcblxuY29uc3Qgc3VidHJhY3RBYnNBYnM9KGFiczEsYWJzMik9PlxucmVsTGlrZShhYnMxLGFiczIsYWJzVmFsdWUoYWJzMSktYWJzVmFsdWUoYWJzMikpO1xuXG5jb25zdCBjbGFtcGVkU3VidHJhY3RBYnNBYnM9KGFiczEsYWJzMik9PntcbmNvbnN0IHZhbDE9YWJzVmFsdWUoYWJzMSk7XG5jb25zdCB2YWwyPWFic1ZhbHVlKGFiczIpO1xucmV0dXJuIHJlbExpa2UoYWJzMSxhYnMyLHZhbDE+dmFsMj92YWwxLXZhbDI6MG4pO1xuIH07XG5cbmNvbnN0IHN1YnRyYWN0QWJzUmVsPShhYnMscmVsKT0+XG5hYnNMaWtlKGFicyxyZWwsYWJzVmFsdWUoYWJzKS1yZWxWYWx1ZShyZWwpKTtcblxuY29uc3Qgc3VidHJhY3RSZWxSZWw9KHJlbDEscmVsMik9PlxucmVsTGlrZShyZWwxLHJlbDIscmVsVmFsdWUocmVsMSktcmVsVmFsdWUocmVsMikpO1xuXG5jb25zdCBpc1JlbFplcm89KHJlbCk9PnJlbFZhbHVlKHJlbCk9PT0wbjtcblxuY29uc3QgbXVsdGlwbHlSZWxOYXQ9KHJlbCxuYXQpPT5yZWxMaWtlKHJlbCxuYXQscmVsVmFsdWUocmVsKSpuYXQpO1xuXG5jb25zdCBkaXZpZGVSZWxOYXQ9KHJlbCxuYXQpPT5yZWxMaWtlKHJlbCxuYXQscmVsVmFsdWUocmVsKS9uYXQpO1xuXG5jb25zdCBkaXZpZGVSZWxSZWw9KHJlbDEscmVsMik9PntcbnNoYXJlZFRpbWVyQnJhbmQocmVsMSxyZWwyKTsvL1xucmV0dXJuIHJlbFZhbHVlKHJlbDEpL3JlbFZhbHVlKHJlbDIpO1xuIH07XG5cbmNvbnN0IG1vZEFic1JlbD0oYWJzLHN0ZXApPT5cbnJlbExpa2UoYWJzLHN0ZXAsYWJzVmFsdWUoYWJzKSVyZWxWYWx1ZShzdGVwKSk7XG5cbmNvbnN0IG1vZFJlbFJlbD0ocmVsLHN0ZXApPT5cbnJlbExpa2UocmVsLHN0ZXAscmVsVmFsdWUocmVsKSVyZWxWYWx1ZShzdGVwKSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjb21wYXJlVmFsdWVzPShsZWZ0LHJpZ2h0LHYxLHYyKT0+e1xuc2hhcmVkVGltZXJCcmFuZChsZWZ0LHJpZ2h0KTtcbmlmKHYxPHYyKXtcbnJldHVybi0xO1xuIH1lbHNlIGlmKHYxPT09djIpe1xucmV0dXJuIDA7XG4gfWVsc2V7XG5hc3NlcnQodjE+djIpO1xucmV0dXJuIDE7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgVGltZU1hdGg9aGFyZGVuKHtcbmFic1ZhbHVlLFxucmVsVmFsdWUsXG5jb2VyY2VUaW1lc3RhbXBSZWNvcmQsXG5jb2VyY2VSZWxhdGl2ZVRpbWVSZWNvcmQsXG4vL1xuYWRkQWJzUmVsLFxuLy9cbmFkZFJlbFJlbCxcbnN1YnRyYWN0QWJzQWJzLFxuY2xhbXBlZFN1YnRyYWN0QWJzQWJzLFxuc3VidHJhY3RBYnNSZWwsXG5zdWJ0cmFjdFJlbFJlbCxcbmlzUmVsWmVybyxcbm11bHRpcGx5UmVsTmF0LFxuZGl2aWRlUmVsTmF0LFxuZGl2aWRlUmVsUmVsLFxubW9kQWJzUmVsLFxubW9kUmVsUmVsLFxuY29tcGFyZUFiczooYWJzMSxhYnMyKT0+XG5jb21wYXJlVmFsdWVzKGFiczEsYWJzMixhYnNWYWx1ZShhYnMxKSxhYnNWYWx1ZShhYnMyKSksXG5jb21wYXJlUmVsOihyZWwxLHJlbDIpPT5cbmNvbXBhcmVWYWx1ZXMocmVsMSxyZWwyLHJlbFZhbHVlKHJlbDEpLHJlbFZhbHVlKHJlbDIpKX0pOyRozY9fb25jZS5UaW1lTWF0aChUaW1lTWF0aCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUaW1lTWF0aCI6WyJUaW1lTWF0aCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAaBuEJCwkAAAsJAAA7AAAAQGFnb3JpYy90aW1lLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSIsIlJlbGF0aXZlVGltZVNoYXBlIiwiUmVsYXRpdmVUaW1lVmFsdWVTaGFwZSIsIlRpbWVyQnJhbmRTaGFwZSIsIlRpbWVyU2VydmljZVNoYXBlIiwiVGltZXN0YW1wUmVjb3JkU2hhcGUiLCJUaW1lc3RhbXBTaGFwZSIsIlRpbWVzdGFtcFZhbHVlU2hhcGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgVGltZXJCcmFuZFNoYXBlPU0ucmVtb3RhYmxlKCdUaW1lckJyYW5kJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlRpbWVyQnJhbmRTaGFwZShUaW1lckJyYW5kU2hhcGUpO1xuY29uc3QgICAgICAgIFRpbWVzdGFtcFZhbHVlU2hhcGU9TS5uYXQoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuVGltZXN0YW1wVmFsdWVTaGFwZShUaW1lc3RhbXBWYWx1ZVNoYXBlKTtcbmNvbnN0ICAgICAgICBSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlPU0ubmF0KCk7Ly9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuUmVsYXRpdmVUaW1lVmFsdWVTaGFwZShSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlKTtcbmNvbnN0ICAgICAgICBUaW1lc3RhbXBSZWNvcmRTaGFwZT17XG50aW1lckJyYW5kOlRpbWVyQnJhbmRTaGFwZSxcbmFic1ZhbHVlOlRpbWVzdGFtcFZhbHVlU2hhcGV9OyRozY9fb25jZS5UaW1lc3RhbXBSZWNvcmRTaGFwZShUaW1lc3RhbXBSZWNvcmRTaGFwZSk7XG5cbmhhcmRlbihUaW1lc3RhbXBSZWNvcmRTaGFwZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGU9e1xudGltZXJCcmFuZDpUaW1lckJyYW5kU2hhcGUsXG5yZWxWYWx1ZTpSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlfTskaM2PX29uY2UuUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUoUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUpO1xuXG5oYXJkZW4oUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgVGltZXN0YW1wU2hhcGU9TS5vcihUaW1lc3RhbXBSZWNvcmRTaGFwZSxUaW1lc3RhbXBWYWx1ZVNoYXBlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5UaW1lc3RhbXBTaGFwZShUaW1lc3RhbXBTaGFwZSk7XG5jb25zdCAgICAgICAgUmVsYXRpdmVUaW1lU2hhcGU9TS5vcihcblJlbGF0aXZlVGltZVJlY29yZFNoYXBlLFxuUmVsYXRpdmVUaW1lVmFsdWVTaGFwZSk7JGjNj19vbmNlLlJlbGF0aXZlVGltZVNoYXBlKFJlbGF0aXZlVGltZVNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgVGltZXJTZXJ2aWNlU2hhcGU9TS5yZW1vdGFibGUoJ1RpbWVyU2VydmljZScpOyRozY9fb25jZS5UaW1lclNlcnZpY2VTaGFwZShUaW1lclNlcnZpY2VTaGFwZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUaW1lckJyYW5kU2hhcGUiOlsiVGltZXJCcmFuZFNoYXBlIl0sIlRpbWVzdGFtcFZhbHVlU2hhcGUiOlsiVGltZXN0YW1wVmFsdWVTaGFwZSJdLCJSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlIjpbIlJlbGF0aXZlVGltZVZhbHVlU2hhcGUiXSwiVGltZXN0YW1wUmVjb3JkU2hhcGUiOlsiVGltZXN0YW1wUmVjb3JkU2hhcGUiXSwiUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUiOlsiUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUiXSwiVGltZXN0YW1wU2hhcGUiOlsiVGltZXN0YW1wU2hhcGUiXSwiUmVsYXRpdmVUaW1lU2hhcGUiOlsiUmVsYXRpdmVUaW1lU2hhcGUiXSwiVGltZXJTZXJ2aWNlU2hhcGUiOlsiVGltZXJTZXJ2aWNlU2hhcGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAPAAAAEBhZ29yaWMvdGltZS12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA5FColZoWAACaFgAAPgAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvZXhvLXV0aWxzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiLCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzIiwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiaWdub3JlQ29udGV4dCIsIm1ha2VFeG9VdGlscyIsInByZXBhcmVFeG8iLCJwcmVwYXJlRXhvQ2xhc3MiLCJwcmVwYXJlRXhvQ2xhc3NLaXQiLCJwcmVwYXJlS2luZCIsInByZXBhcmVLaW5kTXVsdGkiLCJwcmVwYXJlU2luZ2xldG9uIiwicHJvdmlkZUtpbmRIYW5kbGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaW5pdEVtcHR5LHByb3ZpZGUsZ2xvYmFsVmF0RGF0YTskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImluaXRFbXB0eVwiLCBbJGjNj19hID0+IChpbml0RW1wdHkgPSAkaM2PX2EpXV1dXSxbXCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzXCIsIFtbXCJwcm92aWRlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGUgPSAkaM2PX2EpXV0sW1wiVmF0RGF0YVwiLCBbJGjNj19hID0+IChnbG9iYWxWYXREYXRhID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8vXG4vKlxuXG4gKi9cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpZ25vcmVDb250ZXh0PVxuKGZuKT0+XG4oX2NvbnRleHQsLi4uYXJncyk9PlxuZm4oLi4uYXJncyk7JGjNj19vbmNlLmlnbm9yZUNvbnRleHQoaWdub3JlQ29udGV4dCk7XG5oYXJkZW4oaWdub3JlQ29udGV4dCk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VFeG9VdGlscz0oVmF0RGF0YSk9PntcbmNvbnN0e1xuZGVmaW5lS2luZCxcbmRlZmluZUtpbmRNdWx0aSxcbmRlZmluZUR1cmFibGVLaW5kLFxuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSxcbm1ha2VLaW5kSGFuZGxlfT1cblZhdERhdGE7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlS2luZEhhbmRsZT0oYmFnZ2FnZSxraW5kTmFtZSk9PlxucHJvdmlkZShiYWdnYWdlLCBgJHtraW5kTmFtZX1fa2luZEhhbmRsZWAsKCk9Pm1ha2VLaW5kSGFuZGxlKGtpbmROYW1lKSk7XG5oYXJkZW4ocHJvdmlkZUtpbmRIYW5kbGUpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlS2luZD0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlS2luZChcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW5pdCxcbmJlaGF2aW9yLFxub3B0aW9ucyk7XG5cbmhhcmRlbihwcmVwYXJlS2luZCk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVLaW5kTXVsdGk9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW5pdCxcbmJlaGF2aW9yLFxub3B0aW9ucz11bmRlZmluZWQpPT5cblxuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW5pdCxcbmJlaGF2aW9yLFxub3B0aW9ucyk7XG5cbmhhcmRlbihwcmVwYXJlS2luZE11bHRpKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVWaXJ0dWFsRXhvQ2xhc3M9KHRhZyxpbnRlcmZhY2VHdWFyZCxpbml0LG1ldGhvZHMsb3B0aW9ucyk9PlxuLy9cbmRlZmluZUtpbmQodGFnLGluaXQsbWV0aG9kcyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkfSk7XG5cbmhhcmRlbihkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdD0oXG50YWcsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zKT0+XG5cbi8vXG5kZWZpbmVLaW5kTXVsdGkodGFnLGluaXQsZmFjZXRzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXR9KTtcblxuaGFyZGVuKGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lRHVyYWJsZUV4b0NsYXNzPShcbmtpbmRIYW5kbGUsXG5pbnRlcmZhY2VHdWFyZCxcbmluaXQsXG5tZXRob2RzLFxub3B0aW9ucyk9PlxuXG4vL1xuZGVmaW5lRHVyYWJsZUtpbmQoa2luZEhhbmRsZSxpbml0LG1ldGhvZHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZH0pO1xuXG5oYXJkZW4oZGVmaW5lRHVyYWJsZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQ9KFxua2luZEhhbmRsZSxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpPT5cblxuLy9cbmRlZmluZUR1cmFibGVLaW5kTXVsdGkoa2luZEhhbmRsZSxpbml0LGZhY2V0cyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkS2l0fSk7XG5cbmhhcmRlbihkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUV4b0NsYXNzPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3MoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvQ2xhc3NLaXQ9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucz11bmRlZmluZWQpPT5cblxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0KFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmludGVyZmFjZUd1YXJkLFxubWV0aG9kcyxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBtYWtlU2luZ2xldG9uPXByZXBhcmVFeG9DbGFzcyhcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdEVtcHR5LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5cbnJldHVybiBwcm92aWRlKGJhZ2dhZ2UsIGAke2tpbmROYW1lfV9zaW5nbGV0b25gLCgpPT5tYWtlU2luZ2xldG9uKCkpO1xuIH07XG5oYXJkZW4ocHJlcGFyZUV4byk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlU2luZ2xldG9uPShiYWdnYWdlLGtpbmROYW1lLG1ldGhvZHMsb3B0aW9ucz11bmRlZmluZWQpPT5cbnByZXBhcmVFeG8oYmFnZ2FnZSxraW5kTmFtZSx1bmRlZmluZWQsbWV0aG9kcyxvcHRpb25zKTtcbmhhcmRlbihwcmVwYXJlU2luZ2xldG9uKTtcblxucmV0dXJuIGhhcmRlbih7XG5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3MsXG5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQsXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3MsXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQsXG5wcmVwYXJlRXhvQ2xhc3MsXG5wcmVwYXJlRXhvQ2xhc3NLaXQsXG5wcmVwYXJlRXhvLFxuXG5wcmVwYXJlU2luZ2xldG9uLFxucHJvdmlkZUtpbmRIYW5kbGUsXG5wcmVwYXJlS2luZCxcbnByZXBhcmVLaW5kTXVsdGl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VFeG9VdGlscyhtYWtlRXhvVXRpbHMpO1xuXG5jb25zdCBnbG9iYWxFeG9VdGlscz1tYWtlRXhvVXRpbHMoZ2xvYmFsVmF0RGF0YSk7XG5cbmNvbnN0ICAgICAgIHtcbmRlZmluZVZpcnR1YWxFeG9DbGFzcyxcbmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCxcbmRlZmluZUR1cmFibGVFeG9DbGFzcyxcbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG9DbGFzcyxcbnByZXBhcmVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG8sXG5wcmVwYXJlU2luZ2xldG9ufT1cbmdsb2JhbEV4b1V0aWxzO1xuXG4vKlxuXG4gKi8kaM2PX29uY2UuZGVmaW5lVmlydHVhbEV4b0NsYXNzKGRlZmluZVZpcnR1YWxFeG9DbGFzcyk7JGjNj19vbmNlLmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdChkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQpOyRozY9fb25jZS5kZWZpbmVEdXJhYmxlRXhvQ2xhc3MoZGVmaW5lRHVyYWJsZUV4b0NsYXNzKTskaM2PX29uY2UuZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0KGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCk7JGjNj19vbmNlLnByZXBhcmVFeG9DbGFzcyhwcmVwYXJlRXhvQ2xhc3MpOyRozY9fb25jZS5wcmVwYXJlRXhvQ2xhc3NLaXQocHJlcGFyZUV4b0NsYXNzS2l0KTskaM2PX29uY2UucHJlcGFyZUV4byhwcmVwYXJlRXhvKTskaM2PX29uY2UucHJlcGFyZVNpbmdsZXRvbihwcmVwYXJlU2luZ2xldG9uKTtcbmNvbnN0ICAgICAgIHtwcm92aWRlS2luZEhhbmRsZSxwcmVwYXJlS2luZCxwcmVwYXJlS2luZE11bHRpfT1cbmdsb2JhbEV4b1V0aWxzOyRozY9fb25jZS5wcm92aWRlS2luZEhhbmRsZShwcm92aWRlS2luZEhhbmRsZSk7JGjNj19vbmNlLnByZXBhcmVLaW5kKHByZXBhcmVLaW5kKTskaM2PX29uY2UucHJlcGFyZUtpbmRNdWx0aShwcmVwYXJlS2luZE11bHRpKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imlnbm9yZUNvbnRleHQiOlsiaWdub3JlQ29udGV4dCJdLCJtYWtlRXhvVXRpbHMiOlsibWFrZUV4b1V0aWxzIl0sImRlZmluZVZpcnR1YWxFeG9DbGFzcyI6WyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MiXSwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IjpbImRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCJdLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiOlsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzIl0sImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQiXSwicHJlcGFyZUV4b0NsYXNzIjpbInByZXBhcmVFeG9DbGFzcyJdLCJwcmVwYXJlRXhvQ2xhc3NLaXQiOlsicHJlcGFyZUV4b0NsYXNzS2l0Il0sInByZXBhcmVFeG8iOlsicHJlcGFyZUV4byJdLCJwcmVwYXJlU2luZ2xldG9uIjpbInByZXBhcmVTaW5nbGV0b24iXSwicHJvdmlkZUtpbmRIYW5kbGUiOlsicHJvdmlkZUtpbmRIYW5kbGUiXSwicHJlcGFyZUtpbmQiOlsicHJlcGFyZUtpbmQiXSwicHJlcGFyZUtpbmRNdWx0aSI6WyJwcmVwYXJlS2luZE11bHRpIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALj1FjCoCAAAqAgAADoAAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiLCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIiwiLi9leG8tdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJtYWtlU2NhbGFyTWFwU3RvcmUiLCJtYWtlU2NhbGFyTWFwU3RvcmUiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW11dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW11dLFtcIi4vZXhvLXV0aWxzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGFnb3JpYy9zdG9yZSI6W1siTSIsIk0iXSxbIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTY2FsYXJTZXRTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSIsIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXV0sIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiOltbIm1ha2VLaW5kSGFuZGxlIiwibWFrZUtpbmRIYW5kbGUiXSxbInByb3ZpZGVQcm9taXNlV2F0Y2hlciIsInByb3ZpZGVQcm9taXNlV2F0Y2hlciJdLFsid2F0Y2hQcm9taXNlIiwid2F0Y2hQcm9taXNlIl0sWyJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIl0sWyJjYW5CZUR1cmFibGUiLCJjYW5CZUR1cmFibGUiXSxbInBpY2tGYWNldCIsInBpY2tGYWNldCJdLFsicGFydGlhbEFzc2lnbiIsInBhcnRpYWxBc3NpZ24iXSxbInByb3ZpZGUiLCJwcm92aWRlIl0sWyJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiXSxbImRlZmluZUtpbmQiLCJkZWZpbmVLaW5kIl0sWyJkZWZpbmVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kTXVsdGkiXSxbImRlZmluZUR1cmFibGVLaW5kIiwiZGVmaW5lRHVyYWJsZUtpbmQiXSxbImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl1dLCIuL2V4by11dGlscy5qcyI6W1siZGVmaW5lVmlydHVhbEV4b0NsYXNzIiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIl0sWyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiXSxbImRlZmluZUR1cmFibGVFeG9DbGFzcyIsImRlZmluZUR1cmFibGVFeG9DbGFzcyJdLFsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IiwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0Il0sWyJwcmVwYXJlRXhvQ2xhc3MiLCJwcmVwYXJlRXhvQ2xhc3MiXSxbInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVFeG9DbGFzc0tpdCJdLFsicHJlcGFyZUV4byIsInByZXBhcmVFeG8iXSxbInByZXBhcmVTaW5nbGV0b24iLCJwcmVwYXJlU2luZ2xldG9uIl0sWyJpZ25vcmVDb250ZXh0IiwiaWdub3JlQ29udGV4dCJdLFsicHJvdmlkZUtpbmRIYW5kbGUiLCJwcm92aWRlS2luZEhhbmRsZSJdLFsicHJlcGFyZUtpbmQiLCJwcmVwYXJlS2luZCJdLFsicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVLaW5kTXVsdGkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAwRcumsFgAArBYAAEYAAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJWYXREYXRhIiwiY2FuQmVEdXJhYmxlIiwiZGVmaW5lRHVyYWJsZUtpbmQiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIiwiZGVmaW5lS2luZCIsImRlZmluZUtpbmRNdWx0aSIsIm1ha2VLaW5kSGFuZGxlIiwibWFrZVNjYWxhckJpZ01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU3RvcmVVdGlscyIsInBhcnRpYWxBc3NpZ24iLCJwaWNrRmFjZXQiLCJwcm92aWRlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwid2F0Y2hQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscHJvdmlkZUxhenk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaM2PX2EgPT4gKHByb3ZpZGVMYXp5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBWYXREYXRhR2xvYmFsO1xuaWYoJ1ZhdERhdGEnaW4gZ2xvYmFsVGhpcyl7XG5nbG9iYWxUaGlzLlZhdERhdGF8fEZhaWwgYFZhdERhdGEgZGVmaW5lZCBpbiBnbG9iYWwgYXMgbnVsbCBvciB1bmRlZmluZWRgO1xuLy9cblZhdERhdGFHbG9iYWw9LyogICAgICAgICAgICAgICovZ2xvYmFsVGhpcy5WYXREYXRhO1xuIH1lbHNle1xuLy9cbi8vXG4vL1xuY29uc3QgdW5hdmFpbGFibGU9KCk9PkZhaWwgYFZhdERhdGEgdW5hdmFpbGFibGVgO1xuVmF0RGF0YUdsb2JhbD17XG5kZWZpbmVLaW5kOnVuYXZhaWxhYmxlLFxuZGVmaW5lS2luZE11bHRpOnVuYXZhaWxhYmxlLFxuZGVmaW5lRHVyYWJsZUtpbmQ6dW5hdmFpbGFibGUsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpOnVuYXZhaWxhYmxlLFxubWFrZUtpbmRIYW5kbGU6dW5hdmFpbGFibGUsXG5wcm92aWRlUHJvbWlzZVdhdGNoZXI6dW5hdmFpbGFibGUsXG53YXRjaFByb21pc2U6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1NldFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZTp1bmF2YWlsYWJsZSxcbmNhbkJlRHVyYWJsZTp1bmF2YWlsYWJsZX07XG5cbiB9XG5cbmNvbnN0IFZhdERhdGFFeHBvcnQ9VmF0RGF0YUdsb2JhbDskaM2PX29uY2UuVmF0RGF0YUV4cG9ydChWYXREYXRhRXhwb3J0KTtcblxuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmRlZmluZUtpbmQsXG5kZWZpbmVLaW5kTXVsdGksXG5kZWZpbmVEdXJhYmxlS2luZCxcbmRlZmluZUR1cmFibGVLaW5kTXVsdGl9PVxuVmF0RGF0YUdsb2JhbDskaM2PX29uY2UuZGVmaW5lS2luZChkZWZpbmVLaW5kKTskaM2PX29uY2UuZGVmaW5lS2luZE11bHRpKGRlZmluZUtpbmRNdWx0aSk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVLaW5kKGRlZmluZUR1cmFibGVLaW5kKTskaM2PX29uY2UuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShkZWZpbmVEdXJhYmxlS2luZE11bHRpKTtcblxuY29uc3QgICAgICAge1xubWFrZUtpbmRIYW5kbGUsXG5wcm92aWRlUHJvbWlzZVdhdGNoZXIsXG53YXRjaFByb21pc2UsXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUsXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLFxubWFrZVNjYWxhckJpZ1NldFN0b3JlLFxubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSxcbmNhbkJlRHVyYWJsZX09XG5WYXREYXRhR2xvYmFsO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZUtpbmRIYW5kbGUobWFrZUtpbmRIYW5kbGUpOyRozY9fb25jZS5wcm92aWRlUHJvbWlzZVdhdGNoZXIocHJvdmlkZVByb21pc2VXYXRjaGVyKTskaM2PX29uY2Uud2F0Y2hQcm9taXNlKHdhdGNoUHJvbWlzZSk7JGjNj19vbmNlLm1ha2VTY2FsYXJCaWdNYXBTdG9yZShtYWtlU2NhbGFyQmlnTWFwU3RvcmUpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnU2V0U3RvcmUobWFrZVNjYWxhckJpZ1NldFN0b3JlKTskaM2PX29uY2UubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZShtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKTskaM2PX29uY2UuY2FuQmVEdXJhYmxlKGNhbkJlRHVyYWJsZSk7XG5jb25zdCAgICAgICAgcGlja0ZhY2V0PVxuKG1ha2VyLGZhY2V0TmFtZSk9PlxuKC4uLmFyZ3MpPT5cbm1ha2VyKC4uLmFyZ3MpW2ZhY2V0TmFtZV07JGjNj19vbmNlLnBpY2tGYWNldChwaWNrRmFjZXQpO1xuaGFyZGVuKHBpY2tGYWNldCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXJ0aWFsQXNzaWduPSh0YXJnZXQsc291cmNlKT0+e1xuT2JqZWN0LmFzc2lnbih0YXJnZXQsc291cmNlKTtcbiB9OyRozY9fb25jZS5wYXJ0aWFsQXNzaWduKHBhcnRpYWxBc3NpZ24pO1xuaGFyZGVuKHBhcnRpYWxBc3NpZ24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgICAgICAgIHByb3ZpZGU9XG4vL1xuLypcblxuXG5cblxuXG4gICAqL3Byb3ZpZGVMYXp5O1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wcm92aWRlKHByb3ZpZGUpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZVV0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG4vL1xubWFrZVNjYWxhckJpZ01hcFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUsXG4vL1xubWFrZVNjYWxhckJpZ1NldFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZU1hcFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVNYXBTdG9yZSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlU2V0U3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVNldFN0b3JlKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHJvdmlkZUR1cmFibGVNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVTZXRTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlU3RvcmVVdGlscyhtYWtlU3RvcmVVdGlscyk7XG5cbmNvbnN0IGdsb2JhbFN0b3JlVXRpbHM9bWFrZVN0b3JlVXRpbHMoVmF0RGF0YUdsb2JhbCk7XG5jb25zdCAgICAgICB7XG5wcm92aWRlRHVyYWJsZU1hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUsXG5wcm92aWRlRHVyYWJsZVNldFN0b3JlLFxucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmV9PVxuZ2xvYmFsU3RvcmVVdGlsczskaM2PX29uY2UucHJvdmlkZUR1cmFibGVNYXBTdG9yZShwcm92aWRlRHVyYWJsZU1hcFN0b3JlKTskaM2PX29uY2UucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpOyRozY9fb25jZS5wcm92aWRlRHVyYWJsZVNldFN0b3JlKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUpOyRozY9fb25jZS5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZShwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJWYXREYXRhIjpbIlZhdERhdGFFeHBvcnQiXSwiZGVmaW5lS2luZCI6WyJkZWZpbmVLaW5kIl0sImRlZmluZUtpbmRNdWx0aSI6WyJkZWZpbmVLaW5kTXVsdGkiXSwiZGVmaW5lRHVyYWJsZUtpbmQiOlsiZGVmaW5lRHVyYWJsZUtpbmQiXSwiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSI6WyJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl0sIm1ha2VLaW5kSGFuZGxlIjpbIm1ha2VLaW5kSGFuZGxlIl0sInByb3ZpZGVQcm9taXNlV2F0Y2hlciI6WyJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiOlsibWFrZVNjYWxhckJpZ01hcFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiOlsibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSJdLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiOlsibWFrZVNjYWxhckJpZ1NldFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiOlsibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSJdLCJjYW5CZUR1cmFibGUiOlsiY2FuQmVEdXJhYmxlIl0sInBpY2tGYWNldCI6WyJwaWNrRmFjZXQiXSwicGFydGlhbEFzc2lnbiI6WyJwYXJ0aWFsQXNzaWduIl0sInByb3ZpZGUiOlsicHJvdmlkZSJdLCJtYWtlU3RvcmVVdGlscyI6WyJtYWtlU3RvcmVVdGlscyJdLCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiXSwicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiOlsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiXSwicHJvdmlkZUR1cmFibGVTZXRTdG9yZSI6WyJwcm92aWRlRHVyYWJsZVNldFN0b3JlIl0sInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAjCnLJMAQAATAEAADUAAABAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9leHBvcnRlZC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACZoqjEkhMAAJITAAA+AAAAQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NsZWFuUHJvcG9zYWwuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9lcnRwIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIiwiLi90eXBlR3VhcmRzLmpzIiwiLi9pbnRlcm5hbC10eXBlcy5qcyJdLCJleHBvcnRzIjpbIk1BWF9LRVlXT1JEX0xFTkdUSCIsImFzc2VydEtleXdvcmROYW1lIiwiY2xlYW5LZXl3b3JkcyIsImNsZWFuUHJvcG9zYWwiLCJjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkIiwiY29lcmNlQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LHEsRmFpbCxBbW91bnRNYXRoLGdldEFzc2V0S2luZCxvYmplY3RNYXAsYXNzZXJ0UmVjb3JkLGFzc2VydEtleSxhc3NlcnRQYXR0ZXJuLG11c3RNYXRjaCxpc0tleSxGdWxsUHJvcG9zYWxTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV0sW1wiZ2V0QXNzZXRLaW5kXCIsIFskaM2PX2EgPT4gKGdldEFzc2V0S2luZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJpc0tleVwiLCBbJGjNj19hID0+IChpc0tleSA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiRnVsbFByb3Bvc2FsU2hhcGVcIiwgWyRozY9fYSA9PiAoRnVsbFByb3Bvc2FsU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCIuL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbmNvbnN0ICAgICAgICBNQVhfS0VZV09SRF9MRU5HVEg9MTAwOyRozY9fb25jZS5NQVhfS0VZV09SRF9MRU5HVEgoTUFYX0tFWVdPUkRfTEVOR1RIKTtcblxuY29uc3QgZmlyc3RDYXBBU0NJST0vXltBLVpdW2EtekEtWjAtOV8kXSokLztcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIGFzc2VydEtleXdvcmROYW1lPShrZXl3b3JkKT0+e1xuYXNzZXJ0LnR5cGVvZihrZXl3b3JkLCdzdHJpbmcnKTtcbmtleXdvcmQubGVuZ3RoPD1NQVhfS0VZV09SRF9MRU5HVEh8fFxuRmFpbCBga2V5d29yZCAke3Eoa2V5d29yZCl9IGV4Y2VlZGVkIG1heGltdW0gbGVuZ3RoICR7cShcbk1BWF9LRVlXT1JEX0xFTkdUSClcbiB9IGNoYXJhY3RlcnM7IGdvdCAke2tleXdvcmQubGVuZ3RofWA7XG5maXJzdENhcEFTQ0lJLnRlc3Qoa2V5d29yZCl8fFxuRmFpbCBga2V5d29yZCAke3EoXG5rZXl3b3JkKVxuIH0gbXVzdCBiZSBhbiBhc2NpaSBpZGVudGlmaWVyIHN0YXJ0aW5nIHdpdGggdXBwZXIgY2FzZS5gO1xua2V5d29yZCE9PSdOYU4nJiZrZXl3b3JkIT09J0luZmluaXR5J3x8XG5GYWlsIGBrZXl3b3JkICR7cShrZXl3b3JkKX0gbXVzdCBub3QgYmUgYSBudW1iZXIncyBuYW1lYDtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5hc3NlcnRLZXl3b3JkTmFtZShhc3NlcnRLZXl3b3JkTmFtZSk7XG5jb25zdCAgICAgICAgY2xlYW5LZXl3b3Jkcz0odW5jbGVhbktleXdvcmRSZWNvcmQpPT57XG5oYXJkZW4odW5jbGVhbktleXdvcmRSZWNvcmQpO1xuYXNzZXJ0UmVjb3JkKHVuY2xlYW5LZXl3b3JkUmVjb3JkLCdrZXl3b3JkUmVjb3JkJyk7XG5jb25zdCBrZXl3b3Jkcz1vd25LZXlzKHVuY2xlYW5LZXl3b3JkUmVjb3JkKTtcblxuLy9cbi8vXG5mb3IoY29uc3Qga2V5d29yZCBvZiBrZXl3b3Jkcyl7XG5hc3NlcnRLZXl3b3JkTmFtZShrZXl3b3JkKTtcbiB9XG5cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgKi9rZXl3b3Jkcyk7XG4gfTskaM2PX29uY2UuY2xlYW5LZXl3b3JkcyhjbGVhbktleXdvcmRzKTtcblxuY29uc3QgICAgICAgIGNvZXJjZUFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkPShcbmFsbGVnZWRBbW91bnRLZXl3b3JkUmVjb3JkLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCk9Plxue1xuY2xlYW5LZXl3b3JkcyhhbGxlZ2VkQW1vdW50S2V5d29yZFJlY29yZCk7XG4vL1xucmV0dXJuIG9iamVjdE1hcChhbGxlZ2VkQW1vdW50S2V5d29yZFJlY29yZCwoYW1vdW50KT0+e1xuLy9cbi8vXG5pZihpc0tleShhbW91bnQpKXtcbmNvbnN0IGJyYW5kQXNzZXRLaW5kPWdldEFzc2V0S2luZEJ5QnJhbmQoYW1vdW50LmJyYW5kKTtcbmNvbnN0IGFzc2V0S2luZD1nZXRBc3NldEtpbmQoYW1vdW50KTtcbi8vXG4vL1xuYXNzZXRLaW5kPT09YnJhbmRBc3NldEtpbmR8fFxuRmFpbCBgVGhlIGFtb3VudCAke2Ftb3VudH0gZGlkIG5vdCBoYXZlIHRoZSBhc3NldEtpbmQgb2YgdGhlIGJyYW5kICR7YnJhbmRBc3NldEtpbmR9YDtcbnJldHVybiBBbW91bnRNYXRoLmNvZXJjZShhbW91bnQuYnJhbmQsYW1vdW50KTtcbiB9ZWxzZXtcbmFzc2VydFBhdHRlcm4oYW1vdW50KTtcbnJldHVybiBhbW91bnQ7XG4gfVxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5jb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZChjb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZCk7XG5jb25zdCAgICAgICAgY29lcmNlQW1vdW50S2V5d29yZFJlY29yZD0oXG5hbGxlZ2VkQW1vdW50S2V5d29yZFJlY29yZCxcbmdldEFzc2V0S2luZEJ5QnJhbmQpPT5cbntcbmNvbnN0IHJlc3VsdD1jb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZChcbmFsbGVnZWRBbW91bnRLZXl3b3JkUmVjb3JkLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCk7XG5cbmFzc2VydEtleShyZXN1bHQpO1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuY29lcmNlQW1vdW50S2V5d29yZFJlY29yZChjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkKTtcbmNvbnN0IGFzc2VydEV4aXQ9KGV4aXQpPT5cbm93bktleXMoZXhpdCkubGVuZ3RoPT09MXx8RmFpbCBgZXhpdCAke2V4aXR9IHNob3VsZCBvbmx5IGhhdmUgb25lIGtleWA7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0S2V5d29yZE5vdEluQm90aD0od2FudCxnaXZlKT0+e1xuY29uc3Qgd2FudEtleXdvcmRTZXQ9bmV3IFNldChvd25LZXlzKHdhbnQpKTtcbmNvbnN0IGdpdmVLZXl3b3Jkcz1vd25LZXlzKGdpdmUpO1xuXG5mb3IoY29uc3Qga2V5d29yZCBvZiBnaXZlS2V5d29yZHMpe1xuIXdhbnRLZXl3b3JkU2V0LmhhcyhrZXl3b3JkKXx8XG5GYWlsIGBhIGtleXdvcmQgY2Fubm90IGJlIGluIGJvdGggJ3dhbnQnIGFuZCAnZ2l2ZSdgO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNsZWFuUHJvcG9zYWw9KHByb3Bvc2FsLGdldEFzc2V0S2luZEJ5QnJhbmQpPT57XG5hc3NlcnRSZWNvcmQocHJvcG9zYWwsJ3Byb3Bvc2FsJyk7XG4vL1xuY29uc3R7XG53YW50PWhhcmRlbih7fSksXG5naXZlPWhhcmRlbih7fSksXG5leGl0PWhhcmRlbih7b25EZW1hbmQ6bnVsbH0pLFxuLi4ucmVzdH09XG5wcm9wb3NhbDtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGAke3Byb3Bvc2FsfSAtIE11c3Qgb25seSBoYXZlIHdhbnQ6LCBnaXZlOiwgZXhpdDogcHJvcGVydGllczogJHtyZXN0fWA7XG5cbmNvbnN0IGNsZWFuZWRXYW50PWNvZXJjZUFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkKFxud2FudCxcbmdldEFzc2V0S2luZEJ5QnJhbmQpO1xuXG5jb25zdCBjbGVhbmVkR2l2ZT1jb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkKGdpdmUsZ2V0QXNzZXRLaW5kQnlCcmFuZCk7XG5cbmNvbnN0IGNsZWFuZWRQcm9wb3NhbD1oYXJkZW4oe1xud2FudDpjbGVhbmVkV2FudCxcbmdpdmU6Y2xlYW5lZEdpdmUsXG5leGl0fSk7XG5cbm11c3RNYXRjaChjbGVhbmVkUHJvcG9zYWwsRnVsbFByb3Bvc2FsU2hhcGUsJ3Byb3Bvc2FsJyk7XG5hc3NlcnRFeGl0KGV4aXQpO1xuYXNzZXJ0S2V5d29yZE5vdEluQm90aChjbGVhbmVkV2FudCxjbGVhbmVkR2l2ZSk7XG5yZXR1cm4gY2xlYW5lZFByb3Bvc2FsO1xuIH07JGjNj19vbmNlLmNsZWFuUHJvcG9zYWwoY2xlYW5Qcm9wb3NhbCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJNQVhfS0VZV09SRF9MRU5HVEgiOlsiTUFYX0tFWVdPUkRfTEVOR1RIIl0sImFzc2VydEtleXdvcmROYW1lIjpbImFzc2VydEtleXdvcmROYW1lIl0sImNsZWFuS2V5d29yZHMiOlsiY2xlYW5LZXl3b3JkcyJdLCJjb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZCI6WyJjb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZCJdLCJjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkIjpbImNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQiXSwiY2xlYW5Qcm9wb3NhbCI6WyJjbGVhblByb3Bvc2FsIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIullZr6BQAA+gUAAEoAAABAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RGYWNldC9vZmZlclNhZmV0eS5qc3siaW1wb3J0cyI6WyJAYWdvcmljL2VydHAiXSwiZXhwb3J0cyI6WyJpc09mZmVyU2FmZSIsInNhdGlzZmllc1dhbnQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQW1vdW50TWF0aDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvZXJ0cFwiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNPZmZlclNhZmUsICduYW1lJywge3ZhbHVlOiBcImlzT2ZmZXJTYWZlXCJ9KTskaM2PX29uY2UuaXNPZmZlclNhZmUoaXNPZmZlclNhZmUpOyAgIFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2F0aXNmaWVzSW50ZXJuYWw9KGdpdmVPcldhbnQ9e30sYWxsb2NhdGlvbik9PntcbmNvbnN0IGlzR1RFQnlLZXl3b3JkPShba2V5d29yZCxyZXF1aXJlZEFtb3VudF0pPT57XG4vL1xuLy9cbmlmKGFsbG9jYXRpb25ba2V5d29yZF09PT11bmRlZmluZWQpe1xucmV0dXJuIDA7XG4gfVxuY29uc3QgYWxsb2NhdGlvbkFtb3VudD1hbGxvY2F0aW9uW2tleXdvcmRdO1xucmV0dXJuIEFtb3VudE1hdGguaXNHVEUoYWxsb2NhdGlvbkFtb3VudCxyZXF1aXJlZEFtb3VudCk/MTowO1xuIH07XG5yZXR1cm4gT2JqZWN0LmVudHJpZXMoZ2l2ZU9yV2FudCkuZXZlcnkoaXNHVEVCeUtleXdvcmQpPzE6MDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzYXRpc2ZpZXNXYW50PShwcm9wb3NhbCxhbGxvY2F0aW9uKT0+XG5zYXRpc2ZpZXNJbnRlcm5hbChwcm9wb3NhbC53YW50LGFsbG9jYXRpb24pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uuc2F0aXNmaWVzV2FudChzYXRpc2ZpZXNXYW50KTtcbmNvbnN0IHNhdGlzZmllc0dpdmU9KHByb3Bvc2FsLGFsbG9jYXRpb24pPT5cbnNhdGlzZmllc0ludGVybmFsKHByb3Bvc2FsLmdpdmUsYWxsb2NhdGlvbik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGlzT2ZmZXJTYWZlKHByb3Bvc2FsLGFsbG9jYXRpb24pe1xucmV0dXJuKFxuc2F0aXNmaWVzR2l2ZShwcm9wb3NhbCxhbGxvY2F0aW9uKT4wfHxcbnNhdGlzZmllc1dhbnQocHJvcG9zYWwsYWxsb2NhdGlvbik+MCk7XG5cbiB9XG5cbmhhcmRlbihpc09mZmVyU2FmZSk7XG5oYXJkZW4oc2F0aXNmaWVzV2FudCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzYXRpc2ZpZXNXYW50IjpbInNhdGlzZmllc1dhbnQiXSwiaXNPZmZlclNhZmUiOlsiaXNPZmZlclNhZmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAF+2coTkHAAA5BwAATwAAAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdFN1cHBvcnQvYXRvbWljVHJhbnNmZXIuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSIsIi4uL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJUcmFuc2ZlclBhcnRTaGFwZSIsImF0b21pY1JlYXJyYW5nZSIsImF0b21pY1RyYW5zZmVyIiwiZnJvbU9ubHkiLCJ0b09ubHkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUsU2VhdFNoYXBlOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiQW1vdW50S2V5d29yZFJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJTZWF0U2hhcGVcIiwgWyRozY9fYSA9PiAoU2VhdFNoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5jb25zdCAgICAgICAgVHJhbnNmZXJQYXJ0U2hhcGU9TS5zcGxpdEFycmF5KFxuaGFyZGVuKFtNLm9wdChTZWF0U2hhcGUpLE0ub3B0KFNlYXRTaGFwZSksTS5vcHQoQW1vdW50S2V5d29yZFJlY29yZFNoYXBlKV0pLFxuaGFyZGVuKFtNLm9wdChBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUpXSkpO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5UcmFuc2ZlclBhcnRTaGFwZShUcmFuc2ZlclBhcnRTaGFwZSk7XG5jb25zdCAgICAgICAgYXRvbWljUmVhcnJhbmdlPSh6Y2YsdHJhbnNmZXJzKT0+e1xuemNmLmF0b21pY1JlYXJyYW5nZSh0cmFuc2ZlcnMpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hdG9taWNSZWFycmFuZ2UoYXRvbWljUmVhcnJhbmdlKTtcbmNvbnN0ICAgICAgICBmcm9tT25seT0oZnJvbVNlYXQsZnJvbUFtb3VudHMpPT5cbmhhcmRlbihbZnJvbVNlYXQsdW5kZWZpbmVkLGZyb21BbW91bnRzXSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5mcm9tT25seShmcm9tT25seSk7XG5jb25zdCAgICAgICAgdG9Pbmx5PSh0b1NlYXQsdG9BbW91bnRzKT0+XG5oYXJkZW4oW3VuZGVmaW5lZCx0b1NlYXQsdW5kZWZpbmVkLHRvQW1vdW50c10pO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UudG9Pbmx5KHRvT25seSk7XG5jb25zdCAgICAgICAgYXRvbWljVHJhbnNmZXI9KFxuemNmLFxuZnJvbVNlYXQ9dW5kZWZpbmVkLFxudG9TZWF0PXVuZGVmaW5lZCxcbmZyb21BbW91bnRzPXVuZGVmaW5lZCxcbnRvQW1vdW50cz11bmRlZmluZWQpPT5cbnpjZi5hdG9taWNSZWFycmFuZ2UoaGFyZGVuKFtbZnJvbVNlYXQsdG9TZWF0LGZyb21BbW91bnRzLHRvQW1vdW50c11dKSk7JGjNj19vbmNlLmF0b21pY1RyYW5zZmVyKGF0b21pY1RyYW5zZmVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlRyYW5zZmVyUGFydFNoYXBlIjpbIlRyYW5zZmVyUGFydFNoYXBlIl0sImF0b21pY1JlYXJyYW5nZSI6WyJhdG9taWNSZWFycmFuZ2UiXSwiZnJvbU9ubHkiOlsiZnJvbU9ubHkiXSwidG9Pbmx5IjpbInRvT25seSJdLCJhdG9taWNUcmFuc2ZlciI6WyJhdG9taWNUcmFuc2ZlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADXhR2dlA8AAJQPAABOAAAAQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0U3VwcG9ydC9ib25kaW5nQ3VydmVzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL2Vycm9ycyIsIi4vc2FmZU1hdGguanMiXSwiZXhwb3J0cyI6WyJjYWxjTGlxVmFsdWVUb01pbnQiLCJjYWxjU2Vjb25kYXJ5UmVxdWlyZWQiLCJjYWxjVmFsdWVUb1JlbW92ZSIsImdldElucHV0UHJpY2UiLCJnZXRPdXRwdXRQcmljZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsRmFpbCxuYXRTYWZlTWF0aDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9zYWZlTWF0aC5qc1wiLCBbW1wibmF0U2FmZU1hdGhcIiwgWyRozY9fYSA9PiAobmF0U2FmZU1hdGggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbmNvbnN0e3N1YnRyYWN0LGFkZCxtdWx0aXBseSxmbG9vckRpdmlkZX09bmF0U2FmZU1hdGg7XG5cbmNvbnN0IEJBU0lTX1BPSU5UUz0xMDAwMG47Ly9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnB1dFByaWNlPShcbmlucHV0VmFsdWUsXG5pbnB1dFJlc2VydmUsXG5vdXRwdXRSZXNlcnZlLFxuZmVlQmFzaXNQb2ludHM9MzBuKT0+XG57XG5pbnB1dFZhbHVlPU5hdChpbnB1dFZhbHVlKTtcbmlucHV0UmVzZXJ2ZT1OYXQoaW5wdXRSZXNlcnZlKTtcbm91dHB1dFJlc2VydmU9TmF0KG91dHB1dFJlc2VydmUpO1xuaW5wdXRWYWx1ZT4wbnx8RmFpbCBgaW5wdXRWYWx1ZSAke2lucHV0VmFsdWV9IG11c3QgYmUgcG9zaXRpdmVgO1xuaW5wdXRSZXNlcnZlPjBufHxGYWlsIGBpbnB1dFJlc2VydmUgJHtpbnB1dFJlc2VydmV9IG11c3QgYmUgcG9zaXRpdmVgO1xub3V0cHV0UmVzZXJ2ZT4wbnx8RmFpbCBgb3V0cHV0UmVzZXJ2ZSAke291dHB1dFJlc2VydmV9IG11c3QgYmUgcG9zaXRpdmVgO1xuXG5jb25zdCBvbmVNaW51c0ZlZVNjYWxlZD1zdWJ0cmFjdChCQVNJU19QT0lOVFMsZmVlQmFzaXNQb2ludHMpO1xuY29uc3QgaW5wdXRXaXRoRmVlPW11bHRpcGx5KGlucHV0VmFsdWUsb25lTWludXNGZWVTY2FsZWQpO1xuY29uc3QgbnVtZXJhdG9yPW11bHRpcGx5KGlucHV0V2l0aEZlZSxvdXRwdXRSZXNlcnZlKTtcbmNvbnN0IGRlbm9taW5hdG9yPWFkZChtdWx0aXBseShpbnB1dFJlc2VydmUsQkFTSVNfUE9JTlRTKSxpbnB1dFdpdGhGZWUpO1xucmV0dXJuIGZsb29yRGl2aWRlKG51bWVyYXRvcixkZW5vbWluYXRvcik7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZ2V0SW5wdXRQcmljZShnZXRJbnB1dFByaWNlKTtcbmNvbnN0ICAgICAgICBnZXRPdXRwdXRQcmljZT0oXG5vdXRwdXRWYWx1ZSxcbmlucHV0UmVzZXJ2ZSxcbm91dHB1dFJlc2VydmUsXG5mZWVCYXNpc1BvaW50cz0zMG4pPT5cbntcbm91dHB1dFZhbHVlPU5hdChvdXRwdXRWYWx1ZSk7XG5pbnB1dFJlc2VydmU9TmF0KGlucHV0UmVzZXJ2ZSk7XG5vdXRwdXRSZXNlcnZlPU5hdChvdXRwdXRSZXNlcnZlKTtcblxuaW5wdXRSZXNlcnZlPjBufHxGYWlsIGBpbnB1dFJlc2VydmUgJHtpbnB1dFJlc2VydmV9IG11c3QgYmUgcG9zaXRpdmVgO1xub3V0cHV0UmVzZXJ2ZT4wbnx8RmFpbCBgb3V0cHV0UmVzZXJ2ZSAke291dHB1dFJlc2VydmV9IG11c3QgYmUgcG9zaXRpdmVgO1xub3V0cHV0UmVzZXJ2ZT5vdXRwdXRWYWx1ZXx8XG5GYWlsIGBvdXRwdXRSZXNlcnZlICR7b3V0cHV0UmVzZXJ2ZX0gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3V0cHV0VmFsdWUgJHtvdXRwdXRWYWx1ZX1gO1xuXG5jb25zdCBvbmVNaW51c0ZlZVNjYWxlZD1zdWJ0cmFjdChCQVNJU19QT0lOVFMsZmVlQmFzaXNQb2ludHMpO1xuY29uc3QgbnVtZXJhdG9yPW11bHRpcGx5KG11bHRpcGx5KG91dHB1dFZhbHVlLGlucHV0UmVzZXJ2ZSksQkFTSVNfUE9JTlRTKTtcbmNvbnN0IGRlbm9taW5hdG9yPW11bHRpcGx5KFxuc3VidHJhY3Qob3V0cHV0UmVzZXJ2ZSxvdXRwdXRWYWx1ZSksXG5vbmVNaW51c0ZlZVNjYWxlZCk7XG5cbnJldHVybiBhZGQoZmxvb3JEaXZpZGUobnVtZXJhdG9yLGRlbm9taW5hdG9yKSwxbik7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmdldE91dHB1dFByaWNlKGdldE91dHB1dFByaWNlKTtcbmNvbnN0ICAgICAgICBjYWxjTGlxVmFsdWVUb01pbnQ9KFxubGlxVG9rZW5TdXBwbHksXG5pbnB1dFZhbHVlLFxuaW5wdXRSZXNlcnZlKT0+XG57XG5saXFUb2tlblN1cHBseT1OYXQobGlxVG9rZW5TdXBwbHkpO1xuaW5wdXRWYWx1ZT1OYXQoaW5wdXRWYWx1ZSk7XG5pbnB1dFJlc2VydmU9TmF0KGlucHV0UmVzZXJ2ZSk7XG5cbmlmKGxpcVRva2VuU3VwcGx5PT09MG4pe1xucmV0dXJuIGlucHV0VmFsdWU7XG4gfVxucmV0dXJuIGZsb29yRGl2aWRlKG11bHRpcGx5KGlucHV0VmFsdWUsbGlxVG9rZW5TdXBwbHkpLGlucHV0UmVzZXJ2ZSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmNhbGNMaXFWYWx1ZVRvTWludChjYWxjTGlxVmFsdWVUb01pbnQpO1xuY29uc3QgICAgICAgIGNhbGNTZWNvbmRhcnlSZXF1aXJlZD0oXG5jZW50cmFsSW4sXG5jZW50cmFsUG9vbCxcbnNlY29uZGFyeVBvb2wsXG5zZWNvbmRhcnlJbik9Plxue1xuY2VudHJhbEluPU5hdChjZW50cmFsSW4pO1xuY2VudHJhbFBvb2w9TmF0KGNlbnRyYWxQb29sKTtcbnNlY29uZGFyeVBvb2w9TmF0KHNlY29uZGFyeVBvb2wpO1xuc2Vjb25kYXJ5SW49TmF0KHNlY29uZGFyeUluKTtcblxuaWYoY2VudHJhbFBvb2w9PT0wbnx8c2Vjb25kYXJ5UG9vbD09PTBuKXtcbnJldHVybiBzZWNvbmRhcnlJbjtcbiB9XG5cbmNvbnN0IHNjYWxlZFNlY29uZGFyeT1mbG9vckRpdmlkZShcbm11bHRpcGx5KGNlbnRyYWxJbixzZWNvbmRhcnlQb29sKSxcbmNlbnRyYWxQb29sKTtcblxuY29uc3QgZXhhY3Q9XG5tdWx0aXBseShjZW50cmFsSW4sc2Vjb25kYXJ5UG9vbCk9PT1cbm11bHRpcGx5KHNjYWxlZFNlY29uZGFyeSxjZW50cmFsUG9vbCk7XG5cbi8vXG4vL1xucmV0dXJuIGV4YWN0P3NjYWxlZFNlY29uZGFyeToxbitzY2FsZWRTZWNvbmRhcnk7XG4gfTtcblxuLy9cbi8vXG4kaM2PX29uY2UuY2FsY1NlY29uZGFyeVJlcXVpcmVkKGNhbGNTZWNvbmRhcnlSZXF1aXJlZCk7Y29uc3QgY2FsY1ZhbHVlVG9SZW1vdmU9KFxubGlxVG9rZW5TdXBwbHksXG5wb29sVmFsdWUsXG5saXF1aWRpdHlWYWx1ZUluKT0+XG57XG5saXFUb2tlblN1cHBseT1OYXQobGlxVG9rZW5TdXBwbHkpO1xubGlxdWlkaXR5VmFsdWVJbj1OYXQobGlxdWlkaXR5VmFsdWVJbik7XG5wb29sVmFsdWU9TmF0KHBvb2xWYWx1ZSk7XG5cbnJldHVybiBmbG9vckRpdmlkZShtdWx0aXBseShsaXF1aWRpdHlWYWx1ZUluLHBvb2xWYWx1ZSksbGlxVG9rZW5TdXBwbHkpO1xuIH07JGjNj19vbmNlLmNhbGNWYWx1ZVRvUmVtb3ZlKGNhbGNWYWx1ZVRvUmVtb3ZlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldElucHV0UHJpY2UiOlsiZ2V0SW5wdXRQcmljZSJdLCJnZXRPdXRwdXRQcmljZSI6WyJnZXRPdXRwdXRQcmljZSJdLCJjYWxjTGlxVmFsdWVUb01pbnQiOlsiY2FsY0xpcVZhbHVlVG9NaW50Il0sImNhbGNTZWNvbmRhcnlSZXF1aXJlZCI6WyJjYWxjU2Vjb25kYXJ5UmVxdWlyZWQiXSwiY2FsY1ZhbHVlVG9SZW1vdmUiOlsiY2FsY1ZhbHVlVG9SZW1vdmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnsUyXscJAADHCQAASwAAAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdFN1cHBvcnQvZHVyYWJpbGl0eS5qc3siaW1wb3J0cyI6WyJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiXSwiZXhwb3J0cyI6WyJtYWtlRXBoZW1lcmFQcm92aWRlciIsInByb3ZpZGVBbGwiLCJwcm92aWRlRW1wdHlTZWF0IiwicHJvdmlkZVNpbmdsZXRvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhbGxWYWx1ZXMsb2JqZWN0TWFwLHByb3ZpZGUsRTskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFsbFZhbHVlc1wiLCBbJGjNj19hID0+IChhbGxWYWx1ZXMgPSAkaM2PX2EpXV0sW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcInByb3ZpZGVcIiwgWyRozY9fYSA9PiAocHJvdmlkZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRXBoZW1lcmFQcm92aWRlcj0oaW5pdCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGV4dGFudD1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuICAgKi9cbnJldHVybihrZXkpPT57XG5pZihleHRhbnQuaGFzKGtleSkpe1xuLy9cbnJldHVybiBleHRhbnQuZ2V0KGtleSk7XG4gfVxuY29uc3QgbmV3RXBoPWluaXQoa2V5KTtcbmV4dGFudC5zZXQoa2V5LG5ld0VwaCk7XG5yZXR1cm4gbmV3RXBoO1xuIH07XG4gfTskaM2PX29uY2UubWFrZUVwaGVtZXJhUHJvdmlkZXIobWFrZUVwaGVtZXJhUHJvdmlkZXIpO1xuaGFyZGVuKG1ha2VFcGhlbWVyYVByb3ZpZGVyKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByb3ZpZGVFbXB0eVNlYXQ9KHpjZixiYWdnYWdlLG5hbWUpPT57XG5yZXR1cm4gcHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PnpjZi5tYWtlRW1wdHlTZWF0S2l0KCkuemNmU2VhdCk7XG4gfTskaM2PX29uY2UucHJvdmlkZUVtcHR5U2VhdChwcm92aWRlRW1wdHlTZWF0KTtcbmhhcmRlbihwcm92aWRlRW1wdHlTZWF0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJvdmlkZUFsbD0oYmFnZ2FnZSx0aHVua3MpPT57XG5jb25zdCBrZXlzPU9iamVjdC5rZXlzKHRodW5rcyk7XG4vL1xuY29uc3QgaW5CYWdnYWdlPWJhZ2dhZ2UuaGFzKGtleXNbMF0pO1xuaWYoaW5CYWdnYWdlKXtcbmNvbnN0IG9iaj1vYmplY3RNYXAoXG50aHVua3MsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuKF8sayk9PmJhZ2dhZ2UuZ2V0KGspKTtcblxucmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXJkZW4ob2JqKSk7XG4gfVxuXG5jb25zdCBrZXllZFByb21pc2VzPW9iamVjdE1hcCh0aHVua3MsKGZuKT0+Zm4oKSk7XG5cbnJldHVybiBhbGxWYWx1ZXMoa2V5ZWRQcm9taXNlcykudGhlbigoa2V5ZWRWYWxzKT0+e1xuZm9yKGNvbnN0W2ssdl1vZiBPYmplY3QuZW50cmllcyhrZXllZFZhbHMpKXtcbmJhZ2dhZ2UuaW5pdChrLHYpO1xuIH1cbnJldHVybiBrZXllZFZhbHM7XG4gfSk7XG4gfTskaM2PX29uY2UucHJvdmlkZUFsbChwcm92aWRlQWxsKTtcbmhhcmRlbihwcm92aWRlQWxsKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcm92aWRlU2luZ2xldG9uPShtYXBTdG9yZSxrZXksbWFrZVZhbHVlLHdpdGhWYWx1ZSk9PntcbmNvbnN0IHN0b3JlZD1tYXBTdG9yZS5oYXMoa2V5KT9cbnVuZGVmaW5lZDpcbkUud2hlbihtYWtlVmFsdWUoKSwodik9Pm1hcFN0b3JlLmluaXQoa2V5LGhhcmRlbih2KSkpO1xuXG5yZXR1cm4gRS53aGVuKHN0b3JlZCwoKT0+e1xuY29uc3QgdmFsdWU9bWFwU3RvcmUuZ2V0KGtleSk7XG5pZih3aXRoVmFsdWUpe1xud2l0aFZhbHVlKHZhbHVlKTtcbiB9XG5yZXR1cm4gdmFsdWU7XG4gfSk7XG4gfTskaM2PX29uY2UucHJvdmlkZVNpbmdsZXRvbihwcm92aWRlU2luZ2xldG9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VFcGhlbWVyYVByb3ZpZGVyIjpbIm1ha2VFcGhlbWVyYVByb3ZpZGVyIl0sInByb3ZpZGVFbXB0eVNlYXQiOlsicHJvdmlkZUVtcHR5U2VhdCJdLCJwcm92aWRlQWxsIjpbInByb3ZpZGVBbGwiXSwicHJvdmlkZVNpbmdsZXRvbiI6WyJwcm92aWRlU2luZ2xldG9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJD44EVCCgAAQgoAAEYAAABAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vYm9uZGluZ0N1cnZlcy5qcyIsIi4vc2FmZU1hdGguanMiLCIuL3N0YXRlTWFjaGluZS5qcyIsIi4vYXRvbWljVHJhbnNmZXIuanMiLCIuL3pvZUhlbHBlcnMuanMiLCIuL3JhdGlvLmpzIiwiLi9kdXJhYmlsaXR5LmpzIiwiLi9wcmVwYXJlLW93bmFibGUuanMiLCIuL3ByaWNlQXV0aG9yaXR5LmpzIiwiLi9wcmljZVF1b3RlLmpzIiwiLi9zdGF0aXN0aWNzLmpzIiwiLi9yZWNvcmRlci5qcyIsIi4vdG9waWNzLmpzIl0sImV4cG9ydHMiOlsiYXRvbWljVHJhbnNmZXIiLCJhdG9taWNUcmFuc2ZlciIsImdldE91dHB1dFByaWNlIiwiZ2V0T3V0cHV0UHJpY2UiLCJtYWtlUmF0aW9Gcm9tQW1vdW50cyIsIm1ha2VSYXRpb0Zyb21BbW91bnRzIiwic3dhcCIsInN3YXAiLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL2R1cmFiaWxpdHkuanMiLCIuL3ByZXBhcmUtb3duYWJsZS5qcyIsIi4vcHJpY2VBdXRob3JpdHkuanMiLCIuL3ByaWNlUXVvdGUuanMiLCIuL3JlY29yZGVyLmpzIiwiLi9zdGF0aXN0aWNzLmpzIiwiLi90b3BpY3MuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vYm9uZGluZ0N1cnZlcy5qc1wiLCBbXV0sW1wiLi9zYWZlTWF0aC5qc1wiLCBbXV0sW1wiLi9zdGF0ZU1hY2hpbmUuanNcIiwgW11dLFtcIi4vYXRvbWljVHJhbnNmZXIuanNcIiwgW11dLFtcIi4vem9lSGVscGVycy5qc1wiLCBbXV0sW1wiLi9yYXRpby5qc1wiLCBbXV0sW1wiLi9kdXJhYmlsaXR5LmpzXCIsIFtdXSxbXCIuL3ByZXBhcmUtb3duYWJsZS5qc1wiLCBbXV0sW1wiLi9wcmljZUF1dGhvcml0eS5qc1wiLCBbXV0sW1wiLi9wcmljZVF1b3RlLmpzXCIsIFtdXSxbXCIuL3N0YXRpc3RpY3MuanNcIiwgW11dLFtcIi4vcmVjb3JkZXIuanNcIiwgW11dLFtcIi4vdG9waWNzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9ib25kaW5nQ3VydmVzLmpzIjpbWyJnZXRJbnB1dFByaWNlIiwiZ2V0SW5wdXRQcmljZSJdLFsiZ2V0T3V0cHV0UHJpY2UiLCJnZXRPdXRwdXRQcmljZSJdLFsiY2FsY0xpcVZhbHVlVG9NaW50IiwiY2FsY0xpcVZhbHVlVG9NaW50Il0sWyJjYWxjVmFsdWVUb1JlbW92ZSIsImNhbGNWYWx1ZVRvUmVtb3ZlIl0sWyJjYWxjU2Vjb25kYXJ5UmVxdWlyZWQiLCJjYWxjU2Vjb25kYXJ5UmVxdWlyZWQiXV0sIi4vc2FmZU1hdGguanMiOltbIm5hdFNhZmVNYXRoIiwibmF0U2FmZU1hdGgiXV0sIi4vc3RhdGVNYWNoaW5lLmpzIjpbWyJtYWtlU3RhdGVNYWNoaW5lIiwibWFrZVN0YXRlTWFjaGluZSJdXSwiLi9hdG9taWNUcmFuc2Zlci5qcyI6W1siYXRvbWljUmVhcnJhbmdlIiwiYXRvbWljUmVhcnJhbmdlIl0sWyJhdG9taWNUcmFuc2ZlciIsImF0b21pY1RyYW5zZmVyIl0sWyJmcm9tT25seSIsImZyb21Pbmx5Il0sWyJ0b09ubHkiLCJ0b09ubHkiXV0sIi4vem9lSGVscGVycy5qcyI6W1siZGVmYXVsdEFjY2VwdGFuY2VNc2ciLCJkZWZhdWx0QWNjZXB0YW5jZU1zZyJdLFsic3dhcCIsInN3YXAiXSxbImZpdFByb3Bvc2FsU2hhcGUiLCJmaXRQcm9wb3NhbFNoYXBlIl0sWyJhc3NlcnRQcm9wb3NhbFNoYXBlIiwiYXNzZXJ0UHJvcG9zYWxTaGFwZSJdLFsiYXNzZXJ0SXNzdWVyS2V5d29yZHMiLCJhc3NlcnRJc3N1ZXJLZXl3b3JkcyJdLFsic2F0aXNmaWVzIiwic2F0aXNmaWVzIl0sWyJhc3NlcnROYXRBc3NldEtpbmQiLCJhc3NlcnROYXRBc3NldEtpbmQiXSxbInN3YXBFeGFjdCIsInN3YXBFeGFjdCJdLFsiZGVwb3NpdFRvU2VhdCIsImRlcG9zaXRUb1NlYXQiXSxbIndpdGhkcmF3RnJvbVNlYXQiLCJ3aXRoZHJhd0Zyb21TZWF0Il0sWyJzYXZlQWxsSXNzdWVycyIsInNhdmVBbGxJc3N1ZXJzIl0sWyJvZmZlclRvIiwib2ZmZXJUbyJdXSwiLi9yYXRpby5qcyI6W1sibWFrZVJhdGlvIiwibWFrZVJhdGlvIl0sWyJtYWtlUmF0aW9Gcm9tQW1vdW50cyIsIm1ha2VSYXRpb0Zyb21BbW91bnRzIl0sWyJmbG9vck11bHRpcGx5QnkiLCJmbG9vck11bHRpcGx5QnkiXSxbImZsb29yRGl2aWRlQnkiLCJmbG9vckRpdmlkZUJ5Il0sWyJjZWlsTXVsdGlwbHlCeSIsImNlaWxNdWx0aXBseUJ5Il0sWyJjZWlsRGl2aWRlQnkiLCJjZWlsRGl2aWRlQnkiXSxbImFzc2VydElzUmF0aW8iLCJhc3NlcnRJc1JhdGlvIl0sWyJpbnZlcnRSYXRpbyIsImludmVydFJhdGlvIl0sWyJvbmVNaW51cyIsIm9uZU1pbnVzIl0sWyJhZGRSYXRpb3MiLCJhZGRSYXRpb3MiXSxbIm11bHRpcGx5UmF0aW9zIiwibXVsdGlwbHlSYXRpb3MiXSxbInJhdGlvc1NhbWUiLCJyYXRpb3NTYW1lIl0sWyJxdWFudGl6ZSIsInF1YW50aXplIl0sWyJyYXRpb0dURSIsInJhdGlvR1RFIl0sWyJzdWJ0cmFjdFJhdGlvcyIsInN1YnRyYWN0UmF0aW9zIl0sWyJyYXRpb1RvTnVtYmVyIiwicmF0aW9Ub051bWJlciJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA71SWxRYIAAAWCAAAUAAAAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdFN1cHBvcnQvcHJlcGFyZS1vd25hYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIiwiQGFnb3JpYy9iYXNlLXpvbmUvem9uZS1oZWxwZXJzLmpzIiwiLi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbInByZXBhcmVPd25hYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE0scHJlcGFyZVJldm9jYWJsZU1ha2VyS2l0LE9mZmVySGFuZGxlckk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9iYXNlLXpvbmUvem9uZS1oZWxwZXJzLmpzXCIsIFtbXCJwcmVwYXJlUmV2b2NhYmxlTWFrZXJLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZVJldm9jYWJsZU1ha2VyS2l0ID0gJGjNj19hKV1dXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiT2ZmZXJIYW5kbGVySVwiLCBbJGjNj19hID0+IChPZmZlckhhbmRsZXJJID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbmNvbnN0IFRyYW5zZmVyUHJvcG9zYWxTaGFwZT1NLnNwbGl0UmVjb3JkKHtcbmdpdmU6e30sXG53YW50Ont9LFxuZXhpdDp7XG5vbkRlbWFuZDpudWxsfX0pO1xuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlT3duYWJsZT0oXG56b25lLFxubWFrZUludml0YXRpb24sXG51S2luZE5hbWUsXG51TWV0aG9kTmFtZXMsXG5vcHRpb25zPXt9KT0+XG57XG5jb25zdHt1SW50ZXJmYWNlTmFtZT11S2luZE5hbWV9PW9wdGlvbnM7XG5jb25zdHtyZXZva2UsbWFrZVJldm9jYWJsZX09cHJlcGFyZVJldm9jYWJsZU1ha2VyS2l0KFxuem9uZSxcbnVLaW5kTmFtZSxcbnVNZXRob2ROYW1lcyxcbntcbnVJbnRlcmZhY2VOYW1lLFxuZXh0cmFNZXRob2RHdWFyZHM6e1xubWFrZVRyYW5zZmVySW52aXRhdGlvbjpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKX0sXG5cbmV4dHJhTWV0aG9kczp7XG5tYWtlVHJhbnNmZXJJbnZpdGF0aW9uKCl7XG5jb25zdHt1bmRlcmx5aW5nfT10aGlzLnN0YXRlO1xuY29uc3R7cmV2b2NhYmxlfT10aGlzLmZhY2V0cztcbmNvbnN0IGN1c3RvbURldGFpbHM9dW5kZXJseWluZy5nZXRJbnZpdGF0aW9uQ3VzdG9tRGV0YWlscygpO1xuLy9cbmNvbnN0IHRyYW5zZmVySGFuZGxlcj1tYWtlVHJhbnNmZXJIYW5kbGVyKHVuZGVybHlpbmcpO1xuXG5jb25zdCBpbnZpdGF0aW9uPW1ha2VJbnZpdGF0aW9uKFxudHJhbnNmZXJIYW5kbGVyLFxuJ3RyYW5zZmVyJyxcbmN1c3RvbURldGFpbHMsXG5UcmFuc2ZlclByb3Bvc2FsU2hhcGUpO1xuXG5yZXZva2UocmV2b2NhYmxlKTtcbnJldHVybiBpbnZpdGF0aW9uO1xuIH19fSk7XG5cblxuXG5cbmNvbnN0IG1ha2VUcmFuc2ZlckhhbmRsZXI9em9uZS5leG9DbGFzcyhcbidUcmFuc2ZlckhhbmRsZXInLFxuT2ZmZXJIYW5kbGVySSxcbih1bmRlcmx5aW5nKT0+KHtcbnVuZGVybHlpbmd9KSxcblxue1xuaGFuZGxlKHNlYXQpe1xuY29uc3R7dW5kZXJseWluZ309dGhpcy5zdGF0ZTtcbmNvbnN0IHJldm9jYWJsZT1tYWtlUmV2b2NhYmxlKHVuZGVybHlpbmcpO1xuc2VhdC5leGl0KCk7XG5yZXR1cm4gcmV2b2NhYmxlO1xuIH19KTtcblxuXG5cbmNvbnN0IG1ha2VPd25hYmxlPSh1bmRlcmx5aW5nKT0+bWFrZVJldm9jYWJsZSh1bmRlcmx5aW5nKTtcbnJldHVybiBoYXJkZW4obWFrZU93bmFibGUpO1xuIH07JGjNj19vbmNlLnByZXBhcmVPd25hYmxlKHByZXBhcmVPd25hYmxlKTtcbmhhcmRlbihwcmVwYXJlT3duYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlT3duYWJsZSI6WyJwcmVwYXJlT3duYWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACec9JUvCMAALwjAABPAAAAQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0U3VwcG9ydC9wcmljZUF1dGhvcml0eS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGFnb3JpYy9lcnRwIiwiQGFnb3JpYy9ub3RpZmllciIsIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL3RpbWUiLCJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiUHJpY2VBdXRob3JpdHlJIiwibWFrZU9uZXdheVByaWNlQXV0aG9yaXR5S2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxFLEZhcixtYWtlUHJvbWlzZUtpdCxBbW91bnRNYXRoLEFtb3VudFNoYXBlLEJyYW5kU2hhcGUsbWFrZU5vdGlmaWVyLG1ha2VUcmFjZXIsVGltZXN0YW1wU2hhcGUsTTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXSxbXCJBbW91bnRTaGFwZVwiLCBbJGjNj19hID0+IChBbW91bnRTaGFwZSA9ICRozY9fYSldXSxbXCJCcmFuZFNoYXBlXCIsIFskaM2PX2EgPT4gKEJyYW5kU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJtYWtlTm90aWZpZXJcIiwgWyRozY9fYSA9PiAobWFrZU5vdGlmaWVyID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wibWFrZVRyYWNlclwiLCBbJGjNj19hID0+IChtYWtlVHJhY2VyID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy90aW1lXCIsIFtbXCJUaW1lc3RhbXBTaGFwZVwiLCBbJGjNj19hID0+IChUaW1lc3RhbXBTaGFwZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdCB0cmFjZT1tYWtlVHJhY2VyKCdQQScsZmFsc2UpO1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNMVD0oYW1vdW50LGFtb3VudExpbWl0KT0+IUFtb3VudE1hdGguaXNHVEUoYW1vdW50LGFtb3VudExpbWl0KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNMVEU9KGFtb3VudCxhbW91bnRMaW1pdCk9PkFtb3VudE1hdGguaXNHVEUoYW1vdW50TGltaXQsYW1vdW50KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNHVEU9KGFtb3VudCxhbW91bnRMaW1pdCk9PkFtb3VudE1hdGguaXNHVEUoYW1vdW50LGFtb3VudExpbWl0KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNHVD0oYW1vdW50LGFtb3VudExpbWl0KT0+IUFtb3VudE1hdGguaXNHVEUoYW1vdW50TGltaXQsYW1vdW50KTtcblxuLypcblxuXG5cbiAqL1xuXG5jb25zdCBHdWFyZENhbGxBbW91bnRUdXBsZT1NLmNhbGwoQW1vdW50U2hhcGUsQW1vdW50U2hhcGUpLnJldHVybnMoXG5NLnByb21pc2UoKSk7XG5cbmNvbnN0ICAgICAgICBQcmljZUF1dGhvcml0eUk9TS5pbnRlcmZhY2UoJ1ByaWNlQXV0aG9yaXR5Jyx7XG5nZXRRdW90ZUlzc3VlcjpNLmNhbGwoQnJhbmRTaGFwZSxCcmFuZFNoYXBlKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldFRpbWVyU2VydmljZTpNLmNhbGwoQnJhbmRTaGFwZSxCcmFuZFNoYXBlKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnF1b3RlR2l2ZW46TS5jYWxsKEFtb3VudFNoYXBlLEJyYW5kU2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpLFxucXVvdGVXYW50ZWQ6TS5jYWxsKEJyYW5kU2hhcGUsQW1vdW50U2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpLFxubWFrZVF1b3RlTm90aWZpZXI6TS5jYWxsKEFtb3VudFNoYXBlLEJyYW5kU2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpLFxucXVvdGVBdFRpbWU6TS5jYWxsKFRpbWVzdGFtcFNoYXBlLEFtb3VudFNoYXBlLEJyYW5kU2hhcGUpLnJldHVybnMoXG5NLnByb21pc2UoKSksXG5cbnF1b3RlV2hlbkxUOkd1YXJkQ2FsbEFtb3VudFR1cGxlLFxucXVvdGVXaGVuTFRFOkd1YXJkQ2FsbEFtb3VudFR1cGxlLFxucXVvdGVXaGVuR1RFOkd1YXJkQ2FsbEFtb3VudFR1cGxlLFxucXVvdGVXaGVuR1Q6R3VhcmRDYWxsQW1vdW50VHVwbGUsXG5tdXRhYmxlUXVvdGVXaGVuTFQ6R3VhcmRDYWxsQW1vdW50VHVwbGUsXG5tdXRhYmxlUXVvdGVXaGVuTFRFOkd1YXJkQ2FsbEFtb3VudFR1cGxlLFxubXV0YWJsZVF1b3RlV2hlbkdURTpHdWFyZENhbGxBbW91bnRUdXBsZSxcbm11dGFibGVRdW90ZVdoZW5HVDpHdWFyZENhbGxBbW91bnRUdXBsZX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLlByaWNlQXV0aG9yaXR5SShQcmljZUF1dGhvcml0eUkpO1xuY29uc3QgICAgICAgIG1ha2VPbmV3YXlQcmljZUF1dGhvcml0eUtpdD0ob3B0cyk9PntcbmNvbnN0e1xudGltZXIsXG5jcmVhdGVRdW90ZSxcbmFjdHVhbEJyYW5kSW4sXG5hY3R1YWxCcmFuZE91dCxcbnF1b3RlSXNzdWVyLFxubm90aWZpZXJ9PVxub3B0cztcblxubGV0IGhhdmVGaXJzdFF1b3RlPWZhbHNlO1xuXG52b2lkIEUobm90aWZpZXIpLlxuZ2V0VXBkYXRlU2luY2UoKS5cbnRoZW4oKF8pPT5oYXZlRmlyc3RRdW90ZT10cnVlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0cmlnZ2Vycz1uZXcgU2V0KCk7XG5jb25zdCBtdXRhYmxlVHJpZ2dlcnM9bmV3IE1hcCgpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBmaXJlVHJpZ2dlcnM9YXN5bmModHJpZ2dlckNyZWF0ZVF1b3RlKT0+e1xuaWYoIWhhdmVGaXJzdFF1b3RlKXtcbnJldHVybjtcbiB9XG5hd2FpdCBQcm9taXNlLmFsbChcblsuLi50cmlnZ2VycywuLi5BcnJheS5mcm9tKG11dGFibGVUcmlnZ2Vycy52YWx1ZXMoKSldLm1hcCgodHJpZ2dlcik9PlxudHJpZ2dlcih0cmlnZ2VyQ3JlYXRlUXVvdGUpKSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZVF1b3RlV2hlbk91dD1cbihjb21wYXJlQW1vdW50c0ZuKT0+XG4vKlxuXG5cblxuXG5cbiAgICAgKi9cbmFzeW5jKGFtb3VudEluLGFtb3VudE91dExpbWl0KT0+e1xuYW1vdW50SW49QW1vdW50TWF0aC5jb2VyY2UoYWN0dWFsQnJhbmRJbixhbW91bnRJbik7XG5hbW91bnRPdXRMaW1pdD1BbW91bnRNYXRoLmNvZXJjZShhY3R1YWxCcmFuZE91dCxhbW91bnRPdXRMaW1pdCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHRyaWdnZXJQSz1tYWtlUHJvbWlzZUtpdCgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdHJpZ2dlcj1hc3luYyhjcmVhdGVJbnN0YW50UXVvdGUpPT57XG50cnl7XG5jb25zdCBxdW90ZVA9Y3JlYXRlSW5zdGFudFF1b3RlKChjYWxjQW1vdW50T3V0KT0+e1xuaWYoIXRyaWdnZXJzLmhhcyh0cmlnZ2VyKSl7XG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jb25zdCBhbW91bnRPdXQ9Y2FsY0Ftb3VudE91dChhbW91bnRJbik7XG5cbmlmKCFjb21wYXJlQW1vdW50c0ZuKGFtb3VudE91dCxhbW91bnRPdXRMaW1pdCkpe1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vL1xucmV0dXJue2Ftb3VudEluLGFtb3VudE91dH07XG4gfSk7XG5cbmlmKCFxdW90ZVApe1xuLy9cbnJldHVybjtcbiB9XG5cbnRyaWdnZXJzLmRlbGV0ZSh0cmlnZ2VyKTtcbnRyaWdnZXJQSy5yZXNvbHZlKHF1b3RlUCk7XG4gfWNhdGNoKGUpe1xuLy9cbnRyaWdnZXJQSy5yZWplY3QoZSk7XG50cmlnZ2Vycy5kZWxldGUodHJpZ2dlcik7XG4gfVxuIH07XG5cbnRyaWdnZXJzLmFkZCh0cmlnZ2VyKTtcblxuLy9cbmF3YWl0IHRyaWdnZXIoY3JlYXRlUXVvdGUpO1xuXG5yZXR1cm4gdHJpZ2dlclBLLnByb21pc2U7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlTXV0YWJsZVF1b3RlPVxuKGNvbXBhcmVBbW91bnRzRm4pPT5cbi8qXG5cblxuICAgICAqL1xuYXN5bmMoYW1vdW50SW4sYW1vdW50T3V0TGltaXQpPT57XG5BbW91bnRNYXRoLmNvZXJjZShhY3R1YWxCcmFuZEluLGFtb3VudEluKTtcbkFtb3VudE1hdGguY29lcmNlKGFjdHVhbEJyYW5kT3V0LGFtb3VudE91dExpbWl0KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdHJpZ2dlclBLPW1ha2VQcm9taXNlS2l0KCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbXV0YWJsZVF1b3RlPUZhcignTXV0YWJsZVF1b3RlJyx7XG5jYW5jZWw6KGUpPT50cmlnZ2VyUEsucmVqZWN0KGUpLFxudXBkYXRlTGV2ZWw6KG5ld0Ftb3VudEluLG5ld0Ftb3VudE91dExpbWl0KT0+e1xuY29uc3QgY29lcmNlZEFtb3VudEluPUFtb3VudE1hdGguY29lcmNlKGFjdHVhbEJyYW5kSW4sbmV3QW1vdW50SW4pO1xuY29uc3QgY29lcmNlZEFtb3VudE91dExpbWl0PUFtb3VudE1hdGguY29lcmNlKFxuYWN0dWFsQnJhbmRPdXQsXG5uZXdBbW91bnRPdXRMaW1pdCk7XG5cbmFtb3VudEluPWNvZXJjZWRBbW91bnRJbjtcbmFtb3VudE91dExpbWl0PWNvZXJjZWRBbW91bnRPdXRMaW1pdDtcbnZvaWQgZmlyZVRyaWdnZXJzKGNyZWF0ZVF1b3RlKTtcbiB9LFxuZ2V0UHJvbWlzZTooKT0+dHJpZ2dlclBLLnByb21pc2V9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbXV0YWJsZVRyaWdnZXI9YXN5bmMoY3JlYXRlSW5zdGFudFF1b3RlKT0+e1xudHJ5e1xuY29uc3QgcXVvdGVQPWNyZWF0ZUluc3RhbnRRdW90ZSgoY2FsY0Ftb3VudE91dCk9PntcbmlmKCFtdXRhYmxlVHJpZ2dlcnMuaGFzKG11dGFibGVRdW90ZSkpe1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY29uc3QgYW1vdW50T3V0PWNhbGNBbW91bnRPdXQoYW1vdW50SW4pO1xuXG5pZighY29tcGFyZUFtb3VudHNGbihhbW91bnRPdXQsYW1vdW50T3V0TGltaXQpKXtcbi8vXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLy9cbnJldHVybnthbW91bnRJbixhbW91bnRPdXR9O1xuIH0pO1xuXG5pZighcXVvdGVQKXtcbi8vXG5yZXR1cm47XG4gfVxuXG5tdXRhYmxlVHJpZ2dlcnMuZGVsZXRlKG11dGFibGVRdW90ZSk7XG50cmlnZ2VyUEsucmVzb2x2ZShxdW90ZVApO1xuIH1jYXRjaChlKXtcbi8vXG50cmlnZ2VyUEsucmVqZWN0KGUpO1xubXV0YWJsZVRyaWdnZXJzLmRlbGV0ZShtdXRhYmxlUXVvdGUpO1xuIH1cbiB9O1xuXG5tdXRhYmxlVHJpZ2dlcnMuc2V0KG11dGFibGVRdW90ZSxtdXRhYmxlVHJpZ2dlcik7XG5cbi8vXG5hd2FpdCBtdXRhYmxlVHJpZ2dlcihjcmVhdGVRdW90ZSk7XG5cbnJldHVybiBtdXRhYmxlUXVvdGU7XG4gfTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGFzc2VydEJyYW5kcz0oYnJhbmRJbixicmFuZE91dCk9PntcbmJyYW5kSW49PT1hY3R1YWxCcmFuZElufHxcbkZhaWwgYERlc2lyZWQgYnJhbmRJbiAke3EoYnJhbmRJbil9IG11c3QgbWF0Y2ggJHtxKGFjdHVhbEJyYW5kSW4pfWA7XG5icmFuZE91dD09PWFjdHVhbEJyYW5kT3V0fHxcbkZhaWwgYERlc2lyZWQgYnJhbmRPdXQgJHtxKGJyYW5kT3V0KX0gbXVzdCBtYXRjaCAke3EoYWN0dWFsQnJhbmRPdXQpfWA7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHByaWNlQXV0aG9yaXR5PUZhcignUHJpY2VBdXRob3JpdHknLHtcbmdldFF1b3RlSXNzdWVyKGJyYW5kSW4sYnJhbmRPdXQpe1xuYXNzZXJ0QnJhbmRzKGJyYW5kSW4sYnJhbmRPdXQpO1xucmV0dXJuIHF1b3RlSXNzdWVyO1xuIH0sXG5nZXRUaW1lclNlcnZpY2UoYnJhbmRJbixicmFuZE91dCl7XG5hc3NlcnRCcmFuZHMoYnJhbmRJbixicmFuZE91dCk7XG5yZXR1cm4gdGltZXI7XG4gfSxcbm1ha2VRdW90ZU5vdGlmaWVyKGFtb3VudEluLGJyYW5kT3V0KXtcbkFtb3VudE1hdGguY29lcmNlKGFjdHVhbEJyYW5kSW4sYW1vdW50SW4pO1xuYXNzZXJ0QnJhbmRzKGFtb3VudEluLmJyYW5kLGJyYW5kT3V0KTtcblxuLy9cbmNvbnN0IHNwZWNpZmljQmFzZU5vdGlmaWVyPWhhcmRlbih7XG4gICAgICBhc3luYyBnZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudD11bmRlZmluZWQpe1xuLy9cbmNvbnN0IHJlY29yZD1hd2FpdCBFKG5vdGlmaWVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCk7XG5cbi8vXG5sZXQgcXVvdGU7XG4vL1xuXG50cnl7XG5xdW90ZT1jcmVhdGVRdW90ZSgoY2FsY0Ftb3VudE91dCk9Pih7XG5hbW91bnRJbixcbmFtb3VudE91dDpjYWxjQW1vdW50T3V0KGFtb3VudEluKX0pKTtcblxuIH1jYXRjaChlKXtcbi8vXG4gfVxuXG5pZighcXVvdGUpe1xudGhyb3cgRmFpbCBgY3JlYXRlUXVvdGUgcmV0dXJuZWQgbm90aGluZ2A7XG4gfVxuXG5jb25zdCB2YWx1ZT1hd2FpdCBxdW90ZTtcbnJldHVybiBoYXJkZW4oe1xudmFsdWUsXG51cGRhdGVDb3VudDpyZWNvcmQudXBkYXRlQ291bnR9KTtcblxuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3BlY2lmaWNOb3RpZmllcj1GYXIoJ1F1b3RlTm90aWZpZXInLHtcbi4uLm1ha2VOb3RpZmllcihzcGVjaWZpY0Jhc2VOb3RpZmllciksXG4vL1xuLi4uc3BlY2lmaWNCYXNlTm90aWZpZXJ9KTtcblxucmV0dXJuIHNwZWNpZmljTm90aWZpZXI7XG4gfSxcbiAgICAgIGFzeW5jIHF1b3RlR2l2ZW4oYW1vdW50SW4sYnJhbmRPdXQpe1xudHJhY2UoJ3F1b3RlR2l2ZW4nLGFtb3VudEluLGJyYW5kT3V0KTtcbkFtb3VudE1hdGguY29lcmNlKGFjdHVhbEJyYW5kSW4sYW1vdW50SW4pO1xuYXNzZXJ0QnJhbmRzKGFtb3VudEluLmJyYW5kLGJyYW5kT3V0KTtcblxuYXdhaXQgRShub3RpZmllcikuZ2V0VXBkYXRlU2luY2UoKTtcbmNvbnN0IHF1b3RlPWNyZWF0ZVF1b3RlKChjYWxjQW1vdW50T3V0KT0+KHtcbmFtb3VudEluLFxuYW1vdW50T3V0OmNhbGNBbW91bnRPdXQoYW1vdW50SW4pfSkpO1xuXG5hc3NlcnQocXVvdGUpO1xucmV0dXJuIHF1b3RlO1xuIH0sXG4gICAgICBhc3luYyBxdW90ZVdhbnRlZChicmFuZEluLGFtb3VudE91dCl7XG5BbW91bnRNYXRoLmNvZXJjZShhY3R1YWxCcmFuZE91dCxhbW91bnRPdXQpO1xuYXNzZXJ0QnJhbmRzKGJyYW5kSW4sYW1vdW50T3V0LmJyYW5kKTtcblxuYXdhaXQgRShub3RpZmllcikuZ2V0VXBkYXRlU2luY2UoKTtcbmNvbnN0IHF1b3RlPWNyZWF0ZVF1b3RlKChjYWxjQW1vdW50T3V0LGNhbGNBbW91bnRJbik9Pntcbi8vXG5jb25zdCBhbW91bnRJbj1jYWxjQW1vdW50SW4oYW1vdW50T3V0KTtcbmNvbnN0IGFjdHVhbEFtb3VudE91dD1jYWxjQW1vdW50T3V0KGFtb3VudEluKTtcbkFtb3VudE1hdGguaXNHVEUoYWN0dWFsQW1vdW50T3V0LGFtb3VudE91dCl8fFxuRmFpbCBgQ2FsY3VsYXRpb24gb2YgJHthY3R1YWxBbW91bnRPdXR9IGRpZG4ndCBjb3ZlciBleHBlY3RlZCAke2Ftb3VudE91dH1gO1xucmV0dXJue2Ftb3VudEluLGFtb3VudE91dH07XG4gfSk7XG5hc3NlcnQocXVvdGUpO1xucmV0dXJuIHF1b3RlO1xuIH0sXG4gICAgICBhc3luYyBxdW90ZUF0VGltZShkZWFkbGluZSxhbW91bnRJbixicmFuZE91dCl7XG5BbW91bnRNYXRoLmNvZXJjZShhY3R1YWxCcmFuZEluLGFtb3VudEluKTtcbmFzc2VydEJyYW5kcyhhbW91bnRJbi5icmFuZCxicmFuZE91dCk7XG5cbmF3YWl0IEUobm90aWZpZXIpLmdldFVwZGF0ZVNpbmNlKCk7XG5jb25zdCBxdW90ZVBLPW1ha2VQcm9taXNlS2l0KCk7XG5hd2FpdCBFKHRpbWVyKS5zZXRXYWtldXAoXG5kZWFkbGluZSxcbkZhcignd2FrZU9iaicse1xuICAgICAgYXN5bmMgd2FrZSh0aW1lc3RhbXApe1xuYXdhaXQgbnVsbDtcbnRyeXtcbmNvbnN0IHF1b3RlUD1jcmVhdGVRdW90ZSgoY2FsY0Ftb3VudE91dCk9Pih7XG5hbW91bnRJbixcbmFtb3VudE91dDpjYWxjQW1vdW50T3V0KGFtb3VudEluKSxcbnRpbWVzdGFtcH0pKTtcblxuXG4vL1xuLy9cbnF1b3RlUEsucmVzb2x2ZShxdW90ZVApO1xuYXdhaXQgcXVvdGVQSy5wcm9taXNlO1xuIH1jYXRjaChlKXtcbnF1b3RlUEsucmVqZWN0KGUpO1xuIH1cbiB9fSkpO1xuXG5cblxuLy9cbnJldHVybiBxdW90ZVBLLnByb21pc2U7XG4gfSxcbnF1b3RlV2hlbkxUOm1ha2VRdW90ZVdoZW5PdXQoaXNMVCksXG5xdW90ZVdoZW5MVEU6bWFrZVF1b3RlV2hlbk91dChpc0xURSksXG5xdW90ZVdoZW5HVEU6bWFrZVF1b3RlV2hlbk91dChpc0dURSksXG5xdW90ZVdoZW5HVDptYWtlUXVvdGVXaGVuT3V0KGlzR1QpLFxubXV0YWJsZVF1b3RlV2hlbkxUOm1ha2VNdXRhYmxlUXVvdGUoaXNMVCksXG5tdXRhYmxlUXVvdGVXaGVuTFRFOm1ha2VNdXRhYmxlUXVvdGUoaXNMVEUpLFxubXV0YWJsZVF1b3RlV2hlbkdUOm1ha2VNdXRhYmxlUXVvdGUoaXNHVCksXG5tdXRhYmxlUXVvdGVXaGVuR1RFOm1ha2VNdXRhYmxlUXVvdGUoaXNHVEUpfSk7XG5cblxucmV0dXJue3ByaWNlQXV0aG9yaXR5LGFkbWluRmFjZXQ6e2ZpcmVUcmlnZ2Vyc319O1xuIH07JGjNj19vbmNlLm1ha2VPbmV3YXlQcmljZUF1dGhvcml0eUtpdChtYWtlT25ld2F5UHJpY2VBdXRob3JpdHlLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHJpY2VBdXRob3JpdHlJIjpbIlByaWNlQXV0aG9yaXR5SSJdLCJtYWtlT25ld2F5UHJpY2VBdXRob3JpdHlLaXQiOlsibWFrZU9uZXdheVByaWNlQXV0aG9yaXR5S2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGzpxhKwBwAAsAcAAEsAAABAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L3ByaWNlUXVvdGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbmF0IiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvZXJ0cCJdLCJleHBvcnRzIjpbImdldEFtb3VudEluIiwiZ2V0QW1vdW50T3V0IiwiZ2V0UHJpY2VEZXNjcmlwdGlvbiIsImdldFRpbWVzdGFtcCIsInVuaXRBbW91bnQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxOYXQsRSxBbW91bnRNYXRoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjNj19hID0+IChOYXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRQcmljZURlc2NyaXB0aW9uPShxdW90ZSk9PntcbnF1b3RlLnF1b3RlQW1vdW50LnZhbHVlLmxlbmd0aD09PTF8fFxuRmFpbCBgcXVvdGVBbW91bnQgc2V0IG11c3QgaGF2ZSBvbmUgbWVtYmVyYDtcbnJldHVybiBxdW90ZS5xdW90ZUFtb3VudC52YWx1ZVswXTtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5nZXRQcmljZURlc2NyaXB0aW9uKGdldFByaWNlRGVzY3JpcHRpb24pO1xuY29uc3QgICAgICAgIGdldEFtb3VudEluPShxdW90ZSk9PmdldFByaWNlRGVzY3JpcHRpb24ocXVvdGUpLmFtb3VudEluO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuZ2V0QW1vdW50SW4oZ2V0QW1vdW50SW4pO1xuY29uc3QgICAgICAgIGdldEFtb3VudE91dD0ocXVvdGUpPT5nZXRQcmljZURlc2NyaXB0aW9uKHF1b3RlKS5hbW91bnRPdXQ7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLmdldEFtb3VudE91dChnZXRBbW91bnRPdXQpO1xuY29uc3QgICAgICAgIGdldFRpbWVzdGFtcD0ocXVvdGUpPT5nZXRQcmljZURlc2NyaXB0aW9uKHF1b3RlKS50aW1lc3RhbXA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuZ2V0VGltZXN0YW1wKGdldFRpbWVzdGFtcCk7XG5jb25zdCAgICAgICAgdW5pdEFtb3VudD1hc3luYyhicmFuZCk9Pntcbi8vXG5jb25zdCBkaXNwbGF5SW5mbz1hd2FpdCBFKGJyYW5kKS5nZXREaXNwbGF5SW5mbygpO1xuY29uc3QgZGVjaW1hbFBsYWNlcz1kaXNwbGF5SW5mby5kZWNpbWFsUGxhY2VzPz8wO1xucmV0dXJuIEFtb3VudE1hdGgubWFrZShicmFuZCwxMG4qKk5hdChkZWNpbWFsUGxhY2VzKSk7XG4gfTskaM2PX29uY2UudW5pdEFtb3VudCh1bml0QW1vdW50KTtcbmhhcmRlbih1bml0QW1vdW50KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldFByaWNlRGVzY3JpcHRpb24iOlsiZ2V0UHJpY2VEZXNjcmlwdGlvbiJdLCJnZXRBbW91bnRJbiI6WyJnZXRBbW91bnRJbiJdLCJnZXRBbW91bnRPdXQiOlsiZ2V0QW1vdW50T3V0Il0sImdldFRpbWVzdGFtcCI6WyJnZXRUaW1lc3RhbXAiXSwidW5pdEFtb3VudCI6WyJ1bml0QW1vdW50Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADWYCkSpKQAAqSkAAEYAAABAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L3JhdGlvLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvZXJ0cCIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9uYXQiLCIuL3NhZmVNYXRoLmpzIl0sImV4cG9ydHMiOlsiYWRkUmF0aW9zIiwiYXNzZXJ0SXNSYXRpbyIsImFzc2VydFBhcnNhYmxlTnVtYmVyIiwiY2VpbERpdmlkZUJ5IiwiY2VpbE11bHRpcGx5QnkiLCJkaXZpZGVCeSIsImZsb29yRGl2aWRlQnkiLCJmbG9vck11bHRpcGx5QnkiLCJpbnZlcnRSYXRpbyIsIm1ha2VSYXRpbyIsIm1ha2VSYXRpb0Zyb21BbW91bnRzIiwibXVsdGlwbHlCeSIsIm11bHRpcGx5UmF0aW9zIiwib25lTWludXMiLCJwYXJzZVJhdGlvIiwicXVhbnRpemUiLCJyYXRpb0dURSIsInJhdGlvVG9OdW1iZXIiLCJyYXRpb3NTYW1lIiwic3VidHJhY3RSYXRpb3MiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLEFtb3VudE1hdGgsYXNzZXJ0UmVjb3JkLGlzTmF0LG5hdFNhZmVNYXRoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbmF0XCIsIFtbXCJpc05hdFwiLCBbJGjNj19hID0+IChpc05hdCA9ICRozY9fYSldXV1dLFtcIi4vc2FmZU1hdGguanNcIiwgW1tcIm5hdFNhZmVNYXRoXCIsIFskaM2PX2EgPT4gKG5hdFNhZmVNYXRoID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuY29uc3R7bXVsdGlwbHksZmxvb3JEaXZpZGUsY2VpbERpdmlkZSxiYW5rZXJzRGl2aWRlLGFkZCxzdWJ0cmFjdH09XG5uYXRTYWZlTWF0aDtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBQRVJDRU5UPTEwMG47XG5cbmNvbnN0IHJhdGlvUHJvcGVydHlOYW1lcz1bJ251bWVyYXRvcicsJ2Rlbm9taW5hdG9yJ107XG5cbmNvbnN0ICAgICAgICBhc3NlcnRJc1JhdGlvPShyYXRpbyk9PntcbmFzc2VydFJlY29yZChyYXRpbywncmF0aW8nKTtcbmNvbnN0IGtleXM9T2JqZWN0LmtleXMocmF0aW8pO1xua2V5cy5sZW5ndGg9PT0yfHxGYWlsIGBSYXRpbyAke3JhdGlvfSBtdXN0IGJlIGEgcmVjb3JkIHdpdGggMiBmaWVsZHMuYDtcbmZvcihjb25zdCBuYW1lIG9mIGtleXMpe1xucmF0aW9Qcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKG5hbWUpfHxcbkZhaWwgYFBhcmFtZXRlciBtdXN0IGJlIGEgUmF0aW8gcmVjb3JkLCBidXQgJHtyYXRpb30gaGFzICR7cShuYW1lKX1gO1xuIH1cbmNvbnN0IG51bWVyYXRvclZhbHVlPXJhdGlvLm51bWVyYXRvci52YWx1ZTtcbmNvbnN0IGRlbm9taW5hdG9yVmFsdWU9cmF0aW8uZGVub21pbmF0b3IudmFsdWU7XG5pc05hdChudW1lcmF0b3JWYWx1ZSl8fFxuRmFpbCBgVGhlIG51bWVyYXRvciB2YWx1ZSBtdXN0IGJlIGEgTmF0VmFsdWUsIG5vdCAke251bWVyYXRvclZhbHVlfWA7XG5pc05hdChkZW5vbWluYXRvclZhbHVlKXx8XG5GYWlsIGBUaGUgZGVub21pbmF0b3IgdmFsdWUgbXVzdCBiZSBhIE5hdFZhbHVlLCBub3QgJHtkZW5vbWluYXRvclZhbHVlfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0SXNSYXRpbyhhc3NlcnRJc1JhdGlvKTtcbmNvbnN0ICAgICAgICBtYWtlUmF0aW89KFxubnVtZXJhdG9yLFxubnVtZXJhdG9yQnJhbmQsXG5kZW5vbWluYXRvcj1QRVJDRU5ULFxuZGVub21pbmF0b3JCcmFuZD1udW1lcmF0b3JCcmFuZCk9Plxue1xuZGVub21pbmF0b3I+MG58fFxuRmFpbCBgTm8gaW5maW5pdGUgcmF0aW9zISBEZW5vbWluYXRvciB3YXMgMCAke3EoZGVub21pbmF0b3JCcmFuZCl9YDtcblxucmV0dXJuIGhhcmRlbih7XG5udW1lcmF0b3I6QW1vdW50TWF0aC5tYWtlKG51bWVyYXRvckJyYW5kLG51bWVyYXRvciksXG5kZW5vbWluYXRvcjpBbW91bnRNYXRoLm1ha2UoZGVub21pbmF0b3JCcmFuZCxkZW5vbWluYXRvcil9KTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVJhdGlvKG1ha2VSYXRpbyk7XG5jb25zdCAgICAgICAgbWFrZVJhdGlvRnJvbUFtb3VudHM9KG51bWVyYXRvckFtb3VudCxkZW5vbWluYXRvckFtb3VudCk9PntcbkFtb3VudE1hdGguY29lcmNlKG51bWVyYXRvckFtb3VudC5icmFuZCxudW1lcmF0b3JBbW91bnQpO1xuQW1vdW50TWF0aC5jb2VyY2UoZGVub21pbmF0b3JBbW91bnQuYnJhbmQsZGVub21pbmF0b3JBbW91bnQpO1xucmV0dXJuIG1ha2VSYXRpbyhcbi8vXG5udW1lcmF0b3JBbW91bnQudmFsdWUsXG5udW1lcmF0b3JBbW91bnQuYnJhbmQsXG5kZW5vbWluYXRvckFtb3VudC52YWx1ZSxcbmRlbm9taW5hdG9yQW1vdW50LmJyYW5kKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlUmF0aW9Gcm9tQW1vdW50cyhtYWtlUmF0aW9Gcm9tQW1vdW50cyk7XG5jb25zdCBtdWx0aXBseUhlbHBlcj0oYW1vdW50LHJhdGlvLGRpdmlkZU9wKT0+e1xuQW1vdW50TWF0aC5jb2VyY2UoYW1vdW50LmJyYW5kLGFtb3VudCk7XG5hc3NlcnRJc1JhdGlvKHJhdGlvKTtcbmFtb3VudC5icmFuZD09PXJhdGlvLmRlbm9taW5hdG9yLmJyYW5kfHxcbkZhaWwgYGFtb3VudCdzIGJyYW5kICR7cShhbW91bnQuYnJhbmQpfSBtdXN0IG1hdGNoIHJhdGlvJ3MgZGVub21pbmF0b3IgJHtxKFxucmF0aW8uZGVub21pbmF0b3IuYnJhbmQpXG4gfWA7XG5cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuQW1vdW50TWF0aC5tYWtlKFxucmF0aW8ubnVtZXJhdG9yLmJyYW5kLFxuZGl2aWRlT3AoXG5tdWx0aXBseShhbW91bnQudmFsdWUscmF0aW8ubnVtZXJhdG9yLnZhbHVlKSxcbnJhdGlvLmRlbm9taW5hdG9yLnZhbHVlKSkpO1xuXG5cblxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgZmxvb3JNdWx0aXBseUJ5PShhbW91bnQscmF0aW8pPT57XG5yZXR1cm4gbXVsdGlwbHlIZWxwZXIoYW1vdW50LHJhdGlvLGZsb29yRGl2aWRlKTtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5mbG9vck11bHRpcGx5QnkoZmxvb3JNdWx0aXBseUJ5KTtcbmNvbnN0ICAgICAgICBjZWlsTXVsdGlwbHlCeT0oYW1vdW50LHJhdGlvKT0+e1xucmV0dXJuIG11bHRpcGx5SGVscGVyKGFtb3VudCxyYXRpbyxjZWlsRGl2aWRlKTtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5jZWlsTXVsdGlwbHlCeShjZWlsTXVsdGlwbHlCeSk7XG5jb25zdCAgICAgICAgbXVsdGlwbHlCeT0oYW1vdW50LHJhdGlvKT0+e1xucmV0dXJuIG11bHRpcGx5SGVscGVyKGFtb3VudCxyYXRpbyxiYW5rZXJzRGl2aWRlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UubXVsdGlwbHlCeShtdWx0aXBseUJ5KTtcbmNvbnN0IGRpdmlkZUhlbHBlcj0oYW1vdW50LHJhdGlvLGRpdmlkZU9wKT0+e1xuQW1vdW50TWF0aC5jb2VyY2UoYW1vdW50LmJyYW5kLGFtb3VudCk7XG5hc3NlcnRJc1JhdGlvKHJhdGlvKTtcbmFtb3VudC5icmFuZD09PXJhdGlvLm51bWVyYXRvci5icmFuZHx8XG5GYWlsIGBhbW91bnQncyBicmFuZCAke3EoYW1vdW50LmJyYW5kKX0gbXVzdCBtYXRjaCByYXRpbydzIG51bWVyYXRvciAke3EoXG5yYXRpby5udW1lcmF0b3IuYnJhbmQpXG4gfWA7XG5cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuQW1vdW50TWF0aC5tYWtlKFxucmF0aW8uZGVub21pbmF0b3IuYnJhbmQsXG5kaXZpZGVPcChcbm11bHRpcGx5KGFtb3VudC52YWx1ZSxyYXRpby5kZW5vbWluYXRvci52YWx1ZSksXG5yYXRpby5udW1lcmF0b3IudmFsdWUpKSk7XG5cblxuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBmbG9vckRpdmlkZUJ5PShhbW91bnQscmF0aW8pPT57XG5yZXR1cm4gZGl2aWRlSGVscGVyKGFtb3VudCxyYXRpbyxmbG9vckRpdmlkZSk7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuZmxvb3JEaXZpZGVCeShmbG9vckRpdmlkZUJ5KTtcbmNvbnN0ICAgICAgICBjZWlsRGl2aWRlQnk9KGFtb3VudCxyYXRpbyk9PntcbnJldHVybiBkaXZpZGVIZWxwZXIoYW1vdW50LHJhdGlvLGNlaWxEaXZpZGUpO1xuIH07XG5cbi8qXG5cblxuICovJGjNj19vbmNlLmNlaWxEaXZpZGVCeShjZWlsRGl2aWRlQnkpO1xuY29uc3QgICAgICAgIGRpdmlkZUJ5PShhbW91bnQscmF0aW8pPT57XG5yZXR1cm4gZGl2aWRlSGVscGVyKGFtb3VudCxyYXRpbyxiYW5rZXJzRGl2aWRlKTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5kaXZpZGVCeShkaXZpZGVCeSk7XG5jb25zdCAgICAgICAgaW52ZXJ0UmF0aW89KHJhdGlvKT0+e1xuYXNzZXJ0SXNSYXRpbyhyYXRpbyk7XG5cbnJldHVybiBtYWtlUmF0aW8oXG4vKiAgICAgICAgICAgICAgICAgICAqL3JhdGlvLmRlbm9taW5hdG9yLnZhbHVlLFxucmF0aW8uZGVub21pbmF0b3IuYnJhbmQsXG4vKiAgICAgICAgICAgICAgICAgICAqL3JhdGlvLm51bWVyYXRvci52YWx1ZSxcbnJhdGlvLm51bWVyYXRvci5icmFuZCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmludmVydFJhdGlvKGludmVydFJhdGlvKTtcbmNvbnN0ICAgICAgICBhZGRSYXRpb3M9KGxlZnQscmlnaHQpPT57XG5hc3NlcnRJc1JhdGlvKHJpZ2h0KTtcbmFzc2VydElzUmF0aW8obGVmdCk7XG5sZWZ0Lm51bWVyYXRvci5icmFuZD09PXJpZ2h0Lm51bWVyYXRvci5icmFuZHx8XG5GYWlsIGBudW1lcmF0b3IgYnJhbmRzIG11c3QgbWF0Y2g6ICR7cShsZWZ0KX0gJHtxKHJpZ2h0KX1gO1xubGVmdC5kZW5vbWluYXRvci5icmFuZD09PXJpZ2h0LmRlbm9taW5hdG9yLmJyYW5kfHxcbkZhaWwgYGRlbm9taW5hdG9yIGJyYW5kcyBtdXN0IG1hdGNoOiAke3EobGVmdCl9ICR7cShyaWdodCl9YDtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gbWFrZVJhdGlvKFxuYWRkKFxubXVsdGlwbHkobGVmdC5udW1lcmF0b3IudmFsdWUscmlnaHQuZGVub21pbmF0b3IudmFsdWUpLC8vXG5tdWx0aXBseShsZWZ0LmRlbm9taW5hdG9yLnZhbHVlLHJpZ2h0Lm51bWVyYXRvci52YWx1ZSkvL1xuKSwvL1xubGVmdC5udW1lcmF0b3IuYnJhbmQsXG5tdWx0aXBseShsZWZ0LmRlbm9taW5hdG9yLnZhbHVlLHJpZ2h0LmRlbm9taW5hdG9yLnZhbHVlKSwvL1xubGVmdC5kZW5vbWluYXRvci5icmFuZCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmFkZFJhdGlvcyhhZGRSYXRpb3MpO1xuY29uc3QgICAgICAgIHN1YnRyYWN0UmF0aW9zPShsZWZ0LHJpZ2h0KT0+e1xuYXNzZXJ0SXNSYXRpbyhyaWdodCk7XG5hc3NlcnRJc1JhdGlvKGxlZnQpO1xubGVmdC5udW1lcmF0b3IuYnJhbmQ9PT1yaWdodC5udW1lcmF0b3IuYnJhbmR8fFxuRmFpbCBgbnVtZXJhdG9yIGJyYW5kcyBtdXN0IG1hdGNoOiAke3EobGVmdCl9ICR7cShyaWdodCl9YDtcbmxlZnQuZGVub21pbmF0b3IuYnJhbmQ9PT1yaWdodC5kZW5vbWluYXRvci5icmFuZHx8XG5GYWlsIGBkZW5vbWluYXRvciBicmFuZHMgbXVzdCBtYXRjaDogJHtxKGxlZnQpfSAke3EocmlnaHQpfWA7XG5cbnJldHVybiBtYWtlUmF0aW8oXG5zdWJ0cmFjdChcbm11bHRpcGx5KGxlZnQubnVtZXJhdG9yLnZhbHVlLHJpZ2h0LmRlbm9taW5hdG9yLnZhbHVlKSwvL1xubXVsdGlwbHkobGVmdC5kZW5vbWluYXRvci52YWx1ZSxyaWdodC5udW1lcmF0b3IudmFsdWUpLy9cbiksLy9cbmxlZnQubnVtZXJhdG9yLmJyYW5kLFxubXVsdGlwbHkobGVmdC5kZW5vbWluYXRvci52YWx1ZSxyaWdodC5kZW5vbWluYXRvci52YWx1ZSksLy9cbmxlZnQuZGVub21pbmF0b3IuYnJhbmQpO1xuXG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5zdWJ0cmFjdFJhdGlvcyhzdWJ0cmFjdFJhdGlvcyk7XG5jb25zdCAgICAgICAgbXVsdGlwbHlSYXRpb3M9KGxlZnQscmlnaHQpPT57XG5hc3NlcnRJc1JhdGlvKHJpZ2h0KTtcbmFzc2VydElzUmF0aW8obGVmdCk7XG5cbmNvbnN0IGdldFJlbWFpbmluZ0JyYW5kcz0oKT0+e1xuLy9cbmlmKHJpZ2h0Lm51bWVyYXRvci5icmFuZD09PXJpZ2h0LmRlbm9taW5hdG9yLmJyYW5kKXtcbnJldHVybltsZWZ0Lm51bWVyYXRvci5icmFuZCxsZWZ0LmRlbm9taW5hdG9yLmJyYW5kXTtcbiB9XG5pZihyaWdodC5udW1lcmF0b3IuYnJhbmQ9PT1sZWZ0LmRlbm9taW5hdG9yLmJyYW5kKXtcbnJldHVybltsZWZ0Lm51bWVyYXRvci5icmFuZCxyaWdodC5kZW5vbWluYXRvci5icmFuZF07XG4gfVxuaWYobGVmdC5udW1lcmF0b3IuYnJhbmQ9PT1yaWdodC5kZW5vbWluYXRvci5icmFuZCl7XG5yZXR1cm5bcmlnaHQubnVtZXJhdG9yLmJyYW5kLGxlZnQuZGVub21pbmF0b3IuYnJhbmRdO1xuIH1cbmlmKGxlZnQubnVtZXJhdG9yLmJyYW5kPT09bGVmdC5kZW5vbWluYXRvci5icmFuZCl7XG5yZXR1cm5bcmlnaHQubnVtZXJhdG9yLmJyYW5kLHJpZ2h0LmRlbm9taW5hdG9yLmJyYW5kXTtcbiB9XG50aHJvdyBGYWlsIGBhdCBsZWFzdCBvbmUgYnJhbmQgbXVzdCBjYW5jZWwgb3V0OiAke3EobGVmdCl9ICR7cShyaWdodCl9YDtcbiB9O1xuXG5jb25zdFtudW1lcmF0b3JCcmFuZCxkZW5vbWluYXRvckJyYW5kXT1nZXRSZW1haW5pbmdCcmFuZHMoKTtcbnJldHVybiBtYWtlUmF0aW8oXG5tdWx0aXBseShsZWZ0Lm51bWVyYXRvci52YWx1ZSxyaWdodC5udW1lcmF0b3IudmFsdWUpLFxubnVtZXJhdG9yQnJhbmQsXG5tdWx0aXBseShsZWZ0LmRlbm9taW5hdG9yLnZhbHVlLHJpZ2h0LmRlbm9taW5hdG9yLnZhbHVlKSxcbmRlbm9taW5hdG9yQnJhbmQpO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLm11bHRpcGx5UmF0aW9zKG11bHRpcGx5UmF0aW9zKTtcbmNvbnN0ICAgICAgICBvbmVNaW51cz0ocmF0aW8pPT57XG5hc3NlcnRJc1JhdGlvKHJhdGlvKTtcbnJhdGlvLm51bWVyYXRvci5icmFuZD09PXJhdGlvLmRlbm9taW5hdG9yLmJyYW5kfHxcbkZhaWwgYG9uZU1pbnVzIG9ubHkgc3VwcG9ydHMgcmF0aW9zIHdpdGggYSBzaW5nbGUgYnJhbmQsIGJ1dCAke3JhdGlvLm51bWVyYXRvci5icmFuZH0gZG9lc24ndCBtYXRjaCAke3JhdGlvLmRlbm9taW5hdG9yLmJyYW5kfWA7XG5yYXRpby5udW1lcmF0b3IudmFsdWU8PXJhdGlvLmRlbm9taW5hdG9yLnZhbHVlfHxcbkZhaWwgYFBhcmFtZXRlciBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxOiAke3JhdGlvLm51bWVyYXRvci52YWx1ZX0vJHtyYXRpby5kZW5vbWluYXRvci52YWx1ZX1gO1xucmV0dXJuIG1ha2VSYXRpbyhcbnN1YnRyYWN0KHJhdGlvLmRlbm9taW5hdG9yLnZhbHVlLHJhdGlvLm51bWVyYXRvci52YWx1ZSksXG5yYXRpby5udW1lcmF0b3IuYnJhbmQsXG5yYXRpby5kZW5vbWluYXRvci52YWx1ZSxcbnJhdGlvLm51bWVyYXRvci5icmFuZCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLm9uZU1pbnVzKG9uZU1pbnVzKTtcbmNvbnN0ICAgICAgICByYXRpb0dURT0obGVmdCxyaWdodCk9PntcbmlmKGxlZnQubnVtZXJhdG9yLmJyYW5kPT09cmlnaHQubnVtZXJhdG9yLmJyYW5kKXtcbmxlZnQuZGVub21pbmF0b3IuYnJhbmQ9PT1yaWdodC5kZW5vbWluYXRvci5icmFuZHx8XG5GYWlsIGBudW1lcmF0b3IgYnJhbmRzIG1hdGNoLCBidXQgZGVub21pbmF0b3IgYnJhbmRzIGRvbid0OiAke3EobGVmdCl9ICR7cShcbnJpZ2h0KVxuIH1gO1xuIH1lbHNlIGlmKGxlZnQubnVtZXJhdG9yLmJyYW5kPT09bGVmdC5kZW5vbWluYXRvci5icmFuZCl7XG5yaWdodC5udW1lcmF0b3IuYnJhbmQ9PT1yaWdodC5kZW5vbWluYXRvci5icmFuZHx8XG5GYWlsIGBsZWZ0aGFuZCBicmFuZHMgbWF0Y2gsIGJ1dCByaWdodGhhbmQgYnJhbmRzIGRvbid0OiAke3EobGVmdCl9ICR7cShcbnJpZ2h0KVxuIH1gO1xuIH1cbnJldHVybiBuYXRTYWZlTWF0aC5pc0dURShcbm11bHRpcGx5KGxlZnQubnVtZXJhdG9yLnZhbHVlLHJpZ2h0LmRlbm9taW5hdG9yLnZhbHVlKSxcbm11bHRpcGx5KHJpZ2h0Lm51bWVyYXRvci52YWx1ZSxsZWZ0LmRlbm9taW5hdG9yLnZhbHVlKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5yYXRpb0dURShyYXRpb0dURSk7XG5jb25zdCAgICAgICAgcmF0aW9zU2FtZT0obGVmdCxyaWdodCk9PntcbnJldHVybihcbkFtb3VudE1hdGguaXNFcXVhbChsZWZ0Lm51bWVyYXRvcixyaWdodC5udW1lcmF0b3IpJiZcbkFtb3VudE1hdGguaXNFcXVhbChsZWZ0LmRlbm9taW5hdG9yLHJpZ2h0LmRlbm9taW5hdG9yKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLnJhdGlvc1NhbWUocmF0aW9zU2FtZSk7XG5jb25zdCAgICAgICAgcXVhbnRpemU9KHJhdGlvLG5ld0Rlbik9PntcbmNvbnN0IG9sZERlbj1yYXRpby5kZW5vbWluYXRvci52YWx1ZTtcbmNvbnN0IG9sZE51bT1yYXRpby5udW1lcmF0b3IudmFsdWU7XG5pZihuZXdEZW4+b2xkRGVuKXtcbnJldHVybiByYXRpbztcbiB9XG5cbmNvbnN0IG5ld051bT1cbm5ld0Rlbj09PW9sZERlbj9vbGROdW06YmFua2Vyc0RpdmlkZShvbGROdW0qbmV3RGVuLG9sZERlbik7XG5yZXR1cm4gbWFrZVJhdGlvKFxubmV3TnVtLFxucmF0aW8ubnVtZXJhdG9yLmJyYW5kLFxubmV3RGVuLFxucmF0aW8uZGVub21pbmF0b3IuYnJhbmQpO1xuXG4gfTskaM2PX29uY2UucXVhbnRpemUocXVhbnRpemUpO1xuXG5jb25zdCBOVU1FUklDX1JFPS9eKFxcZFxcZCopKD86XFwuKFxcZCopKT8kLztcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFyc2VSYXRpbz0oXG5udW1lcmljLFxubnVtZXJhdG9yQnJhbmQsXG5kZW5vbWluYXRvckJyYW5kPW51bWVyYXRvckJyYW5kKT0+XG57XG5jb25zdCBtYXRjaD0gYCR7bnVtZXJpY31gLm1hdGNoKE5VTUVSSUNfUkUpO1xuaWYoIW1hdGNoKXtcbnRocm93IEZhaWwgYEludmFsaWQgbnVtZXJpYyBkYXRhOiAke251bWVyaWN9YDtcbiB9XG5cbmNvbnN0W18sd2hvbGUscGFydD0nJ109bWF0Y2g7XG5yZXR1cm4gbWFrZVJhdGlvKFxuQmlnSW50KCBgJHt3aG9sZX0ke3BhcnR9YCksXG5udW1lcmF0b3JCcmFuZCxcbjEwbioqQmlnSW50KHBhcnQubGVuZ3RoKSxcbmRlbm9taW5hdG9yQnJhbmQpO1xuXG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UucGFyc2VSYXRpbyhwYXJzZVJhdGlvKTtcbmNvbnN0ICAgICAgICBhc3NlcnRQYXJzYWJsZU51bWJlcj0oc3BlY2ltZW4pPT57XG5jb25zdCBtYXRjaD0gYCR7c3BlY2ltZW59YC5tYXRjaChOVU1FUklDX1JFKTtcbm1hdGNofHxGYWlsIGBJbnZhbGlkIG51bWVyaWMgZGF0YTogJHtzcGVjaW1lbn1gO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5hc3NlcnRQYXJzYWJsZU51bWJlcihhc3NlcnRQYXJzYWJsZU51bWJlcik7XG5jb25zdCAgICAgICAgcmF0aW9Ub051bWJlcj0ocmF0aW8pPT57XG5jb25zdCBuPU51bWJlcihyYXRpby5udW1lcmF0b3IudmFsdWUpO1xuY29uc3QgZD1OdW1iZXIocmF0aW8uZGVub21pbmF0b3IudmFsdWUpO1xucmV0dXJuIG4vZDtcbiB9OyRozY9fb25jZS5yYXRpb1RvTnVtYmVyKHJhdGlvVG9OdW1iZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0SXNSYXRpbyI6WyJhc3NlcnRJc1JhdGlvIl0sIm1ha2VSYXRpbyI6WyJtYWtlUmF0aW8iXSwibWFrZVJhdGlvRnJvbUFtb3VudHMiOlsibWFrZVJhdGlvRnJvbUFtb3VudHMiXSwiZmxvb3JNdWx0aXBseUJ5IjpbImZsb29yTXVsdGlwbHlCeSJdLCJjZWlsTXVsdGlwbHlCeSI6WyJjZWlsTXVsdGlwbHlCeSJdLCJtdWx0aXBseUJ5IjpbIm11bHRpcGx5QnkiXSwiZmxvb3JEaXZpZGVCeSI6WyJmbG9vckRpdmlkZUJ5Il0sImNlaWxEaXZpZGVCeSI6WyJjZWlsRGl2aWRlQnkiXSwiZGl2aWRlQnkiOlsiZGl2aWRlQnkiXSwiaW52ZXJ0UmF0aW8iOlsiaW52ZXJ0UmF0aW8iXSwiYWRkUmF0aW9zIjpbImFkZFJhdGlvcyJdLCJzdWJ0cmFjdFJhdGlvcyI6WyJzdWJ0cmFjdFJhdGlvcyJdLCJtdWx0aXBseVJhdGlvcyI6WyJtdWx0aXBseVJhdGlvcyJdLCJvbmVNaW51cyI6WyJvbmVNaW51cyJdLCJyYXRpb0dURSI6WyJyYXRpb0dURSJdLCJyYXRpb3NTYW1lIjpbInJhdGlvc1NhbWUiXSwicXVhbnRpemUiOlsicXVhbnRpemUiXSwicGFyc2VSYXRpbyI6WyJwYXJzZVJhdGlvIl0sImFzc2VydFBhcnNhYmxlTnVtYmVyIjpbImFzc2VydFBhcnNhYmxlTnVtYmVyIl0sInJhdGlvVG9OdW1iZXIiOlsicmF0aW9Ub051bWJlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADJaiyDURgAAFEYAABJAAAAQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9ub3RpZmllciIsIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAZW5kby9ldmVudHVhbC1zZW5kIl0sImV4cG9ydHMiOlsiZGVmaW5lRVJlY29yZGVyS2l0IiwiZGVmaW5lUmVjb3JkZXJLaXQiLCJwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzIiwicHJlcGFyZVJlY29yZGVyIiwicHJlcGFyZVJlY29yZGVyS2l0IiwicHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsU3RvcmFnZU5vZGVTaGFwZSxwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQsbWFrZUZha2VNYXJzaGFsbGVyLG1ha2VGYWtlU3RvcmFnZSxtdXN0TWF0Y2gsTSxtYWtlU2NhbGFyQmlnTWFwU3RvcmUscHJlcGFyZUV4b0NsYXNzLEU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcIlN0b3JhZ2VOb2RlU2hhcGVcIiwgWyRozY9fYSA9PiAoU3RvcmFnZU5vZGVTaGFwZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qc1wiLCBbW1wibWFrZUZha2VNYXJzaGFsbGVyXCIsIFskaM2PX2EgPT4gKG1ha2VGYWtlTWFyc2hhbGxlciA9ICRozY9fYSldXSxbXCJtYWtlRmFrZVN0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZUZha2VTdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3MgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUmVjb3JkZXI9KGJhZ2dhZ2UsbWFyc2hhbGxlcik9PntcbmNvbnN0IG1ha2VSZWNvcmRlcj1wcmVwYXJlRXhvQ2xhc3MoXG5iYWdnYWdlLFxuJ1JlY29yZGVyJyxcbk0uaW50ZXJmYWNlKCdSZWNvcmRlcicse1xuZ2V0U3RvcmFnZU5vZGU6TS5jYWxsKCkucmV0dXJucyhTdG9yYWdlTm9kZVNoYXBlKSxcbmdldFN0b3JhZ2VQYXRoOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxud3JpdGU6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxud3JpdGVGaW5hbDpNLmNhbGwoTS5hbnkoKSkucmV0dXJucyhNLnByb21pc2UoKSl9KSxcblxuLypcblxuXG5cblxuICAgICAqL1xuKFxucHVibGlzaGVyLFxuc3RvcmFnZU5vZGUsXG52YWx1ZVNoYXBlPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovTS5hbnkoKSk9Plxue1xucmV0dXJue1xuY2xvc2VkOmZhbHNlLFxucHVibGlzaGVyLFxuc3RvcmFnZU5vZGUsXG5zdG9yYWdlUGF0aDovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi91bmRlZmluZWQsXG52YWx1ZVNoYXBlfTtcblxuIH0sXG57XG5nZXRTdG9yYWdlTm9kZSgpe1xucmV0dXJuIHRoaXMuc3RhdGUuc3RvcmFnZU5vZGU7XG4gfSxcbi8qXG5cblxuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGdldFN0b3JhZ2VQYXRoKCl7XG5jb25zdHtzdG9yYWdlUGF0aDpoZWxkUGF0aH09dGhpcy5zdGF0ZTtcbi8vXG5hd2FpdCBudWxsO1xuaWYoaGVsZFBhdGghPT11bmRlZmluZWQpe1xucmV0dXJuIGhlbGRQYXRoO1xuIH1cbmNvbnN0IHBhdGg9YXdhaXQgRSh0aGlzLnN0YXRlLnN0b3JhZ2VOb2RlKS5nZXRQYXRoKCk7XG50aGlzLnN0YXRlLnN0b3JhZ2VQYXRoPXBhdGg7XG5yZXR1cm4gcGF0aDtcbiB9LFxuLypcblxuXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyB3cml0ZSh2YWx1ZSl7XG5jb25zdHtjbG9zZWQscHVibGlzaGVyLHN0b3JhZ2VOb2RlLHZhbHVlU2hhcGV9PXRoaXMuc3RhdGU7XG4hY2xvc2VkfHxGYWlsIGBjYW5ub3Qgd3JpdGUgdG8gY2xvc2VkIHJlY29yZGVyYDtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlKTtcbmNvbnN0IGVuY29kZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbmF3YWl0IEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKHNlcmlhbGl6ZWQpO1xuXG4vL1xucmV0dXJuIHB1Ymxpc2hlci5wdWJsaXNoKHZhbHVlKTtcbiB9LFxuLypcblxuXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyB3cml0ZUZpbmFsKHZhbHVlKXtcbmNvbnN0e2Nsb3NlZCxwdWJsaXNoZXIsc3RvcmFnZU5vZGUsdmFsdWVTaGFwZX09dGhpcy5zdGF0ZTtcbiFjbG9zZWR8fEZhaWwgYGNhbm5vdCB3cml0ZSB0byBjbG9zZWQgcmVjb3JkZXJgO1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUpO1xuY29uc3QgZW5jb2RlZD1hd2FpdCBFKG1hcnNoYWxsZXIpLnRvQ2FwRGF0YSh2YWx1ZSk7XG5jb25zdCBzZXJpYWxpemVkPUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xuYXdhaXQgRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoc2VyaWFsaXplZCk7XG5cbi8vXG50aGlzLnN0YXRlLmNsb3NlZD10cnVlO1xucmV0dXJuIHB1Ymxpc2hlci5maW5pc2godmFsdWUpO1xuIH19KTtcblxuXG5cbnJldHVybiBtYWtlUmVjb3JkZXI7XG4gfTskaM2PX29uY2UucHJlcGFyZVJlY29yZGVyKHByZXBhcmVSZWNvcmRlcik7XG5oYXJkZW4ocHJlcGFyZVJlY29yZGVyKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmaW5lUmVjb3JkZXJLaXQ9KHttYWtlUmVjb3JkZXIsbWFrZUR1cmFibGVQdWJsaXNoS2l0fSk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlUmVjb3JkZXJLaXQ9KHN0b3JhZ2VOb2RlLHZhbHVlU2hhcGUpPT57XG5jb25zdHtzdWJzY3JpYmVyLHB1Ymxpc2hlcn09bWFrZUR1cmFibGVQdWJsaXNoS2l0KCk7XG5jb25zdCByZWNvcmRlcj1tYWtlUmVjb3JkZXIoXG5wdWJsaXNoZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuc3RvcmFnZU5vZGUsXG5cbnZhbHVlU2hhcGUpO1xuXG5yZXR1cm4gaGFyZGVuKHtzdWJzY3JpYmVyLHJlY29yZGVyfSk7XG4gfTtcbnJldHVybiBtYWtlUmVjb3JkZXJLaXQ7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVmaW5lUmVjb3JkZXJLaXQoZGVmaW5lUmVjb3JkZXJLaXQpO1xuY29uc3QgICAgICAgIGRlZmluZUVSZWNvcmRlcktpdD0oe21ha2VSZWNvcmRlcixtYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VFUmVjb3JkZXJLaXQ9KHN0b3JhZ2VOb2RlUCx2YWx1ZVNoYXBlKT0+e1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VEdXJhYmxlUHVibGlzaEtpdCgpO1xuY29uc3QgcmVjb3JkZXJQPUUud2hlbihzdG9yYWdlTm9kZVAsKHN0b3JhZ2VOb2RlKT0+XG5tYWtlUmVjb3JkZXIoXG5wdWJsaXNoZXIsXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zdG9yYWdlTm9kZSxcbnZhbHVlU2hhcGUpKTtcblxuXG5yZXR1cm57c3Vic2NyaWJlcixyZWNvcmRlclB9O1xuIH07XG5yZXR1cm4gbWFrZUVSZWNvcmRlcktpdDtcbiB9OyRozY9fb25jZS5kZWZpbmVFUmVjb3JkZXJLaXQoZGVmaW5lRVJlY29yZGVyS2l0KTtcbmhhcmRlbihkZWZpbmVFUmVjb3JkZXJLaXQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVSZWNvcmRlcktpdD0oYmFnZ2FnZSxtYXJzaGFsbGVyKT0+e1xuY29uc3QgbWFrZUR1cmFibGVQdWJsaXNoS2l0PXByZXBhcmVEdXJhYmxlUHVibGlzaEtpdChcbmJhZ2dhZ2UsXG4nRHVyYWJsZSBQdWJsaXNoIEtpdCcpO1xuXG5jb25zdCBtYWtlUmVjb3JkZXI9cHJlcGFyZVJlY29yZGVyKGJhZ2dhZ2UsbWFyc2hhbGxlcik7XG5yZXR1cm4gZGVmaW5lUmVjb3JkZXJLaXQoe21ha2VEdXJhYmxlUHVibGlzaEtpdCxtYWtlUmVjb3JkZXJ9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLnByZXBhcmVSZWNvcmRlcktpdChwcmVwYXJlUmVjb3JkZXJLaXQpO1xuY29uc3QgICAgICAgIHByZXBhcmVSZWNvcmRlcktpdE1ha2Vycz0oYmFnZ2FnZSxtYXJzaGFsbGVyKT0+e1xuY29uc3QgbWFrZUR1cmFibGVQdWJsaXNoS2l0PXByZXBhcmVEdXJhYmxlUHVibGlzaEtpdChcbmJhZ2dhZ2UsXG4nRHVyYWJsZSBQdWJsaXNoIEtpdCcpO1xuXG5jb25zdCBtYWtlUmVjb3JkZXI9cHJlcGFyZVJlY29yZGVyKGJhZ2dhZ2UsbWFyc2hhbGxlcik7XG5cbmNvbnN0IG1ha2VSZWNvcmRlcktpdD1kZWZpbmVSZWNvcmRlcktpdCh7XG5tYWtlUmVjb3JkZXIsXG5tYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KTtcblxuY29uc3QgbWFrZUVSZWNvcmRlcktpdD1kZWZpbmVFUmVjb3JkZXJLaXQoe1xubWFrZVJlY29yZGVyLFxubWFrZUR1cmFibGVQdWJsaXNoS2l0fSk7XG5cblxucmV0dXJue1xubWFrZUR1cmFibGVQdWJsaXNoS2l0LFxubWFrZVJlY29yZGVyLFxubWFrZVJlY29yZGVyS2l0LFxubWFrZUVSZWNvcmRlcktpdH07XG5cbiB9O1xuXG4vKlxuXG4gKi8kaM2PX29uY2UucHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzKHByZXBhcmVSZWNvcmRlcktpdE1ha2Vycyk7XG5jb25zdCAgICAgICAgcHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2Vycz0oKT0+e1xuY29uc3QgYmFnZ2FnZT1tYWtlU2NhbGFyQmlnTWFwU3RvcmUoJ21vY2sgcmVjb3JkZXIgYmFnZ2FnZScpO1xuY29uc3QgbWFyc2hhbGxlcj1tYWtlRmFrZU1hcnNoYWxsZXIoKTtcbnJldHVybntcbi4uLnByZXBhcmVSZWNvcmRlcktpdE1ha2VycyhiYWdnYWdlLG1hcnNoYWxsZXIpLFxuc3RvcmFnZU5vZGU6bWFrZUZha2VTdG9yYWdlKCdtb2NrIHJlY29yZGVyIHN0b3JhZ2UnKX07XG5cbiB9OyRozY9fb25jZS5wcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzKHByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVJlY29yZGVyIjpbInByZXBhcmVSZWNvcmRlciJdLCJkZWZpbmVSZWNvcmRlcktpdCI6WyJkZWZpbmVSZWNvcmRlcktpdCJdLCJkZWZpbmVFUmVjb3JkZXJLaXQiOlsiZGVmaW5lRVJlY29yZGVyS2l0Il0sInByZXBhcmVSZWNvcmRlcktpdCI6WyJwcmVwYXJlUmVjb3JkZXJLaXQiXSwicHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzIjpbInByZXBhcmVSZWNvcmRlcktpdE1ha2VycyJdLCJwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzIjpbInByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAw4lsH9kEAADZBAAASQAAAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdFN1cHBvcnQvc2FmZU1hdGguanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0Il0sImV4cG9ydHMiOlsibmF0U2FmZU1hdGgiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTmF0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG5hdFNhZmVNYXRoPWhhcmRlbih7XG4vKiAgICAgICAgICAgICAgICAqL1xuLy9cbmFkZDooeCx5KT0+TmF0KHgpK05hdCh5KSxcbi8qICAgICAgICAgICAgICAgICovXG5zdWJ0cmFjdDooeCx5KT0+TmF0KE5hdCh4KS1OYXQoeSkpLFxuLyogICAgICAgICAgICAgICAgKi9cbm11bHRpcGx5Oih4LHkpPT5OYXQoeCkqTmF0KHkpLFxuLyogICAgICAgICAgICAgICAgKi9cbmZsb29yRGl2aWRlOih4LHkpPT5OYXQoeCkvTmF0KHkpLFxuLyogICAgICAgICAgICAgICAgKi9cbmNlaWxEaXZpZGU6KHgseSk9Pntcbnk9TmF0KHkpO1xucmV0dXJuIE5hdChOYXQoeCkreS0xbikveTtcbiB9LFxuLypcblxuXG5cbiAgICovXG5iYW5rZXJzRGl2aWRlOihhLGIpPT57XG5hPU5hdChhKTtcbmI9TmF0KGIpO1xuXG5jb25zdCBkaXY9YS9iO1xuY29uc3QgcmVtPWElYjtcbi8vXG5pZihyZW0qMm4+Yil7XG5yZXR1cm4gZGl2KzFuO1xuIH1lbHNlIGlmKHJlbSoybj09PWIpe1xuLy9cbmlmKGRpdiUybj09PTFuKXJldHVybiBkaXYrMW47XG4gfVxucmV0dXJuIGRpdjtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5pc0dURTooeCx5KT0+TmF0KHgpPj1OYXQoeSl9KTskaM2PX29uY2UubmF0U2FmZU1hdGgobmF0U2FmZU1hdGgpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibmF0U2FmZU1hdGgiOlsibmF0U2FmZU1hdGgiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAk3P9gsYDAADGAwAATQAAAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdFN1cHBvcnQvc3RhdGVNYWNoaW5lLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VTdGF0ZU1hY2hpbmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cbiovXG5jb25zdCBtYWtlU3RhdGVNYWNoaW5lPShpbml0aWFsU3RhdGUsYWxsb3dlZFRyYW5zaXRpb25zQXJyYXkpPT57XG5sZXQgc3RhdGU9aW5pdGlhbFN0YXRlO1xuY29uc3QgYWxsb3dlZFRyYW5zaXRpb25zPW5ldyBNYXAoYWxsb3dlZFRyYW5zaXRpb25zQXJyYXkpO1xucmV0dXJuIGhhcmRlbih7XG5jYW5UcmFuc2l0aW9uVG86KG5leHRTdGF0ZSk9PlxuYWxsb3dlZFRyYW5zaXRpb25zLmdldChzdGF0ZSkuaW5jbHVkZXMobmV4dFN0YXRlKSxcbnRyYW5zaXRpb25UbzoobmV4dFN0YXRlKT0+e1xuYXNzZXJ0KGFsbG93ZWRUcmFuc2l0aW9ucy5nZXQoc3RhdGUpLmluY2x1ZGVzKG5leHRTdGF0ZSkpO1xuc3RhdGU9bmV4dFN0YXRlO1xuIH0sXG5nZXRTdGF0dXM6KF8pPT5zdGF0ZX0pO1xuXG4gfTskaM2PX29uY2UubWFrZVN0YXRlTWFjaGluZShtYWtlU3RhdGVNYWNoaW5lKTtcbmhhcmRlbihtYWtlU3RhdGVNYWNoaW5lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VTdGF0ZU1hY2hpbmUiOlsibWFrZVN0YXRlTWFjaGluZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAlHSVSkQMAAJEDAABLAAAAQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0U3VwcG9ydC9zdGF0aXN0aWNzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJjYWxjdWxhdGVNZWRpYW4iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjYWxjdWxhdGVNZWRpYW49KHNhbXBsZXMsbWF0aCk9PntcbmNvbnN0IHNvcnRlZD1zYW1wbGVzLnNvcnQoKGEsYik9PntcbmlmKCFtYXRoLmlzR1RFKGEsYikpe1xucmV0dXJuLTE7XG4gfWVsc2UgaWYoIW1hdGguaXNHVEUoYixhKSl7XG5yZXR1cm4gMTtcbiB9XG5yZXR1cm4gMDtcbiB9KTtcblxuaWYoc29ydGVkLmxlbmd0aD09PTApe1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG5pZihzb3J0ZWQubGVuZ3RoJTIhPT0wKXtcbi8vXG5yZXR1cm4gc29ydGVkWyhzb3J0ZWQubGVuZ3RoLTEpLzJdO1xuIH1cblxuLy9cbmNvbnN0IHNlY29uZEluZGV4PXNvcnRlZC5sZW5ndGgvMjtcbmNvbnN0IHN1bT1tYXRoLmFkZChzb3J0ZWRbc2Vjb25kSW5kZXgtMV0sc29ydGVkW3NlY29uZEluZGV4XSk7XG5yZXR1cm4gbWF0aC5kaXZpZGUoc3VtLDJuKTtcbiB9OyRozY9fb25jZS5jYWxjdWxhdGVNZWRpYW4oY2FsY3VsYXRlTWVkaWFuKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImNhbGN1bGF0ZU1lZGlhbiI6WyJjYWxjdWxhdGVNZWRpYW4iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAq/Evnk0GAABNBgAARwAAAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdFN1cHBvcnQvdG9waWNzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvbm90aWZpZXIiLCJAYWdvcmljL3N0b3JlIiwiQGVuZG8vZmFyIl0sImV4cG9ydHMiOlsiUHVibGljVG9waWNTaGFwZSIsIlN1YnNjcmliZXJTaGFwZSIsIlRvcGljc1JlY29yZFNoYXBlIiwibWFrZVJlY29yZGVyVG9waWMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgU3Vic2NyaWJlclNoYXBlLE0sRTskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIlN1YnNjcmliZXJTaGFwZVwiLCBbJGjNj19hID0+IChTdWJzY3JpYmVyU2hhcGUgPSAkaM2PX2EpLCRozY9fbGl2ZVtcIlN1YnNjcmliZXJTaGFwZVwiXV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuY29uc3QgICAgICAgIFB1YmxpY1RvcGljU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbnN1YnNjcmliZXI6U3Vic2NyaWJlclNoYXBlLFxuc3RvcmFnZVBhdGg6TS5vcihNLnByb21pc2UoKSxNLnN0cmluZygpKX0sXG5cbntkZXNjcmlwdGlvbjpNLnN0cmluZygpfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUHVibGljVG9waWNTaGFwZShQdWJsaWNUb3BpY1NoYXBlKTtcblxuY29uc3QgICAgICAgIFRvcGljc1JlY29yZFNoYXBlPU0ucmVjb3JkT2YoTS5zdHJpbmcoKSxQdWJsaWNUb3BpY1NoYXBlKTtcblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5Ub3BpY3NSZWNvcmRTaGFwZShUb3BpY3NSZWNvcmRTaGFwZSk7XG5jb25zdCAgICAgICAgbWFrZVJlY29yZGVyVG9waWM9KGRlc2NyaXB0aW9uLHJlY29yZGVyS2l0KT0+e1xuY29uc3QgcmVjUD1cbidyZWNvcmRlcidpbiByZWNvcmRlcktpdD9yZWNvcmRlcktpdC5yZWNvcmRlcjpyZWNvcmRlcktpdC5yZWNvcmRlclA7XG5yZXR1cm57XG5kZXNjcmlwdGlvbixcbnN1YnNjcmliZXI6cmVjb3JkZXJLaXQuc3Vic2NyaWJlcixcbnN0b3JhZ2VQYXRoOkUocmVjUCkuZ2V0U3RvcmFnZVBhdGgoKX07XG5cbiB9OyRozY9fb25jZS5tYWtlUmVjb3JkZXJUb3BpYyhtYWtlUmVjb3JkZXJUb3BpYyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6eyJTdWJzY3JpYmVyU2hhcGUiOlsiU3Vic2NyaWJlclNoYXBlIixmYWxzZV19LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHVibGljVG9waWNTaGFwZSI6WyJQdWJsaWNUb3BpY1NoYXBlIl0sIlRvcGljc1JlY29yZFNoYXBlIjpbIlRvcGljc1JlY29yZFNoYXBlIl0sIm1ha2VSZWNvcmRlclRvcGljIjpbIm1ha2VSZWNvcmRlclRvcGljIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALVu/60wIgAAMCIAAEsAAABAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L3pvZUhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvZXJ0cCIsIkBhZ29yaWMvaW50ZXJuYWwiLCIuLi9jb250cmFjdEZhY2V0L29mZmVyU2FmZXR5LmpzIiwiLi9hdG9taWNUcmFuc2Zlci5qcyJdLCJleHBvcnRzIjpbImFzc2VydElzc3VlcktleXdvcmRzIiwiYXNzZXJ0TmF0QXNzZXRLaW5kIiwiYXNzZXJ0UHJvcG9zYWxTaGFwZSIsImRlZmF1bHRBY2NlcHRhbmNlTXNnIiwiZGVwb3NpdFRvU2VhdCIsImRlcG9zaXRUb1NlYXRTdWNjZXNzTXNnIiwiZml0UHJvcG9zYWxTaGFwZSIsIm1hcEtleXdvcmRzIiwib2ZmZXJUbyIsInNhdGlzZmllcyIsInNhdmVBbGxJc3N1ZXJzIiwic3dhcCIsInN3YXBFeGFjdCIsIndpdGhkcmF3RnJvbVNlYXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxFLG1ha2VQcm9taXNlS2l0LG11c3RNYXRjaCxrZXlFUSxBc3NldEtpbmQsZnJvbVVuaXF1ZUVudHJpZXMsc2F0aXNmaWVzV2FudCxhdG9taWNUcmFuc2Zlcixmcm9tT25seSx0b09ubHk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFzc2V0S2luZFwiLCBbJGjNj19hID0+IChBc3NldEtpbmQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJmcm9tVW5pcXVlRW50cmllc1wiLCBbJGjNj19hID0+IChmcm9tVW5pcXVlRW50cmllcyA9ICRozY9fYSldXV1dLFtcIi4uL2NvbnRyYWN0RmFjZXQvb2ZmZXJTYWZldHkuanNcIiwgW1tcInNhdGlzZmllc1dhbnRcIiwgWyRozY9fYSA9PiAoc2F0aXNmaWVzV2FudCA9ICRozY9fYSldXV1dLFtcIi4vYXRvbWljVHJhbnNmZXIuanNcIiwgW1tcImF0b21pY1RyYW5zZmVyXCIsIFskaM2PX2EgPT4gKGF0b21pY1RyYW5zZmVyID0gJGjNj19hKV1dLFtcImZyb21Pbmx5XCIsIFskaM2PX2EgPT4gKGZyb21Pbmx5ID0gJGjNj19hKV1dLFtcInRvT25seVwiLCBbJGjNj19hID0+ICh0b09ubHkgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbmNvbnN0ICAgICAgICBkZWZhdWx0QWNjZXB0YW5jZU1zZz0gYFRoZSBvZmZlciBoYXMgYmVlbiBhY2NlcHRlZC4gT25jZSB0aGUgY29udHJhY3QgaGFzIGJlZW4gY29tcGxldGVkLCBwbGVhc2UgY2hlY2sgeW91ciBwYXlvdXRgOyRozY9fb25jZS5kZWZhdWx0QWNjZXB0YW5jZU1zZyhkZWZhdWx0QWNjZXB0YW5jZU1zZyk7XG5cbmNvbnN0IGdldEtleXNTb3J0ZWQ9KG9iaik9PmhhcmRlbihSZWZsZWN0Lm93bktleXMob2JqfHx7fSkuc29ydCgpKTtcblxuY29uc3QgICAgICAgIGFzc2VydElzc3VlcktleXdvcmRzPSh6Y2YsZXhwZWN0ZWQpPT57XG5jb25zdHtpc3N1ZXJzfT16Y2YuZ2V0VGVybXMoKTtcbmNvbnN0IGFjdHVhbD1nZXRLZXlzU29ydGVkKGlzc3VlcnMpO1xuZXhwZWN0ZWQ9Wy4uLmV4cGVjdGVkXTsvL1xuZXhwZWN0ZWQuc29ydCgpO1xua2V5RVEoYWN0dWFsLGhhcmRlbihleHBlY3RlZCkpfHxcbkZhaWwgYGtleXdvcmRzOiAke2FjdHVhbH0gd2VyZSBub3QgYXMgZXhwZWN0ZWQ6ICR7ZXhwZWN0ZWR9YDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hc3NlcnRJc3N1ZXJLZXl3b3Jkcyhhc3NlcnRJc3N1ZXJLZXl3b3Jkcyk7XG5jb25zdCAgICAgICAgc2F0aXNmaWVzPSh6Y2Ysc2VhdCx1cGRhdGUpPT57XG5jb25zdCBjdXJyZW50QWxsb2NhdGlvbj1zZWF0LmdldEN1cnJlbnRBbGxvY2F0aW9uKCk7XG5jb25zdCBuZXdBbGxvY2F0aW9uPXsuLi5jdXJyZW50QWxsb2NhdGlvbiwuLi51cGRhdGV9O1xuY29uc3QgcHJvcG9zYWw9c2VhdC5nZXRQcm9wb3NhbCgpO1xucmV0dXJuIHNhdGlzZmllc1dhbnQocHJvcG9zYWwsbmV3QWxsb2NhdGlvbik7XG4gfTtcblxuLyogICAgICAgICAgICAgICAqLyRozY9fb25jZS5zYXRpc2ZpZXMoc2F0aXNmaWVzKTtcbmNvbnN0ICAgICAgICBzd2FwPSh6Y2YsbGVmdFNlYXQscmlnaHRTZWF0KT0+e1xudHJ5e1xuemNmLmF0b21pY1JlYXJyYW5nZShcbmhhcmRlbihbXG5bcmlnaHRTZWF0LGxlZnRTZWF0LGxlZnRTZWF0LmdldFByb3Bvc2FsKCkud2FudF0sXG5bbGVmdFNlYXQscmlnaHRTZWF0LHJpZ2h0U2VhdC5nZXRQcm9wb3NhbCgpLndhbnRdXSkpO1xuXG5cbiB9Y2F0Y2goZXJyKXtcbmxlZnRTZWF0LmZhaWwoZXJyKTtcbnJpZ2h0U2VhdC5mYWlsKGVycik7XG50aHJvdyBlcnI7XG4gfVxuXG5sZWZ0U2VhdC5leGl0KCk7XG5yaWdodFNlYXQuZXhpdCgpO1xucmV0dXJuIGRlZmF1bHRBY2NlcHRhbmNlTXNnO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5zd2FwKHN3YXApO1xuY29uc3QgICAgICAgIHN3YXBFeGFjdD0oemNmLGxlZnRTZWF0LHJpZ2h0U2VhdCk9PntcbnRyeXtcbnpjZi5hdG9taWNSZWFycmFuZ2UoXG5oYXJkZW4oW1xuZnJvbU9ubHkocmlnaHRTZWF0LHJpZ2h0U2VhdC5nZXRQcm9wb3NhbCgpLmdpdmUpLFxuZnJvbU9ubHkobGVmdFNlYXQsbGVmdFNlYXQuZ2V0UHJvcG9zYWwoKS5naXZlKSxcblxudG9Pbmx5KGxlZnRTZWF0LGxlZnRTZWF0LmdldFByb3Bvc2FsKCkud2FudCksXG50b09ubHkocmlnaHRTZWF0LHJpZ2h0U2VhdC5nZXRQcm9wb3NhbCgpLndhbnQpXSkpO1xuXG5cbiB9Y2F0Y2goZXJyKXtcbmxlZnRTZWF0LmZhaWwoZXJyKTtcbnJpZ2h0U2VhdC5mYWlsKGVycik7XG50aHJvdyBlcnI7XG4gfVxuXG5sZWZ0U2VhdC5leGl0KCk7XG5yaWdodFNlYXQuZXhpdCgpO1xucmV0dXJuIGRlZmF1bHRBY2NlcHRhbmNlTXNnO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLnN3YXBFeGFjdChzd2FwRXhhY3QpO1xuY29uc3QgICAgICAgIGZpdFByb3Bvc2FsU2hhcGU9KHNlYXQscHJvcG9zYWxTaGFwZSk9PlxuLy9cbm11c3RNYXRjaChzZWF0LmdldFByb3Bvc2FsKCksaGFyZGVuKHByb3Bvc2FsU2hhcGUpLCdwcm9wb3NhbCcpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmZpdFByb3Bvc2FsU2hhcGUoZml0UHJvcG9zYWxTaGFwZSk7XG5jb25zdCAgICAgICAgYXNzZXJ0UHJvcG9zYWxTaGFwZT0oc2VhdCxleHBlY3RlZCk9PntcbmFzc2VydC50eXBlb2YoZXhwZWN0ZWQsJ29iamVjdCcpO1xuIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpfHxGYWlsIGBFeHBlY3RlZCBtdXN0IGJlIGFuIG5vbi1hcnJheSBvYmplY3RgO1xuY29uc3QgYXNzZXJ0VmFsdWVzTnVsbD0oZSk9PntcbmlmKGUhPT11bmRlZmluZWQpe1xuZm9yKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMoZSkpe1xudmFsdWU9PT1udWxsfHxcbkZhaWwgYFRoZSB2YWx1ZSBvZiB0aGUgZXhwZWN0ZWQgcmVjb3JkIG11c3QgYmUgbnVsbCBidXQgd2FzICR7dmFsdWV9YDtcbiB9XG4gfVxuIH07XG5cbi8vXG4vL1xuYXNzZXJ0VmFsdWVzTnVsbChleHBlY3RlZC5naXZlKTtcbmFzc2VydFZhbHVlc051bGwoZXhwZWN0ZWQud2FudCk7XG5hc3NlcnRWYWx1ZXNOdWxsKGV4cGVjdGVkLmV4aXQpO1xuXG5jb25zdCBhY3R1YWw9c2VhdC5nZXRQcm9wb3NhbCgpO1xuY29uc3QgYXNzZXJ0S2V5cz0oYSxlKT0+e1xuaWYoZSE9PXVuZGVmaW5lZCl7XG5rZXlFUShnZXRLZXlzU29ydGVkKGEpLGdldEtleXNTb3J0ZWQoZSkpfHxcbkZhaWwgYGFjdHVhbCAke2F9IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgJHtlfWA7XG4gfVxuIH07XG5hc3NlcnRLZXlzKGFjdHVhbC5naXZlLGV4cGVjdGVkLmdpdmUpO1xuYXNzZXJ0S2V5cyhhY3R1YWwud2FudCxleHBlY3RlZC53YW50KTtcbmFzc2VydEtleXMoYWN0dWFsLmV4aXQsZXhwZWN0ZWQuZXhpdCk7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYXNzZXJ0UHJvcG9zYWxTaGFwZShhc3NlcnRQcm9wb3NhbFNoYXBlKTtcbmNvbnN0ICAgICAgICBhc3NlcnROYXRBc3NldEtpbmQ9KHpjZixicmFuZCk9PntcbnpjZi5nZXRBc3NldEtpbmQoYnJhbmQpPT09QXNzZXRLaW5kLk5BVHx8XG5GYWlsIGBicmFuZCBtdXN0IGJlIEFzc2V0S2luZC5OQVRgO1xuIH07JGjNj19vbmNlLmFzc2VydE5hdEFzc2V0S2luZChhc3NlcnROYXRBc3NldEtpbmQpO1xuXG5jb25zdCAgICAgICAgZGVwb3NpdFRvU2VhdFN1Y2Nlc3NNc2c9IGBEZXBvc2l0IGFuZCByZWFsbG9jYXRpb24gc3VjY2Vzc2Z1bC5gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlcG9zaXRUb1NlYXRTdWNjZXNzTXNnKGRlcG9zaXRUb1NlYXRTdWNjZXNzTXNnKTtcbmNvbnN0ICAgICAgICBkZXBvc2l0VG9TZWF0PWFzeW5jKHpjZixyZWNpcGllbnRTZWF0LGFtb3VudHMscGF5bWVudHMpPT57XG4hcmVjaXBpZW50U2VhdC5oYXNFeGl0ZWQoKXx8RmFpbCBgVGhlIHJlY2lwaWVudFNlYXQgY2Fubm90IGhhdmUgZXhpdGVkLmA7XG5cbi8vXG4vL1xuY29uc3QgcmVhbGxvY2F0ZUFmdGVyRGVwb3NpdD0odGVtcFNlYXQpPT57XG4vL1xuLy9cbi8vXG4vL1xuYXRvbWljVHJhbnNmZXIoemNmLHRlbXBTZWF0LHJlY2lwaWVudFNlYXQsYW1vdW50cyk7XG50ZW1wU2VhdC5leGl0KCk7XG5yZXR1cm4gZGVwb3NpdFRvU2VhdFN1Y2Nlc3NNc2c7XG4gfTtcbmNvbnN0IGludml0YXRpb249emNmLm1ha2VJbnZpdGF0aW9uKFxucmVhbGxvY2F0ZUFmdGVyRGVwb3NpdCxcbid0ZW1wb3Jhcnkgc2VhdCBmb3IgZGVwb3NpdCcpO1xuXG5jb25zdCBwcm9wb3NhbD1oYXJkZW4oe2dpdmU6YW1vdW50c30pO1xuaGFyZGVuKHBheW1lbnRzKTtcbi8vXG4vL1xuY29uc3Qgem9lPXpjZi5nZXRab2VTZXJ2aWNlKCk7XG5jb25zdCB0ZW1wVXNlclNlYXQ9RSh6b2UpLm9mZmVyKGludml0YXRpb24scHJvcG9zYWwscGF5bWVudHMpO1xuLy9cbi8vXG4vL1xucmV0dXJuIEUodGVtcFVzZXJTZWF0KS5nZXRPZmZlclJlc3VsdCgpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlcG9zaXRUb1NlYXQoZGVwb3NpdFRvU2VhdCk7XG5jb25zdCAgICAgICAgd2l0aGRyYXdGcm9tU2VhdD1hc3luYyh6Y2Ysc2VhdCxhbW91bnRzKT0+e1xuIXNlYXQuaGFzRXhpdGVkKCl8fEZhaWwgYFRoZSBzZWF0IGNhbm5vdCBoYXZlIGV4aXRlZC5gO1xuY29uc3R7emNmU2VhdDp0ZW1wU2VhdCx1c2VyU2VhdDp0ZW1wVXNlclNlYXRQfT16Y2YubWFrZUVtcHR5U2VhdEtpdCgpO1xuYXRvbWljVHJhbnNmZXIoemNmLHNlYXQsdGVtcFNlYXQsYW1vdW50cyk7XG50ZW1wU2VhdC5leGl0KCk7XG5yZXR1cm4gRSh0ZW1wVXNlclNlYXRQKS5nZXRQYXlvdXRzKCk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLndpdGhkcmF3RnJvbVNlYXQod2l0aGRyYXdGcm9tU2VhdCk7XG5jb25zdCAgICAgICAgc2F2ZUFsbElzc3VlcnM9YXN5bmMoemNmLGlzc3VlcktleXdvcmRSZWNvcmQ9aGFyZGVuKHt9KSk9PntcbmNvbnN0e2lzc3VlcnN9PXpjZi5nZXRUZXJtcygpO1xuY29uc3QgaXNzdWVyc1BTYXZlZD1PYmplY3QuZW50cmllcyhpc3N1ZXJLZXl3b3JkUmVjb3JkKS5tYXAoXG4oW2tleXdvcmQsaXNzdWVyXSk9Pntcbi8vXG4vL1xuaWYoaXNzdWVyc1trZXl3b3JkXT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gemNmLnNhdmVJc3N1ZXIoaXNzdWVyLGtleXdvcmQpO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfSk7XG5cbnJldHVybiBQcm9taXNlLmFsbChpc3N1ZXJzUFNhdmVkKTtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5zYXZlQWxsSXNzdWVycyhzYXZlQWxsSXNzdWVycyk7XG5jb25zdCAgICAgICAgbWFwS2V5d29yZHM9KGtleXdvcmRSZWNvcmQ9e30sa2V5d29yZE1hcHBpbmcpPT57XG5yZXR1cm4gaGFyZGVuKFxuZnJvbVVuaXF1ZUVudHJpZXMoXG5PYmplY3QuZW50cmllcyhrZXl3b3JkUmVjb3JkKS5tYXAoKFtrZXl3b3JkLHZhbHVlXSk9PntcbmlmKGtleXdvcmRNYXBwaW5nW2tleXdvcmRdPT09dW5kZWZpbmVkKXtcbnJldHVybltrZXl3b3JkLHZhbHVlXTtcbiB9XG5yZXR1cm5ba2V5d29yZE1hcHBpbmdba2V5d29yZF0sdmFsdWVdO1xuIH0pKSk7XG5cblxuIH07XG4vKiAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLm1hcEtleXdvcmRzKG1hcEtleXdvcmRzKTtcbmNvbnN0IHJldmVyc2U9KGtleXdvcmRSZWNvcmQ9e30pPT57XG5yZXR1cm4gaGFyZGVuKFxuZnJvbVVuaXF1ZUVudHJpZXMoXG5PYmplY3QuZW50cmllcyhrZXl3b3JkUmVjb3JkKS5tYXAoKFtrZXksdmFsdWVdKT0+W3ZhbHVlLGtleV0pKSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9mZmVyVG89YXN5bmMoXG56Y2YsXG5pbnZpdGF0aW9uLFxua2V5d29yZE1hcHBpbmcsXG5wcm9wb3NhbCxcbmZyb21TZWF0LFxudG9TZWF0LFxub2ZmZXJBcmdzKT0+XG57XG5pZihrZXl3b3JkTWFwcGluZz09PXVuZGVmaW5lZCl7XG5rZXl3b3JkTWFwcGluZz1oYXJkZW4oe30pO1xuIH1cblxuY29uc3QgZGVmaW5lZFRvU2VhdD10b1NlYXQhPT11bmRlZmluZWQ/dG9TZWF0OmZyb21TZWF0O1xuXG5jb25zdCB6b2U9emNmLmdldFpvZVNlcnZpY2UoKTtcbmNvbnN0IG1hcHBpbmdSZXZlcnNlZD1yZXZlcnNlKGtleXdvcmRNYXBwaW5nKTtcblxuY29uc3QgbmV3S2V5d29yZHM9XG5wcm9wb3NhbCE9PXVuZGVmaW5lZD9cbm1hcEtleXdvcmRzKHByb3Bvc2FsLmdpdmUsbWFwcGluZ1JldmVyc2VkKTpcbmhhcmRlbih7fSk7XG5cbi8vXG4vL1xuY29uc3QgcGF5bWVudHM9YXdhaXQgd2l0aGRyYXdGcm9tU2VhdCh6Y2YsZnJvbVNlYXQsbmV3S2V5d29yZHMpO1xuXG4vL1xuY29uc3QgcGF5bWVudHNGb3JPdGhlckNvbnRyYWN0PW1hcEtleXdvcmRzKHBheW1lbnRzLGtleXdvcmRNYXBwaW5nKTtcblxuY29uc3QgdXNlclNlYXRQcm9taXNlPUUoem9lKS5vZmZlcihcbmludml0YXRpb24sXG5wcm9wb3NhbCxcbnBheW1lbnRzRm9yT3RoZXJDb250cmFjdCxcbm9mZmVyQXJncyk7XG5cblxuY29uc3QgZGVwb3NpdGVkUHJvbWlzZUtpdD1tYWtlUHJvbWlzZUtpdCgpO1xuXG5jb25zdCBkb0RlcG9zaXQ9YXN5bmMocGF5b3V0UGF5bWVudHMpPT57XG4vL1xuY29uc3QgYW1vdW50cz1hd2FpdCBFKHVzZXJTZWF0UHJvbWlzZSkuZ2V0RmluYWxBbGxvY2F0aW9uKCk7XG5cbi8vXG5jb25zdCBtYXBwZWRBbW91bnRzPW1hcEtleXdvcmRzKGFtb3VudHMsbWFwcGluZ1JldmVyc2VkKTtcbmNvbnN0IG1hcHBlZFBheW1lbnRzPW1hcEtleXdvcmRzKHBheW91dFBheW1lbnRzLG1hcHBpbmdSZXZlcnNlZCk7XG5hd2FpdCBkZXBvc2l0VG9TZWF0KHpjZixkZWZpbmVkVG9TZWF0LG1hcHBlZEFtb3VudHMsbWFwcGVkUGF5bWVudHMpO1xuZGVwb3NpdGVkUHJvbWlzZUtpdC5yZXNvbHZlKG1hcHBlZEFtb3VudHMpO1xuIH07XG5cbnZvaWQgRSh1c2VyU2VhdFByb21pc2UpLmdldFBheW91dHMoKS50aGVuKGRvRGVwb3NpdCk7XG5cbi8vXG5yZXR1cm4gaGFyZGVuKHt1c2VyU2VhdFByb21pc2UsZGVwb3NpdGVkOmRlcG9zaXRlZFByb21pc2VLaXQucHJvbWlzZX0pO1xuIH07JGjNj19vbmNlLm9mZmVyVG8ob2ZmZXJUbyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0QWNjZXB0YW5jZU1zZyI6WyJkZWZhdWx0QWNjZXB0YW5jZU1zZyJdLCJhc3NlcnRJc3N1ZXJLZXl3b3JkcyI6WyJhc3NlcnRJc3N1ZXJLZXl3b3JkcyJdLCJzYXRpc2ZpZXMiOlsic2F0aXNmaWVzIl0sInN3YXAiOlsic3dhcCJdLCJzd2FwRXhhY3QiOlsic3dhcEV4YWN0Il0sImZpdFByb3Bvc2FsU2hhcGUiOlsiZml0UHJvcG9zYWxTaGFwZSJdLCJhc3NlcnRQcm9wb3NhbFNoYXBlIjpbImFzc2VydFByb3Bvc2FsU2hhcGUiXSwiYXNzZXJ0TmF0QXNzZXRLaW5kIjpbImFzc2VydE5hdEFzc2V0S2luZCJdLCJkZXBvc2l0VG9TZWF0U3VjY2Vzc01zZyI6WyJkZXBvc2l0VG9TZWF0U3VjY2Vzc01zZyJdLCJkZXBvc2l0VG9TZWF0IjpbImRlcG9zaXRUb1NlYXQiXSwid2l0aGRyYXdGcm9tU2VhdCI6WyJ3aXRoZHJhd0Zyb21TZWF0Il0sInNhdmVBbGxJc3N1ZXJzIjpbInNhdmVBbGxJc3N1ZXJzIl0sIm1hcEtleXdvcmRzIjpbIm1hcEtleXdvcmRzIl0sIm9mZmVyVG8iOlsib2ZmZXJUbyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACbcvnRbQQAAG0EAAA/AAAAQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2ludGVybmFsLXR5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbi8qXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADODslVRBgAAUQYAADsAAABAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbWFrZUhhbmRsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy92YXQtZGF0YSIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbImRlZmluZUR1cmFibGVIYW5kbGUiLCJtYWtlSGFuZGxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsaW5pdEVtcHR5LG1ha2VFeG8scHJlcGFyZUV4b0NsYXNzLEhhbmRsZUk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImluaXRFbXB0eVwiLCBbJGjNj19hID0+IChpbml0RW1wdHkgPSAkaM2PX2EpXV0sW1wibWFrZUV4b1wiLCBbJGjNj19hID0+IChtYWtlRXhvID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiSGFuZGxlSVwiLCBbJGjNj19hID0+IChIYW5kbGVJID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmluZUR1cmFibGVIYW5kbGU9KGJhZ2dhZ2UsaGFuZGxlVHlwZSk9PntcbnR5cGVvZiBoYW5kbGVUeXBlPT09J3N0cmluZyd8fEZhaWwgYGhhbmRsZVR5cGUgbXVzdCBiZSBhIHN0cmluZ2A7XG5jb25zdCBtYWtlSGFuZGxlPXByZXBhcmVFeG9DbGFzcyhcbmJhZ2dhZ2UsXG4gYCR7aGFuZGxlVHlwZX1IYW5kbGVgLFxuSGFuZGxlSSxcbmluaXRFbXB0eSxcbnt9KTtcblxuLy9cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZUhhbmRsZSk7XG4gfTskaM2PX29uY2UuZGVmaW5lRHVyYWJsZUhhbmRsZShkZWZpbmVEdXJhYmxlSGFuZGxlKTtcbmhhcmRlbihkZWZpbmVEdXJhYmxlSGFuZGxlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSGFuZGxlPShoYW5kbGVUeXBlKT0+e1xudHlwZW9mIGhhbmRsZVR5cGU9PT0nc3RyaW5nJ3x8RmFpbCBgaGFuZGxlVHlwZSBtdXN0IGJlIGEgc3RyaW5nYDtcbi8vXG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgKi9tYWtlRXhvKGAke2hhbmRsZVR5cGV9SGFuZGxlYCxIYW5kbGVJLHt9KSk7XG4gfTskaM2PX29uY2UubWFrZUhhbmRsZShtYWtlSGFuZGxlKTtcbmhhcmRlbihtYWtlSGFuZGxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmluZUR1cmFibGVIYW5kbGUiOlsiZGVmaW5lRHVyYWJsZUhhbmRsZSJdLCJtYWtlSGFuZGxlIjpbIm1ha2VIYW5kbGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAi3sP2XpDAAB6QwAAOwAAAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlR3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvZXJ0cCIsIkBhZ29yaWMvbm90aWZpZXIiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy90aW1lIl0sImV4cG9ydHMiOlsiQWRtaW5GYWNldEkiLCJBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUiLCJBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZFNoYXBlIiwiQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUiLCJCdW5kbGVDYXBTaGFwZSIsIkJ1bmRsZVNoYXBlIiwiRW1wdHlQcm9wb3NhbFNoYXBlIiwiRXhpdE9iamVjdEkiLCJFeGl0T2JqZWN0U2hhcGUiLCJGZWVNaW50QWNjZXNzU2hhcGUiLCJGdWxsUHJvcG9zYWxTaGFwZSIsIkhhbmRsZUkiLCJIYW5kbGVPZmZlckkiLCJJbnN0YWxsYXRpb25TaGFwZSIsIkluc3RhbmNlQWRtaW5JIiwiSW5zdGFuY2VBZG1pblNoYXBlIiwiSW5zdGFuY2VIYW5kbGVTaGFwZSIsIkluc3RhbmNlUmVjb3JkU2hhcGUiLCJJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdCIsIkludml0YXRpb25FbGVtZW50U2hhcGUiLCJJbnZpdGF0aW9uSGFuZGxlU2hhcGUiLCJJbnZpdGF0aW9uU2hhcGUiLCJJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUiLCJJc3N1ZXJQS2V5d29yZFJlY29yZFNoYXBlIiwiSXNzdWVyUmVjb3JkU2hhcGUiLCJLZXl3b3JkU2hhcGUiLCJPZmZlckhhbmRsZXJJIiwiUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUiLCJQcmljZVF1b3RlU2hhcGUiLCJQcm9wb3NhbFNoYXBlIiwiU2VhdERhdGFTaGFwZSIsIlNlYXRIYW5kbGVBbGxvY2F0aW9uc1NoYXBlIiwiU2VhdFNoYXBlIiwiVGVybXNTaGFwZSIsIlRpbWVyU2hhcGUiLCJVbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZSIsIlpvZU1pbnRJIiwiWm9lTWludFNoYXBlIiwiWm9lU2VydmljZUkiLCJab2VTdG9yYWdlTWFuYWdlcklLaXQiLCJpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZSIsImlzT25EZW1hbmRFeGl0UnVsZSIsImlzV2FpdmVkRXhpdFJ1bGUiLCJtYWtlSGFuZGxlU2hhcGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQW1vdW50U2hhcGUsQXNzZXRLaW5kU2hhcGUsQnJhbmRTaGFwZSxEaXNwbGF5SW5mb1NoYXBlLElzc3VlcktpdFNoYXBlLElzc3VlclNoYXBlLFBheW1lbnRTaGFwZSxTdWJzY3JpYmVyU2hhcGUsTSxUaW1lc3RhbXBTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvZXJ0cFwiLCBbW1wiQW1vdW50U2hhcGVcIiwgWyRozY9fYSA9PiAoQW1vdW50U2hhcGUgPSAkaM2PX2EpXV0sW1wiQXNzZXRLaW5kU2hhcGVcIiwgWyRozY9fYSA9PiAoQXNzZXRLaW5kU2hhcGUgPSAkaM2PX2EpXV0sW1wiQnJhbmRTaGFwZVwiLCBbJGjNj19hID0+IChCcmFuZFNoYXBlID0gJGjNj19hKV1dLFtcIkRpc3BsYXlJbmZvU2hhcGVcIiwgWyRozY9fYSA9PiAoRGlzcGxheUluZm9TaGFwZSA9ICRozY9fYSldXSxbXCJJc3N1ZXJLaXRTaGFwZVwiLCBbJGjNj19hID0+IChJc3N1ZXJLaXRTaGFwZSA9ICRozY9fYSldXSxbXCJJc3N1ZXJTaGFwZVwiLCBbJGjNj19hID0+IChJc3N1ZXJTaGFwZSA9ICRozY9fYSldXSxbXCJQYXltZW50U2hhcGVcIiwgWyRozY9fYSA9PiAoUGF5bWVudFNoYXBlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wiU3Vic2NyaWJlclNoYXBlXCIsIFskaM2PX2EgPT4gKFN1YnNjcmliZXJTaGFwZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdGltZVwiLCBbW1wiVGltZXN0YW1wU2hhcGVcIiwgWyRozY9fYSA9PiAoVGltZXN0YW1wU2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vL1xuY29uc3QgICAgICAgIEtleXdvcmRTaGFwZT1NLnN0cmluZygpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuS2V5d29yZFNoYXBlKEtleXdvcmRTaGFwZSk7XG5jb25zdCAgICAgICAgSW52aXRhdGlvbkhhbmRsZVNoYXBlPU0ucmVtb3RhYmxlKCdJbnZpdGF0aW9uSGFuZGxlJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuSW52aXRhdGlvbkhhbmRsZVNoYXBlKEludml0YXRpb25IYW5kbGVTaGFwZSk7XG5jb25zdCAgICAgICAgSW52aXRhdGlvblNoYXBlPU0ucmVtb3RhYmxlKCdJbnZpdGF0aW9uJyk7JGjNj19vbmNlLkludml0YXRpb25TaGFwZShJbnZpdGF0aW9uU2hhcGUpO1xuY29uc3QgICAgICAgIEluc3RhbmNlSGFuZGxlU2hhcGU9TS5yZW1vdGFibGUoJ0luc3RhbmNlSGFuZGxlJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5JbnN0YW5jZUhhbmRsZVNoYXBlKEluc3RhbmNlSGFuZGxlU2hhcGUpO1xuY29uc3QgICAgICAgIEluc3RhbGxhdGlvblNoYXBlPU0ucmVtb3RhYmxlKCdJbnN0YWxsYXRpb24nKTskaM2PX29uY2UuSW5zdGFsbGF0aW9uU2hhcGUoSW5zdGFsbGF0aW9uU2hhcGUpO1xuY29uc3QgICAgICAgIFNlYXRTaGFwZT1NLnJlbW90YWJsZSgnU2VhdCcpOyRozY9fb25jZS5TZWF0U2hhcGUoU2VhdFNoYXBlKTtcblxuY29uc3QgICAgICAgIEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZT1NLnJlY29yZE9mKEtleXdvcmRTaGFwZSxBbW91bnRTaGFwZSk7JGjNj19vbmNlLkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZShBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUpO1xuY29uc3QgICAgICAgIEFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkU2hhcGU9TS5yZWNvcmRPZihcbktleXdvcmRTaGFwZSxcbk0ucGF0dGVybigpKTskaM2PX29uY2UuQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmRTaGFwZShBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZFNoYXBlKTtcblxuY29uc3QgICAgICAgIFBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlPU0ucmVjb3JkT2YoXG5LZXl3b3JkU2hhcGUsXG5NLmVyZWYoUGF5bWVudFNoYXBlKSk7JGjNj19vbmNlLlBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlKFBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlKTtcblxuY29uc3QgICAgICAgIElzc3VlcktleXdvcmRSZWNvcmRTaGFwZT1NLnJlY29yZE9mKEtleXdvcmRTaGFwZSxJc3N1ZXJTaGFwZSk7JGjNj19vbmNlLklzc3VlcktleXdvcmRSZWNvcmRTaGFwZShJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUpO1xuY29uc3QgICAgICAgIElzc3VlclBLZXl3b3JkUmVjb3JkU2hhcGU9TS5yZWNvcmRPZihcbktleXdvcmRTaGFwZSxcbk0uZXJlZihJc3N1ZXJTaGFwZSkpOyRozY9fb25jZS5Jc3N1ZXJQS2V5d29yZFJlY29yZFNoYXBlKElzc3VlclBLZXl3b3JkUmVjb3JkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGU9TS5yZWNvcmRPZihLZXl3b3JkU2hhcGUsQnJhbmRTaGFwZSk7JGjNj19vbmNlLkJyYW5kS2V5d29yZFJlY29yZFNoYXBlKEJyYW5kS2V5d29yZFJlY29yZFNoYXBlKTtcblxuY29uc3QgICAgICAgIElzc3VlclJlY29yZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5icmFuZDpCcmFuZFNoYXBlLFxuaXNzdWVyOklzc3VlclNoYXBlLFxuYXNzZXRLaW5kOkFzc2V0S2luZFNoYXBlfSxcblxue2Rpc3BsYXlJbmZvOkRpc3BsYXlJbmZvU2hhcGV9KTskaM2PX29uY2UuSXNzdWVyUmVjb3JkU2hhcGUoSXNzdWVyUmVjb3JkU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBUZXJtc1NoYXBlPXtcbmlzc3VlcnM6SXNzdWVyS2V5d29yZFJlY29yZFNoYXBlLFxuYnJhbmRzOkJyYW5kS2V5d29yZFJlY29yZFNoYXBlfTskaM2PX29uY2UuVGVybXNTaGFwZShUZXJtc1NoYXBlKTtcblxuaGFyZGVuKFRlcm1zU2hhcGUpO1xuXG5jb25zdCAgICAgICAgSW5zdGFuY2VSZWNvcmRTaGFwZT17XG5pbnN0YWxsYXRpb246SW5zdGFsbGF0aW9uU2hhcGUsXG5pbnN0YW5jZTpJbnN0YW5jZUhhbmRsZVNoYXBlLFxudGVybXM6TS5zcGxpdFJlY29yZChUZXJtc1NoYXBlKX07JGjNj19vbmNlLkluc3RhbmNlUmVjb3JkU2hhcGUoSW5zdGFuY2VSZWNvcmRTaGFwZSk7XG5cbmhhcmRlbihJbnN0YW5jZVJlY29yZFNoYXBlKTtcblxuY29uc3QgICAgICAgIEhhbmRsZUk9TS5pbnRlcmZhY2UoJ0hhbmRsZScse30pOyRozY9fb25jZS5IYW5kbGVJKEhhbmRsZUkpO1xuXG5jb25zdCAgICAgICAgbWFrZUhhbmRsZVNoYXBlPShuYW1lKT0+TS5yZW1vdGFibGUoIGAke25hbWV9SGFuZGxlYCk7JGjNj19vbmNlLm1ha2VIYW5kbGVTaGFwZShtYWtlSGFuZGxlU2hhcGUpO1xuY29uc3QgICAgICAgIFRpbWVyU2hhcGU9bWFrZUhhbmRsZVNoYXBlKCd0aW1lcicpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLlRpbWVyU2hhcGUoVGltZXJTaGFwZSk7XG5jb25zdCAgICAgICAgRnVsbFByb3Bvc2FsU2hhcGU9e1xud2FudDpBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZFNoYXBlLFxuZ2l2ZTpBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUsXG4vL1xuLy9cbi8vXG5leGl0Ok0uc3BsaXRSZWNvcmQoXG57fSxcbntcbm9uRGVtYW5kOm51bGwsXG53YWl2ZWQ6bnVsbCxcbmFmdGVyRGVhZGxpbmU6e1xudGltZXI6TS5lcmVmKFRpbWVyU2hhcGUpLFxuZGVhZGxpbmU6VGltZXN0YW1wU2hhcGV9fSxcblxuXG57fSl9OyRozY9fb25jZS5GdWxsUHJvcG9zYWxTaGFwZShGdWxsUHJvcG9zYWxTaGFwZSk7XG5cblxuaGFyZGVuKEZ1bGxQcm9wb3NhbFNoYXBlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgUHJvcG9zYWxTaGFwZT1NLnNwbGl0UmVjb3JkKHt9LEZ1bGxQcm9wb3NhbFNoYXBlLHt9KTskaM2PX29uY2UuUHJvcG9zYWxTaGFwZShQcm9wb3NhbFNoYXBlKTtcblxuY29uc3QgICAgICAgIEVtcHR5UHJvcG9zYWxTaGFwZT1NLnNwbGl0UmVjb3JkKHtcbmdpdmU6e30sXG53YW50Ont9LFxuZXhpdDp7b25EZW1hbmQ6bnVsbH19KTskaM2PX29uY2UuRW1wdHlQcm9wb3NhbFNoYXBlKEVtcHR5UHJvcG9zYWxTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIGlzT25EZW1hbmRFeGl0UnVsZT0oZXhpdCk9PntcbmNvbnN0W2V4aXRLZXldPU9iamVjdC5rZXlzKGV4aXQpO1xucmV0dXJuIGV4aXRLZXk9PT0nb25EZW1hbmQnO1xuIH07JGjNj19vbmNlLmlzT25EZW1hbmRFeGl0UnVsZShpc09uRGVtYW5kRXhpdFJ1bGUpO1xuaGFyZGVuKGlzT25EZW1hbmRFeGl0UnVsZSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXYWl2ZWRFeGl0UnVsZT0oZXhpdCk9PntcbmNvbnN0W2V4aXRLZXldPU9iamVjdC5rZXlzKGV4aXQpO1xucmV0dXJuIGV4aXRLZXk9PT0nd2FpdmVkJztcbiB9OyRozY9fb25jZS5pc1dhaXZlZEV4aXRSdWxlKGlzV2FpdmVkRXhpdFJ1bGUpO1xuaGFyZGVuKGlzV2FpdmVkRXhpdFJ1bGUpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlPShleGl0KT0+e1xuY29uc3RbZXhpdEtleV09T2JqZWN0LmtleXMoZXhpdCk7XG5yZXR1cm4gZXhpdEtleT09PSdhZnRlckRlYWRsaW5lJztcbiB9OyRozY9fb25jZS5pc0FmdGVyRGVhZGxpbmVFeGl0UnVsZShpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZSk7XG5oYXJkZW4oaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGUpO1xuXG5jb25zdCAgICAgICAgSW52aXRhdGlvbkVsZW1lbnRTaGFwZT1NLnNwbGl0UmVjb3JkKHtcbmRlc2NyaXB0aW9uOk0uc3RyaW5nKCksXG5oYW5kbGU6SW52aXRhdGlvbkhhbmRsZVNoYXBlLFxuaW5zdGFuY2U6SW5zdGFuY2VIYW5kbGVTaGFwZSxcbmluc3RhbGxhdGlvbjpJbnN0YWxsYXRpb25TaGFwZX0pOyRozY9fb25jZS5JbnZpdGF0aW9uRWxlbWVudFNoYXBlKEludml0YXRpb25FbGVtZW50U2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBPZmZlckhhbmRsZXJJPU0uaW50ZXJmYWNlKCdPZmZlckhhbmRsZXInLHtcbmhhbmRsZTpNLmNhbGwoU2VhdFNoYXBlKS5vcHRpb25hbChNLmFueSgpKS5yZXR1cm5zKE0uYW55KCkpfSk7JGjNj19vbmNlLk9mZmVySGFuZGxlckkoT2ZmZXJIYW5kbGVySSk7XG5cblxuY29uc3QgICAgICAgIFNlYXRIYW5kbGVBbGxvY2F0aW9uc1NoYXBlPU0uYXJyYXlPZih7XG5zZWF0SGFuZGxlOlNlYXRTaGFwZSxcbmFsbG9jYXRpb246QW1vdW50S2V5d29yZFJlY29yZFNoYXBlfSk7JGjNj19vbmNlLlNlYXRIYW5kbGVBbGxvY2F0aW9uc1NoYXBlKFNlYXRIYW5kbGVBbGxvY2F0aW9uc1NoYXBlKTtcblxuXG5jb25zdCAgICAgICAgWm9lTWludFNoYXBlPU0ucmVtb3RhYmxlKCdab2VNaW50Jyk7JGjNj19vbmNlLlpvZU1pbnRTaGFwZShab2VNaW50U2hhcGUpO1xuY29uc3QgICAgICAgIFpvZU1pbnRJPU0uaW50ZXJmYWNlKCdab2VNaW50Jyx7XG5nZXRJc3N1ZXJSZWNvcmQ6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJSZWNvcmRTaGFwZSksXG5taW50QW5kRXNjcm93Ok0uY2FsbChBbW91bnRTaGFwZSkucmV0dXJucygpLFxud2l0aGRyYXdBbmRCdXJuOk0uY2FsbChBbW91bnRTaGFwZSkucmV0dXJucygpfSk7JGjNj19vbmNlLlpvZU1pbnRJKFpvZU1pbnRJKTtcblxuXG5jb25zdCAgICAgICAgRmVlTWludEFjY2Vzc1NoYXBlPU0ucmVtb3RhYmxlKCdGZWVNaW50QWNjZXNzJyk7JGjNj19vbmNlLkZlZU1pbnRBY2Nlc3NTaGFwZShGZWVNaW50QWNjZXNzU2hhcGUpO1xuXG5jb25zdCAgICAgICAgRXhpdE9iamVjdEk9TS5pbnRlcmZhY2UoJ0V4aXQgT2JqZWN0Jyx7XG5leGl0Ok0uY2FsbCgpLnJldHVybnMoKX0pOyRozY9fb25jZS5FeGl0T2JqZWN0SShFeGl0T2JqZWN0SSk7XG5cblxuY29uc3QgICAgICAgIEV4aXRPYmplY3RTaGFwZT1NLnJlbW90YWJsZSgnRXhpdE9iaicpOyRozY9fb25jZS5FeGl0T2JqZWN0U2hhcGUoRXhpdE9iamVjdFNoYXBlKTtcbmNvbnN0ICAgICAgICBJbnN0YW5jZUFkbWluU2hhcGU9TS5yZW1vdGFibGUoJ0luc3RhbmNlQWRtaW4nKTskaM2PX29uY2UuSW5zdGFuY2VBZG1pblNoYXBlKEluc3RhbmNlQWRtaW5TaGFwZSk7XG5jb25zdCAgICAgICAgSW5zdGFuY2VBZG1pbkk9TS5pbnRlcmZhY2UoJ0luc3RhbmNlQWRtaW4nLHtcbm1ha2VJbnZpdGF0aW9uOk0uY2FsbChJbnZpdGF0aW9uSGFuZGxlU2hhcGUsTS5zdHJpbmcoKSkuXG5vcHRpb25hbChNLnJlY29yZCgpLE0ucGF0dGVybigpKS5cbnJldHVybnMoSW52aXRhdGlvblNoYXBlKSxcbnNhdmVJc3N1ZXI6TS5jYWxsV2hlbihNLmF3YWl0KElzc3VlclNoYXBlKSxLZXl3b3JkU2hhcGUpLnJldHVybnMoXG5Jc3N1ZXJSZWNvcmRTaGFwZSksXG5cbm1ha2VOb0VzY3Jvd1NlYXQ6TS5jYWxsKFxuQW1vdW50S2V5d29yZFJlY29yZFNoYXBlLFxuUHJvcG9zYWxTaGFwZSxcbkV4aXRPYmplY3RTaGFwZSxcblNlYXRTaGFwZSkuXG5yZXR1cm5zKFNlYXRTaGFwZSksXG5leGl0QWxsU2VhdHM6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKSxcbmZhaWxBbGxTZWF0czpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpLFxuZXhpdFNlYXQ6TS5jYWxsKFNlYXRTaGFwZSxNLmFueSgpKS5yZXR1cm5zKCksXG5mYWlsU2VhdDpNLmNhbGwoU2VhdFNoYXBlLE0uYW55KCkpLnJldHVybnMoKSxcbm1ha2Vab2VNaW50Ok0uY2FsbChLZXl3b3JkU2hhcGUpLlxub3B0aW9uYWwoXG5Bc3NldEtpbmRTaGFwZSxcbkRpc3BsYXlJbmZvU2hhcGUsXG5NLnNwbGl0UmVjb3JkKHt9LHtlbGVtZW50U2hhcGU6TS5wYXR0ZXJuKCl9KSkuXG5cbnJldHVybnMoTS5yZW1vdGFibGUoJ3pvZU1pbnQnKSksXG5yZWdpc3RlckZlZU1pbnQ6TS5jYWxsKEtleXdvcmRTaGFwZSxGZWVNaW50QWNjZXNzU2hhcGUpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnZmVlTWludCcpKSxcblxucmVwbGFjZUFsbG9jYXRpb25zOk0uY2FsbChTZWF0SGFuZGxlQWxsb2NhdGlvbnNTaGFwZSkucmV0dXJucygpLFxuc3RvcEFjY2VwdGluZ09mZmVyczpNLmNhbGwoKS5yZXR1cm5zKCksXG5zZXRPZmZlckZpbHRlcjpNLmNhbGwoTS5hcnJheU9mKE0uc3RyaW5nKCkpKS5yZXR1cm5zKCksXG5nZXRPZmZlckZpbHRlcjpNLmNhbGwoKS5yZXR1cm5zKE0uYXJyYXlPZihNLnN0cmluZygpKSksXG5nZXRFeGl0U3Vic2NyaWJlcjpNLmNhbGwoU2VhdFNoYXBlKS5yZXR1cm5zKFN1YnNjcmliZXJTaGFwZSksXG5pc0Jsb2NrZWQ6TS5jYWxsKE0uc3RyaW5nKCkpLnJldHVybnMoTS5ib29sZWFuKCkpLFxucmVwYWlyQ29udHJhY3RDb21wbGV0aW9uV2F0Y2hlcjpNLmNhbGwoKS5yZXR1cm5zKCl9KTskaM2PX29uY2UuSW5zdGFuY2VBZG1pbkkoSW5zdGFuY2VBZG1pbkkpO1xuXG5cbmNvbnN0ICAgICAgICBJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdD17XG5pbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyOk0uaW50ZXJmYWNlKCdJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyJyx7XG5nZXRUZXJtczpNLmNhbGwoKS5yZXR1cm5zKE0uc3BsaXRSZWNvcmQoVGVybXNTaGFwZSkpLFxuZ2V0SXNzdWVyczpNLmNhbGwoKS5yZXR1cm5zKElzc3VlcktleXdvcmRSZWNvcmRTaGFwZSksXG5nZXRCcmFuZHM6TS5jYWxsKCkucmV0dXJucyhCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSksXG5nZXRJbnN0YWxsYXRpb246TS5jYWxsKCkucmV0dXJucyhJbnN0YWxsYXRpb25TaGFwZSksXG5nZXRJbnZpdGF0aW9uSXNzdWVyOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyU2hhcGUpLFxuXG5zYXZlSXNzdWVyOk0uY2FsbChJc3N1ZXJTaGFwZSxLZXl3b3JkU2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpLFxubWFrZVpvZU1pbnQ6TS5jYWxsKEtleXdvcmRTaGFwZSkuXG5vcHRpb25hbChcbkFzc2V0S2luZFNoYXBlLFxuRGlzcGxheUluZm9TaGFwZSxcbk0uc3BsaXRSZWNvcmQoe30se2VsZW1lbnRTaGFwZTpNLnBhdHRlcm4oKX0pKS5cblxucmV0dXJucyhNLmVyZWYoWm9lTWludFNoYXBlKSksXG5yZWdpc3RlckZlZU1pbnQ6TS5jYWxsKEtleXdvcmRTaGFwZSxGZWVNaW50QWNjZXNzU2hhcGUpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnZmVlTWludCcpKSxcblxuZ2V0SW5zdGFuY2VSZWNvcmQ6TS5jYWxsKCkucmV0dXJucyhJbnN0YW5jZVJlY29yZFNoYXBlKSxcbmdldElzc3VlclJlY29yZHM6TS5jYWxsKCkucmV0dXJucyhNLmFycmF5T2YoSXNzdWVyUmVjb3JkU2hhcGUpKSxcbmdldFdpdGhkcmF3RmFjZXQ6TS5jYWxsKCkucmV0dXJucyhNLnJlbW90YWJsZSgnV2l0aGRyYXdGYWNldCcpKSxcbmluaXRJbnN0YW5jZUFkbWluOk0uY2FsbChcbkluc3RhbmNlSGFuZGxlU2hhcGUsXG5NLnJlbW90YWJsZSgnaW5zdGFuY2VBZG1pbicpKS5cbnJldHVybnMoTS5wcm9taXNlKCkpLFxuZGVsZXRlSW5zdGFuY2VBZG1pbjpNLmNhbGwoSW5zdGFuY2VBZG1pblNoYXBlKS5yZXR1cm5zKCksXG5tYWtlSW52aXRhdGlvbjpNLmNhbGwoSW52aXRhdGlvbkhhbmRsZVNoYXBlLE0uc3RyaW5nKCkpLlxub3B0aW9uYWwoTS5yZWNvcmQoKSxNLnBhdHRlcm4oKSkuXG5yZXR1cm5zKFBheW1lbnRTaGFwZSksXG5nZXRSb290Ok0uY2FsbCgpLnJldHVybnMoTS5hbnkoKSksXG5nZXRBZG1pbk5vZGU6TS5jYWxsKCkucmV0dXJucyhNLnJlbW90YWJsZSgnYWRtaW5Ob2RlJykpfSksXG5cbndpdGhkcmF3RmFjZXQ6TS5pbnRlcmZhY2UoJ1dpdGhkcmF3RmFjZXQnLHtcbndpdGhkcmF3UGF5bWVudHM6TS5jYWxsKEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSkucmV0dXJucyhcblBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlKX0pLFxuXG5cbmhlbHBlcnM6TS5pbnRlcmZhY2UoJ0luc3RhbmNlU3RvcmFnZU1hbmFnZXIgaGVscGVyJyx7XG53cmFwSXNzdWVyS2l0V2l0aFpvZU1pbnQ6TS5jYWxsKFxuS2V5d29yZFNoYXBlLFxuSXNzdWVyS2l0U2hhcGUsXG5NLnJlbW90YWJsZSgnYWRtaW5Ob2RlJykpLlxucmV0dXJucyhab2VNaW50U2hhcGUpfSl9OyRozY9fb25jZS5JbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdChJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdCk7XG5cblxuaGFyZGVuKEluc3RhbmNlU3RvcmFnZU1hbmFnZXJJS2l0KTtcblxuY29uc3QgICAgICAgIEJ1bmRsZUNhcFNoYXBlPU0ucmVtb3RhYmxlKCdidW5kbGVDYXAnKTskaM2PX29uY2UuQnVuZGxlQ2FwU2hhcGUoQnVuZGxlQ2FwU2hhcGUpO1xuY29uc3QgICAgICAgIEJ1bmRsZVNoYXBlPU0uYW5kKFxuTS5zcGxpdFJlY29yZCh7bW9kdWxlRm9ybWF0Ok0uYW55KCl9KSxcbk0ucmVjb3JkT2YoTS5zdHJpbmcoKSxNLnN0cmluZyh7c3RyaW5nTGVuZ3RoTGltaXQ6SW5maW5pdHl9KSkpOyRozY9fb25jZS5CdW5kbGVTaGFwZShCdW5kbGVTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIFVud3JhcHBlZEluc3RhbGxhdGlvblNoYXBlPU0uc3BsaXRSZWNvcmQoXG57aW5zdGFsbGF0aW9uOkluc3RhbGxhdGlvblNoYXBlfSxcbntcbmJ1bmRsZTpNLnJlY29yZE9mKE0uc3RyaW5nKCksTS5zdHJpbmcoe3N0cmluZ0xlbmd0aExpbWl0OkluZmluaXR5fSkpLFxuYnVuZGxlQ2FwOkJ1bmRsZUNhcFNoYXBlLFxuYnVuZGxlSUQ6TS5zdHJpbmcoKX0sXG5cbnt9KTskaM2PX29uY2UuVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGUoVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBab2VTdG9yYWdlTWFuYWdlcklLaXQ9e1xuem9lU2VydmljZURhdGFBY2Nlc3M6TS5pbnRlcmZhY2UoJ1pvZVNlcnZpY2UgZGF0YUFjY2Vzcycse1xuZ2V0VGVybXM6TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoTS5zcGxpdFJlY29yZChUZXJtc1NoYXBlKSksXG5nZXRJc3N1ZXJzOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKElzc3VlcktleXdvcmRSZWNvcmRTaGFwZSksXG5nZXRCcmFuZHM6TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUpLFxuZ2V0SW5zdGFsbGF0aW9uOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKFxuTS5lcmVmKE0ucmVtb3RhYmxlKCdJbnN0YWxsYXRpb24nKSkpLFxuXG5nZXRJbnZpdGF0aW9uSXNzdWVyOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyU2hhcGUpLFxuXG5nZXRCdW5kbGVJREZyb21JbnN0YWxsYXRpb246TS5jYWxsKEluc3RhbGxhdGlvblNoYXBlKS5yZXR1cm5zKFxuTS5lcmVmKE0uc3RyaW5nKCkpKSxcblxuaW5zdGFsbEJ1bmRsZTpNLmNhbGwoTS5vcihJbnN0YW5jZUhhbmRsZVNoYXBlLEJ1bmRsZVNoYXBlKSkuXG5vcHRpb25hbChNLnN0cmluZygpKS5cbnJldHVybnMoTS5wcm9taXNlKCkpLFxuaW5zdGFsbEJ1bmRsZUlEOk0uY2FsbChNLnN0cmluZygpKS5cbm9wdGlvbmFsKE0uc3RyaW5nKCkpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG5cbmdldFB1YmxpY0ZhY2V0Ok0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKFxuTS5lcmVmKE0ucmVtb3RhYmxlKCdQdWJsaWNGYWNldCcpKSksXG5cbmdldE9mZmVyRmlsdGVyOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKE0uYXJyYXlPZihNLnN0cmluZygpKSksXG5nZXRQcm9wb3NhbFNoYXBlRm9ySW52aXRhdGlvbjpNLmNhbGwoSW52aXRhdGlvbkhhbmRsZVNoYXBlKS5yZXR1cm5zKFxuTS5vcHQoTS5wYXR0ZXJuKCkpKX0pLFxuXG5cbm1ha2VPZmZlckFjY2VzczpNLmludGVyZmFjZSgnWm9lU3RvcmFnZSBtYWtlT2ZmZXIgYWNjZXNzJyx7XG5nZXRBc3NldEtpbmRCeUJyYW5kOk0uY2FsbChCcmFuZFNoYXBlKS5yZXR1cm5zKEFzc2V0S2luZFNoYXBlKSxcbmdldEluc3RhbmNlQWRtaW46TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnaW5zdGFuY2VBZG1pbicpKSxcblxuZ2V0UHJvcG9zYWxTaGFwZUZvckludml0YXRpb246TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSkucmV0dXJucyhcbk0ub3B0KE0ucGF0dGVybigpKSksXG5cbmdldEludml0YXRpb25Jc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJTaGFwZSksXG5kZXBvc2l0UGF5bWVudHM6TS5jYWxsKFByb3Bvc2FsU2hhcGUsUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUpLnJldHVybnMoXG5NLnByb21pc2UoKSl9KSxcblxuXG5zdGFydEluc3RhbmNlQWNjZXNzOk0uaW50ZXJmYWNlKCdab2VTdG9yYWdlIHN0YXJ0SW5zdGFuY2UgYWNjZXNzJyx7XG5tYWtlWm9lSW5zdGFuY2VTdG9yYWdlTWFuYWdlcjpNLmNhbGwoXG5JbnN0YWxsYXRpb25TaGFwZSxcbk0uYW55KCksXG5Jc3N1ZXJQS2V5d29yZFJlY29yZFNoYXBlLFxuTS5vcihJbnN0YW5jZUhhbmRsZVNoYXBlLEJ1bmRsZVNoYXBlKSxcbk0ub3IoQnVuZGxlQ2FwU2hhcGUsQnVuZGxlU2hhcGUpLFxuTS5zdHJpbmcoKSkuXG5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnVud3JhcEluc3RhbGxhdGlvbjpNLmNhbGxXaGVuKE0uZXJlZihJbnN0YWxsYXRpb25TaGFwZSkpLnJldHVybnMoXG5VbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZSl9KSxcblxuXG5pbnZpdGF0aW9uSXNzdWVyQWNjZXNzOk0uaW50ZXJmYWNlKCdab2VTdG9yYWdlIGludml0YXRpb25Jc3N1ZXInLHtcbmdldEludml0YXRpb25Jc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJTaGFwZSl9KX07JGjNj19vbmNlLlpvZVN0b3JhZ2VNYW5hZ2VySUtpdChab2VTdG9yYWdlTWFuYWdlcklLaXQpO1xuXG5cbmhhcmRlbihab2VTdG9yYWdlTWFuYWdlcklLaXQpO1xuXG5jb25zdCAgICAgICAgWm9lU2VydmljZUk9TS5pbnRlcmZhY2UoJ1pvZVNlcnZpY2UnLHtcbmluc3RhbGw6TS5jYWxsKE0uYW55KCkpLm9wdGlvbmFsKE0uc3RyaW5nKCkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuaW5zdGFsbEJ1bmRsZUlEOk0uY2FsbChNLnN0cmluZygpKS5vcHRpb25hbChNLnN0cmluZygpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnN0YXJ0SW5zdGFuY2U6TS5jYWxsKE0uZXJlZihJbnN0YWxsYXRpb25TaGFwZSkpLlxub3B0aW9uYWwoSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZSxNLnJlY29yZCgpLE0ucmVjb3JkKCksTS5zdHJpbmcoKSkuXG5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbm9mZmVyOk0uY2FsbChNLmVyZWYoSW52aXRhdGlvblNoYXBlKSkuXG5vcHRpb25hbChQcm9wb3NhbFNoYXBlLFBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlLE0uYW55KCkpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG5cbmdldE9mZmVyRmlsdGVyOk0uY2FsbFdoZW4oTS5hd2FpdChJbnN0YW5jZUhhbmRsZVNoYXBlKSkucmV0dXJucyhcbk0uYXJyYXlPZihNLnN0cmluZygpKSksXG5cbmdldEludml0YXRpb25Jc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRGZWVJc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRCcmFuZHM6TS5jYWxsV2hlbihNLmF3YWl0KEluc3RhbmNlSGFuZGxlU2hhcGUpKS5yZXR1cm5zKFxuQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUpLFxuXG5nZXRJc3N1ZXJzOk0uY2FsbFdoZW4oTS5hd2FpdChJbnN0YW5jZUhhbmRsZVNoYXBlKSkucmV0dXJucyhcbklzc3VlcktleXdvcmRSZWNvcmRTaGFwZSksXG5cbmdldFB1YmxpY0ZhY2V0Ok0uY2FsbFdoZW4oTS5hd2FpdChJbnN0YW5jZUhhbmRsZVNoYXBlKSkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdQdWJsaWNGYWNldCcpKSxcblxuZ2V0VGVybXM6TS5jYWxsV2hlbihNLmF3YWl0KEluc3RhbmNlSGFuZGxlU2hhcGUpKS5yZXR1cm5zKE0uYW55KCkpLFxuZ2V0SW5zdGFsbGF0aW9uRm9ySW5zdGFuY2U6TS5jYWxsV2hlbihNLmF3YWl0KEluc3RhbmNlSGFuZGxlU2hhcGUpKS5yZXR1cm5zKFxuTS5lcmVmKE0ucmVtb3RhYmxlKCdJbnN0YWxsYXRpb24nKSkpLFxuXG5nZXRCdW5kbGVJREZyb21JbnN0YWxsYXRpb246TS5jYWxsKEluc3RhbGxhdGlvblNoYXBlKS5yZXR1cm5zKFxuTS5lcmVmKE0uc3RyaW5nKCkpKSxcblxuXG5nZXRJbnN0YWxsYXRpb246TS5jYWxsKE0uZXJlZihJbnZpdGF0aW9uU2hhcGUpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldEluc3RhbmNlOk0uY2FsbChNLmVyZWYoSW52aXRhdGlvblNoYXBlKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRDb25maWd1cmF0aW9uOk0uY2FsbCgpLnJldHVybnMoe1xuZmVlSXNzdWVyQ29uZmlnOntcbm5hbWU6TS5zdHJpbmcoKSxcbmFzc2V0S2luZDonbmF0JyxcbmRpc3BsYXlJbmZvOkRpc3BsYXlJbmZvU2hhcGV9fSksXG5cblxuZ2V0SW52aXRhdGlvbkRldGFpbHM6TS5jYWxsKE0uZXJlZihJbnZpdGF0aW9uU2hhcGUpKS5yZXR1cm5zKE0uYW55KCkpLFxuZ2V0UHJvcG9zYWxTaGFwZUZvckludml0YXRpb246TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSkucmV0dXJucyhcbk0ub3B0KFByb3Bvc2FsU2hhcGUpKX0pOyRozY9fb25jZS5ab2VTZXJ2aWNlSShab2VTZXJ2aWNlSSk7XG5cblxuXG5jb25zdCAgICAgICAgQWRtaW5GYWNldEk9TS5pbnRlcmZhY2UoJ1pjZkFkbWluRmFjZXQnLHtcbmdldFZhdFNodXRkb3duUHJvbWlzZTpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnJlc3RhcnRDb250cmFjdDpNLmNhbGwoKS5vcHRpb25hbChNLmFueSgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnVwZ3JhZGVDb250cmFjdDpNLmNhbGwoTS5zdHJpbmcoKSkub3B0aW9uYWwoTS5hbnkoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG50ZXJtaW5hdGVDb250cmFjdDpNLmNhbGwoTS5lcnJvcigpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKX0pOyRozY9fb25jZS5BZG1pbkZhY2V0SShBZG1pbkZhY2V0SSk7XG5cblxuY29uc3QgICAgICAgIFNlYXREYXRhU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbnByb3Bvc2FsOlByb3Bvc2FsU2hhcGUsXG5pbml0aWFsQWxsb2NhdGlvbjpBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUsXG5zZWF0SGFuZGxlOlNlYXRTaGFwZX0sXG5cbntcbm9mZmVyQXJnczpNLmFueSgpfSk7JGjNj19vbmNlLlNlYXREYXRhU2hhcGUoU2VhdERhdGFTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSGFuZGxlT2ZmZXJJPU0uaW50ZXJmYWNlKCdIYW5kbGVPZmZlcicse1xuaGFuZGxlT2ZmZXI6TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSxTZWF0RGF0YVNoYXBlKS5yZXR1cm5zKHtcbm9mZmVyUmVzdWx0UHJvbWlzZTpNLnByb21pc2UoKSxcbmV4aXRPYmo6RXhpdE9iamVjdFNoYXBlfSl9KTskaM2PX29uY2UuSGFuZGxlT2ZmZXJJKEhhbmRsZU9mZmVySSk7XG5cblxuXG5jb25zdCAgICAgICAgUHJpY2VRdW90ZVNoYXBlPXtcbnF1b3RlQW1vdW50OkFtb3VudFNoYXBlLFxucXVvdGVQYXltZW50Ok0uZXJlZihQYXltZW50U2hhcGUpfTskaM2PX29uY2UuUHJpY2VRdW90ZVNoYXBlKFByaWNlUXVvdGVTaGFwZSk7XG5cbmhhcmRlbihQcmljZVF1b3RlU2hhcGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiS2V5d29yZFNoYXBlIjpbIktleXdvcmRTaGFwZSJdLCJJbnZpdGF0aW9uSGFuZGxlU2hhcGUiOlsiSW52aXRhdGlvbkhhbmRsZVNoYXBlIl0sIkludml0YXRpb25TaGFwZSI6WyJJbnZpdGF0aW9uU2hhcGUiXSwiSW5zdGFuY2VIYW5kbGVTaGFwZSI6WyJJbnN0YW5jZUhhbmRsZVNoYXBlIl0sIkluc3RhbGxhdGlvblNoYXBlIjpbIkluc3RhbGxhdGlvblNoYXBlIl0sIlNlYXRTaGFwZSI6WyJTZWF0U2hhcGUiXSwiQW1vdW50S2V5d29yZFJlY29yZFNoYXBlIjpbIkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSJdLCJBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZFNoYXBlIjpbIkFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkU2hhcGUiXSwiUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUiOlsiUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUiXSwiSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlIjpbIklzc3VlcktleXdvcmRSZWNvcmRTaGFwZSJdLCJJc3N1ZXJQS2V5d29yZFJlY29yZFNoYXBlIjpbIklzc3VlclBLZXl3b3JkUmVjb3JkU2hhcGUiXSwiQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUiOlsiQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUiXSwiSXNzdWVyUmVjb3JkU2hhcGUiOlsiSXNzdWVyUmVjb3JkU2hhcGUiXSwiVGVybXNTaGFwZSI6WyJUZXJtc1NoYXBlIl0sIkluc3RhbmNlUmVjb3JkU2hhcGUiOlsiSW5zdGFuY2VSZWNvcmRTaGFwZSJdLCJIYW5kbGVJIjpbIkhhbmRsZUkiXSwibWFrZUhhbmRsZVNoYXBlIjpbIm1ha2VIYW5kbGVTaGFwZSJdLCJUaW1lclNoYXBlIjpbIlRpbWVyU2hhcGUiXSwiRnVsbFByb3Bvc2FsU2hhcGUiOlsiRnVsbFByb3Bvc2FsU2hhcGUiXSwiUHJvcG9zYWxTaGFwZSI6WyJQcm9wb3NhbFNoYXBlIl0sIkVtcHR5UHJvcG9zYWxTaGFwZSI6WyJFbXB0eVByb3Bvc2FsU2hhcGUiXSwiaXNPbkRlbWFuZEV4aXRSdWxlIjpbImlzT25EZW1hbmRFeGl0UnVsZSJdLCJpc1dhaXZlZEV4aXRSdWxlIjpbImlzV2FpdmVkRXhpdFJ1bGUiXSwiaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGUiOlsiaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGUiXSwiSW52aXRhdGlvbkVsZW1lbnRTaGFwZSI6WyJJbnZpdGF0aW9uRWxlbWVudFNoYXBlIl0sIk9mZmVySGFuZGxlckkiOlsiT2ZmZXJIYW5kbGVySSJdLCJTZWF0SGFuZGxlQWxsb2NhdGlvbnNTaGFwZSI6WyJTZWF0SGFuZGxlQWxsb2NhdGlvbnNTaGFwZSJdLCJab2VNaW50U2hhcGUiOlsiWm9lTWludFNoYXBlIl0sIlpvZU1pbnRJIjpbIlpvZU1pbnRJIl0sIkZlZU1pbnRBY2Nlc3NTaGFwZSI6WyJGZWVNaW50QWNjZXNzU2hhcGUiXSwiRXhpdE9iamVjdEkiOlsiRXhpdE9iamVjdEkiXSwiRXhpdE9iamVjdFNoYXBlIjpbIkV4aXRPYmplY3RTaGFwZSJdLCJJbnN0YW5jZUFkbWluU2hhcGUiOlsiSW5zdGFuY2VBZG1pblNoYXBlIl0sIkluc3RhbmNlQWRtaW5JIjpbIkluc3RhbmNlQWRtaW5JIl0sIkluc3RhbmNlU3RvcmFnZU1hbmFnZXJJS2l0IjpbIkluc3RhbmNlU3RvcmFnZU1hbmFnZXJJS2l0Il0sIkJ1bmRsZUNhcFNoYXBlIjpbIkJ1bmRsZUNhcFNoYXBlIl0sIkJ1bmRsZVNoYXBlIjpbIkJ1bmRsZVNoYXBlIl0sIlVud3JhcHBlZEluc3RhbGxhdGlvblNoYXBlIjpbIlVud3JhcHBlZEluc3RhbGxhdGlvblNoYXBlIl0sIlpvZVN0b3JhZ2VNYW5hZ2VySUtpdCI6WyJab2VTdG9yYWdlTWFuYWdlcklLaXQiXSwiWm9lU2VydmljZUkiOlsiWm9lU2VydmljZUkiXSwiQWRtaW5GYWNldEkiOlsiQWRtaW5GYWNldEkiXSwiU2VhdERhdGFTaGFwZSI6WyJTZWF0RGF0YVNoYXBlIl0sIkhhbmRsZU9mZmVySSI6WyJIYW5kbGVPZmZlckkiXSwiUHJpY2VRdW90ZVNoYXBlIjpbIlByaWNlUXVvdGVTaGFwZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADbdTr/iAEAAIgBAAA0AAAAQGFnb3JpYy96b25lLXYwLjIuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvZHVyYWJsZS5qc3siaW1wb3J0cyI6WyIuL3NyYy9kdXJhYmxlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZHVyYWJsZS5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZHVyYWJsZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABx5Y0iDhEAAA4RAAA4AAAAQGFnb3JpYy96b25lLXYwLjIuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2R1cmFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2Jhc2Utem9uZSJdLCJleHBvcnRzIjpbIm1ha2VEdXJhYmxlWm9uZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixpc1Bhc3NhYmxlLGNhbkJlRHVyYWJsZSxtYWtlU2NhbGFyTWFwU3RvcmUscHJlcGFyZUV4byxwcmVwYXJlRXhvQ2xhc3MscHJlcGFyZUV4b0NsYXNzS2l0LHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUscHJvdmlkZUR1cmFibGVTZXRTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSx3YXRjaFByb21pc2Usa2V5cyxtYWtlT25jZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJpc1Bhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGlzUGFzc2FibGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJjYW5CZUR1cmFibGVcIiwgWyRozY9fYSA9PiAoY2FuQmVEdXJhYmxlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3MgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVTZXRTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZVNldFN0b3JlID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlID0gJGjNj19hKV1dLFtcIndhdGNoUHJvbWlzZVwiLCBbJGjNj19hID0+ICh3YXRjaFByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2Jhc2Utem9uZVwiLCBbW1wiYWdvcmljVmF0RGF0YUtleXNcIiwgWyRozY9fYSA9PiAoa2V5cyA9ICRozY9fYSldXSxbXCJtYWtlT25jZUtpdFwiLCBbJGjNj19hID0+IChtYWtlT25jZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc1N0b3JhYmxlPShzcGVjaW1lbik9PmlzUGFzc2FibGUoc3BlY2ltZW4pJiZjYW5CZUR1cmFibGUoc3BlY2ltZW4pO1xuaGFyZGVuKGlzU3RvcmFibGUpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IGF0dGFjaER1cmFibGVTdG9yZXM9KGdldEJhZ2dhZ2UpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXBTdG9yZT0obGFiZWwsb3B0aW9ucyk9PntcbmNvbnN0IGJhZ2dhZ2U9Z2V0QmFnZ2FnZSgpO1xuY29uc3QgcmV0PXByb3ZpZGVEdXJhYmxlTWFwU3RvcmUoYmFnZ2FnZSxsYWJlbCxvcHRpb25zKTtcbnJldHVybiByZXQ7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNldFN0b3JlPShsYWJlbCxvcHRpb25zKT0+XG5wcm92aWRlRHVyYWJsZVNldFN0b3JlKGdldEJhZ2dhZ2UoKSxsYWJlbCxvcHRpb25zKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3ZWFrU2V0U3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlKGdldEJhZ2dhZ2UoKSxsYWJlbCxvcHRpb25zKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3ZWFrTWFwU3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKGdldEJhZ2dhZ2UoKSxsYWJlbCxvcHRpb25zKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZXR1cm4gRmFyKCdkdXJhYmxlU3RvcmVzJyx7XG4vL1xuZGV0YWNoZWQ6KCk9PmRldGFjaGVkRHVyYWJsZVN0b3JlcyxcbmlzU3RvcmFibGUsXG5tYXBTdG9yZSxcbnNldFN0b3JlLFxud2Vha01hcFN0b3JlLFxud2Vha1NldFN0b3JlfSk7XG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRldGFjaGVkRHVyYWJsZVN0b3Jlcz1hdHRhY2hEdXJhYmxlU3RvcmVzKCgpPT5cbm1ha2VTY2FsYXJNYXBTdG9yZSgnZGV0YWNoZWQnKSk7XG5cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRHVyYWJsZVpvbmU9KGJhZ2dhZ2UsYmFzZUxhYmVsPSdkdXJhYmxlWm9uZScpPT57XG5iYWdnYWdlfHxGYWlsIGBiYWdnYWdlIHJlcXVpcmVkYDtcblxuY29uc3QgYXR0YWNoZWRTdG9yZXM9YXR0YWNoRHVyYWJsZVN0b3JlcygoKT0+YmFnZ2FnZSk7XG5cbmNvbnN0e21ha2VPbmNlLHdyYXBQcm92aWRlcn09bWFrZU9uY2VLaXQoXG5iYXNlTGFiZWwsXG5hdHRhY2hlZFN0b3JlcyxcbmJhZ2dhZ2UpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGV4b0NsYXNzPSguLi5hcmdzKT0+cHJlcGFyZUV4b0NsYXNzKGJhZ2dhZ2UsLi4uYXJncyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbmNvbnN0IGV4b0NsYXNzS2l0PSguLi5hcmdzKT0+cHJlcGFyZUV4b0NsYXNzS2l0KGJhZ2dhZ2UsLi4uYXJncyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZXhvPSguLi5hcmdzKT0+cHJlcGFyZUV4byhiYWdnYWdlLC4uLmFyZ3MpO1xuXG5jb25zdCBzdWJab25lU3RvcmU9d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLm1hcFN0b3JlLGtleXMuem9uZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3ViWm9uZT0obGFiZWwsb3B0aW9ucz17fSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdWJCYWdnYWdlPXN1YlpvbmVTdG9yZShsYWJlbCxvcHRpb25zKTtcbnJldHVybiBtYWtlRHVyYWJsZVpvbmUoc3ViQmFnZ2FnZSwgYCR7YmFzZUxhYmVsfS4ke2xhYmVsfWApO1xuIH07XG5cbnJldHVybiBGYXIoJ2R1cmFibGVab25lJyx7XG5leG86d3JhcFByb3ZpZGVyKGV4byxrZXlzLmV4byksXG5leG9DbGFzczp3cmFwUHJvdmlkZXIoZXhvQ2xhc3Msa2V5cy5leG9DbGFzcyksXG5leG9DbGFzc0tpdDp3cmFwUHJvdmlkZXIoZXhvQ2xhc3NLaXQsa2V5cy5leG9DbGFzc0tpdCksXG5zdWJab25lLFxuXG5tYWtlT25jZSxcbndhdGNoUHJvbWlzZSxcbmRldGFjaGVkOmF0dGFjaGVkU3RvcmVzLmRldGFjaGVkLFxuaXNTdG9yYWJsZTphdHRhY2hlZFN0b3Jlcy5pc1N0b3JhYmxlLFxuXG5tYXBTdG9yZTp3cmFwUHJvdmlkZXIoYXR0YWNoZWRTdG9yZXMubWFwU3RvcmUsa2V5cy5zdG9yZSksXG5zZXRTdG9yZTp3cmFwUHJvdmlkZXIoYXR0YWNoZWRTdG9yZXMuc2V0U3RvcmUsa2V5cy5zdG9yZSksXG53ZWFrTWFwU3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLndlYWtNYXBTdG9yZSxrZXlzLnN0b3JlKSxcbndlYWtTZXRTdG9yZTp3cmFwUHJvdmlkZXIoYXR0YWNoZWRTdG9yZXMud2Vha1NldFN0b3JlLGtleXMuc3RvcmUpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRHVyYWJsZVpvbmUobWFrZUR1cmFibGVab25lKTtcbmhhcmRlbihtYWtlRHVyYWJsZVpvbmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUR1cmFibGVab25lIjpbIm1ha2VEdXJhYmxlWm9uZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABU4lu4xwQAAMcEAAArAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9hcHBseS1sYWJlbGluZy1lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Rocm93LWxhYmVsZWQuanMiXSwiZXhwb3J0cyI6WyJhcHBseUxhYmVsaW5nRXJyb3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxpc1Byb21pc2UsdGhyb3dMYWJlbGVkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3Rocm93LWxhYmVsZWQuanNcIiwgW1tcInRocm93TGFiZWxlZFwiLCBbJGjNj19hID0+ICh0aHJvd0xhYmVsZWQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXBwbHlMYWJlbGluZ0Vycm9yPShmdW5jLGFyZ3MsbGFiZWw9dW5kZWZpbmVkKT0+e1xuaWYobGFiZWw9PT11bmRlZmluZWQpe1xucmV0dXJuIGZ1bmMoLi4uYXJncyk7XG4gfVxubGV0IHJlc3VsdDtcbnRyeXtcbnJlc3VsdD1mdW5jKC4uLmFyZ3MpO1xuIH1jYXRjaChlcnIpe1xudGhyb3dMYWJlbGVkKGVycixsYWJlbCk7XG4gfVxuaWYoaXNQcm9taXNlKHJlc3VsdCkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIEUud2hlbihyZXN1bHQsdW5kZWZpbmVkLChyZWFzb24pPT50aHJvd0xhYmVsZWQocmVhc29uLGxhYmVsKSk7XG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9OyRozY9fb25jZS5hcHBseUxhYmVsaW5nRXJyb3IoYXBwbHlMYWJlbGluZ0Vycm9yKTtcbmhhcmRlbihhcHBseUxhYmVsaW5nRXJyb3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXBwbHlMYWJlbGluZ0Vycm9yIjpbImFwcGx5TGFiZWxpbmdFcnJvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACQBleGXAQAAFwEAAAqAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImZyb21VbmlxdWVFbnRyaWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmcm9tVW5pcXVlRW50cmllcz0oYWxsRW50cmllcyk9PntcbmNvbnN0IGVudHJpZXNBcnJheT1bLi4uYWxsRW50cmllc107XG5jb25zdCByZXN1bHQ9aGFyZGVuKGZyb21FbnRyaWVzKGVudHJpZXNBcnJheSkpO1xuaWYob3duS2V5cyhyZXN1bHQpLmxlbmd0aD09PWVudHJpZXNBcnJheS5sZW5ndGgpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7XG5mb3IoY29uc3RbbmFtZSxfXW9mIGVudHJpZXNBcnJheSl7XG5pZihuYW1lcy5oYXMobmFtZSkpe1xuRmFpbCBgY29sbGlzaW9uIG9uIHByb3BlcnR5IG5hbWUgJHtxKG5hbWUpfTogJHtlbnRyaWVzQXJyYXl9YDtcbiB9XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IGZhaWxlZCB0byBjcmVhdGUgb2JqZWN0IGZyb20gdW5pcXVlIGVudHJpZXNgO1xuIH07JGjNj19vbmNlLmZyb21VbmlxdWVFbnRyaWVzKGZyb21VbmlxdWVFbnRyaWVzKTtcbmhhcmRlbihmcm9tVW5pcXVlRW50cmllcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJmcm9tVW5pcXVlRW50cmllcyI6WyJmcm9tVW5pcXVlRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABRcw2kNwIAADcCAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9pZGVudC1jaGVja2VyLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpZGVudENoZWNrZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpZGVudENoZWNrZXI9KGNvbmQsX2RldGFpbHMpPT5jb25kOyRozY9fb25jZS5pZGVudENoZWNrZXIoaWRlbnRDaGVja2VyKTtcbmhhcmRlbihpZGVudENoZWNrZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWRlbnRDaGVja2VyIjpbImlkZW50Q2hlY2tlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABhWP6GeAIAAHgCAAAmAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9saXN0LWRpZmZlcmVuY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImxpc3REaWZmZXJlbmNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbGlzdERpZmZlcmVuY2U9KGxlZnRMaXN0LHJpZ2h0TGlzdCk9PntcbmNvbnN0IHJpZ2h0U2V0PW5ldyBTZXQocmlnaHRMaXN0KTtcbnJldHVybiBsZWZ0TGlzdC5maWx0ZXIoKGVsZW1lbnQpPT4hcmlnaHRTZXQuaGFzKGVsZW1lbnQpKTtcbiB9OyRozY9fb25jZS5saXN0RGlmZmVyZW5jZShsaXN0RGlmZmVyZW5jZSk7XG5oYXJkZW4obGlzdERpZmZlcmVuY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibGlzdERpZmZlcmVuY2UiOlsibGlzdERpZmZlcmVuY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAD5vAqF0DAABdAwAAKgAAAEBlbmRvL2NvbW1vbi12MS4yLjgvbWFrZS1hcnJheS1pdGVyYXRvci5qc3siaW1wb3J0cyI6WyIuL21ha2UtaXRlcmF0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlQXJyYXlJdGVyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlSXRlcmF0b3I7JGjNj19pbXBvcnRzKFtbXCIuL21ha2UtaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VJdGVyYXRvclwiLCBbJGjNj19hID0+IChtYWtlSXRlcmF0b3IgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBcnJheUl0ZXJhdG9yPShhcnIpPT57XG5jb25zdHtsZW5ndGh9PWFycjtcbmxldCBpPTA7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG4vKiAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZihpPGxlbmd0aCl7XG52YWx1ZT1hcnJbaV07XG5pKz0xO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbi8vXG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWV9KTtcbiB9KTtcbiB9OyRozY9fb25jZS5tYWtlQXJyYXlJdGVyYXRvcihtYWtlQXJyYXlJdGVyYXRvcik7XG5oYXJkZW4obWFrZUFycmF5SXRlcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFycmF5SXRlcmF0b3IiOlsibWFrZUFycmF5SXRlcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVosJ4zkCAAA5AgAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjgvbWFrZS1pdGVyYXRvci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZUl0ZXJhdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJdGVyYXRvcj0obmV4dCk9PntcbmNvbnN0IGl0ZXI9aGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT5pdGVyLFxubmV4dH0pO1xuXG5yZXR1cm4gaXRlcjtcbiB9OyRozY9fb25jZS5tYWtlSXRlcmF0b3IobWFrZUl0ZXJhdG9yKTtcbmhhcmRlbihtYWtlSXRlcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUl0ZXJhdG9yIjpbIm1ha2VJdGVyYXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACtVwZ+AgMAAAIDAAAhAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9vYmplY3QtbWFwLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJvYmplY3RNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIGNvbnN0e2VudHJpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgb2JqZWN0TWFwPShvcmlnaW5hbCxtYXBGbik9PntcbmNvbnN0IGVudHM9ZW50cmllcyhvcmlnaW5hbCk7XG5jb25zdCBtYXBFbnRzPWVudHMubWFwKFxuKFtrLHZdKT0+LyogICAgICAgICAgICAgICAgICAgICAgICovW2ssbWFwRm4odixrKV0pO1xuXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2hhcmRlbihmcm9tRW50cmllcyhtYXBFbnRzKSkpO1xuIH07JGjNj19vbmNlLm9iamVjdE1hcChvYmplY3RNYXApO1xuaGFyZGVuKG9iamVjdE1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJvYmplY3RNYXAiOlsib2JqZWN0TWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADufX47hAwAA4QMAACYAAABAZW5kby9jb21tb24tdjEuMi44L29iamVjdC1tZXRhLW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWV0YU1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxjcmVhdGUsZnJvbUVudHJpZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgb2JqZWN0TWV0YU1hcD0oXG5vcmlnaW5hbCxcbm1ldGFNYXBGbixcbnByb3RvPU9iamVjdC5wcm90b3R5cGUpPT5cbntcbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob3JpZ2luYWwpO1xuY29uc3Qga2V5cz1vd25LZXlzKG9yaWdpbmFsKTtcblxuY29uc3QgZGVzY0VudHJpZXM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xua2V5cy5cbm1hcCgoa2V5KT0+W2tleSxtZXRhTWFwRm4oZGVzY3Nba2V5XSxrZXkpXSkuXG5maWx0ZXIoKFtfa2V5LG9wdERlc2NdKT0+b3B0RGVzYyE9PXVuZGVmaW5lZCk7XG5cbnJldHVybiBoYXJkZW4oY3JlYXRlKHByb3RvLGZyb21FbnRyaWVzKGRlc2NFbnRyaWVzKSkpO1xuIH07JGjNj19vbmNlLm9iamVjdE1ldGFNYXAob2JqZWN0TWV0YU1hcCk7XG5oYXJkZW4ob2JqZWN0TWV0YU1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJvYmplY3RNZXRhTWFwIjpbIm9iamVjdE1ldGFNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAwgIay+EDAADhAwAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjgvdGhyb3ctbGFiZWxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJ0aHJvd0xhYmVsZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRocm93TGFiZWxlZD0oXG5pbm5lckVycixcbmxhYmVsLFxuZXJyQ29uc3RydWN0b3I9dW5kZWZpbmVkLFxub3B0aW9ucz11bmRlZmluZWQpPT5cbntcbmlmKHR5cGVvZiBsYWJlbD09PSdudW1iZXInKXtcbmxhYmVsPSBgWyR7bGFiZWx9XWA7XG4gfVxuY29uc3Qgb3V0ZXJFcnI9bWFrZUVycm9yKFxuIGAke2xhYmVsfTogJHtpbm5lckVyci5tZXNzYWdlfWAsXG5lcnJDb25zdHJ1Y3Rvcixcbm9wdGlvbnMpO1xuXG5hbm5vdGF0ZUVycm9yKG91dGVyRXJyLFggYENhdXNlZCBieSAke2lubmVyRXJyfWApO1xudGhyb3cgb3V0ZXJFcnI7XG4gfTskaM2PX29uY2UudGhyb3dMYWJlbGVkKHRocm93TGFiZWxlZCk7XG5oYXJkZW4odGhyb3dMYWJlbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InRocm93TGFiZWxlZCI6WyJ0aHJvd0xhYmVsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxRjnOpQBAACUAQAAIQAAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOC9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbnYtb3B0aW9ucy5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL2Vudi1vcHRpb25zLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9lbnYtb3B0aW9ucy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACSt0d+7A0AAOwNAAArAAAAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44L3NyYy9lbnYtb3B0aW9ucy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyIsImdldEVudmlyb25tZW50T3B0aW9uIiwiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCIsIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5cbmNvbnN0e2ZyZWV6ZX09T2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5cbi8vXG4vL1xuY29uc3QgdW5jdXJyeVRoaXM9XG4oZm4pPT5cbihyZWNlaXZlciwuLi5hcmdzKT0+XG5hcHBseShmbixyZWNlaXZlcixhcmdzKTtcbmNvbnN0IGFycmF5UHVzaD11bmN1cnJ5VGhpcyhBcnJheS5wcm90b3R5cGUucHVzaCk7XG5jb25zdCBhcnJheUluY2x1ZGVzPXVuY3VycnlUaGlzKEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyk7XG5jb25zdCBzdHJpbmdTcGxpdD11bmN1cnJ5VGhpcyhTdHJpbmcucHJvdG90eXBlLnNwbGl0KTtcblxuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuY29uc3QgRmFpbD0obGl0ZXJhbHMsLi4uYXJncyk9PntcbmxldCBtc2c9bGl0ZXJhbHNbMF07XG5mb3IobGV0IGk9MDtpPGFyZ3MubGVuZ3RoO2krPTEpe1xubXNnPSBgJHttc2d9JHthcmdzW2ldfSR7bGl0ZXJhbHNbaSsxXX1gO1xuIH1cbnRocm93IEVycm9yKG1zZyk7XG4gfTtcblxuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbnZpcm9ubWVudENhcHRvcj0oYUdsb2JhbCxkcm9wTmFtZXM9ZmFsc2UpPT57XG5jb25zdCBjYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXM9W107XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGdldEVudmlyb25tZW50T3B0aW9uPShcbm9wdGlvbk5hbWUsXG5kZWZhdWx0U2V0dGluZyxcbm9wdE90aGVyVmFsdWVzPXVuZGVmaW5lZCk9Plxue1xudHlwZW9mIG9wdGlvbk5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gbmFtZSAke3Eob3B0aW9uTmFtZSl9IG11c3QgYmUgYSBzdHJpbmcuYDtcbnR5cGVvZiBkZWZhdWx0U2V0dGluZz09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBkZWZhdWx0IHNldHRpbmcgJHtxKFxuZGVmYXVsdFNldHRpbmcpXG4gfSBtdXN0IGJlIGEgc3RyaW5nLmA7XG5cbi8qICAgICAgICAgICAgICAgICAqL1xubGV0IHNldHRpbmc9ZGVmYXVsdFNldHRpbmc7XG5jb25zdCBnbG9iYWxQcm9jZXNzPWFHbG9iYWwucHJvY2Vzc3x8dW5kZWZpbmVkO1xuY29uc3QgZ2xvYmFsRW52PVxudHlwZW9mIGdsb2JhbFByb2Nlc3M9PT0nb2JqZWN0JyYmZ2xvYmFsUHJvY2Vzcy5lbnZ8fHVuZGVmaW5lZDtcbmlmKHR5cGVvZiBnbG9iYWxFbnY9PT0nb2JqZWN0Jyl7XG5pZihvcHRpb25OYW1lIGluIGdsb2JhbEVudil7XG5pZighZHJvcE5hbWVzKXtcbmFycmF5UHVzaChjYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXMsb3B0aW9uTmFtZSk7XG4gfVxuY29uc3Qgb3B0aW9uVmFsdWU9Z2xvYmFsRW52W29wdGlvbk5hbWVdO1xuLy9cbnR5cGVvZiBvcHRpb25WYWx1ZT09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBuYW1lZCAke3EoXG5vcHRpb25OYW1lKVxuIH0sIGlmIHByZXNlbnQsIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHZhbHVlLCBnb3QgJHtxKFxub3B0aW9uVmFsdWUpXG4gfWA7XG5zZXR0aW5nPW9wdGlvblZhbHVlO1xuIH1cbiB9XG5vcHRPdGhlclZhbHVlcz09PXVuZGVmaW5lZHx8XG5zZXR0aW5nPT09ZGVmYXVsdFNldHRpbmd8fFxuYXJyYXlJbmNsdWRlcyhvcHRPdGhlclZhbHVlcyxzZXR0aW5nKXx8XG5GYWlsIGBVbnJlY29nbml6ZWQgJHtxKG9wdGlvbk5hbWUpfSB2YWx1ZSAke3EoXG5zZXR0aW5nKVxuIH0uIEV4cGVjdGVkIG9uZSBvZiAke3EoW2RlZmF1bHRTZXR0aW5nLC4uLm9wdE90aGVyVmFsdWVzXSl9YDtcbnJldHVybiBzZXR0aW5nO1xuIH07XG5mcmVlemUoZ2V0RW52aXJvbm1lbnRPcHRpb24pO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0PShvcHRpb25OYW1lKT0+e1xuY29uc3Qgb3B0aW9uPWdldEVudmlyb25tZW50T3B0aW9uKG9wdGlvbk5hbWUsJycpO1xucmV0dXJuIGZyZWV6ZShvcHRpb249PT0nJz9bXTpzdHJpbmdTcGxpdChvcHRpb24sJywnKSk7XG4gfTtcbmZyZWV6ZShnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KTtcblxuY29uc3QgZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcz0ob3B0aW9uTmFtZSxlbGVtZW50KT0+XG5hcnJheUluY2x1ZGVzKGdldEVudmlyb25tZW50T3B0aW9uc0xpc3Qob3B0aW9uTmFtZSksZWxlbWVudCk7XG5cbmNvbnN0IGdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcz0oKT0+e1xucmV0dXJuIGZyZWV6ZShbLi4uY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzXSk7XG4gfTtcbmZyZWV6ZShnZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXMpO1xuXG5yZXR1cm4gZnJlZXplKHtcbmdldEVudmlyb25tZW50T3B0aW9uLFxuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCxcbmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMsXG5nZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXN9KTtcblxuIH07JGjNj19vbmNlLm1ha2VFbnZpcm9ubWVudENhcHRvcihtYWtlRW52aXJvbm1lbnRDYXB0b3IpO1xuZnJlZXplKG1ha2VFbnZpcm9ubWVudENhcHRvcik7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICB7XG5nZXRFbnZpcm9ubWVudE9wdGlvbixcbmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QsXG5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzfT1cbm1ha2VFbnZpcm9ubWVudENhcHRvcihnbG9iYWxUaGlzLHRydWUpOyRozY9fb25jZS5nZXRFbnZpcm9ubWVudE9wdGlvbihnZXRFbnZpcm9ubWVudE9wdGlvbik7JGjNj19vbmNlLmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCk7JGjNj19vbmNlLmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRW52aXJvbm1lbnRDYXB0b3IiOlsibWFrZUVudmlyb25tZW50Q2FwdG9yIl0sImdldEVudmlyb25tZW50T3B0aW9uIjpbImdldEVudmlyb25tZW50T3B0aW9uIl0sImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiOlsiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCJdLCJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIjpbImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA/HBpMd8HAADfBwAAHAAAAEBlbmRvL2Vycm9ycy12MS4yLjgvaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkZhaWwiLCJYIiwiYW5ub3RhdGVFcnJvciIsImFzc2VydCIsImIiLCJiYXJlIiwibWFrZUVycm9yIiwibm90ZSIsInEiLCJxdW90ZSIsInJlZGFjdGVkIiwidGhyb3dSZWRhY3RlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cblxuY29uc3QgZ2xvYmFsQXNzZXJ0PWdsb2JhbFRoaXMuYXNzZXJ0O1xuXG5pZihnbG9iYWxBc3NlcnQ9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbml0aWFsaXplIEBlbmRvL2Vycm9ycywgbWlzc2luZyBnbG9iYWxUaGlzLmFzc2VydCwgaW1wb3J0ICdzZXMnIGJlZm9yZSAnQGVuZG8vZXJyb3JzJ2ApO1xuXG4gfVxuXG5jb25zdCBtaXNzaW5nPS8qICAgICAgICAgICAgICAgICovW1xuJ3R5cGVvZicsXG4nZXJyb3InLFxuJ2ZhaWwnLFxuJ2VxdWFsJyxcbidzdHJpbmcnLFxuJ25vdGUnLFxuJ2RldGFpbHMnLFxuJ0ZhaWwnLFxuJ3F1b3RlJyxcbi8vXG4vL1xuLy9cbi8vXG4nbWFrZUFzc2VydCddLlxuZmlsdGVyKChuYW1lKT0+Z2xvYmFsQXNzZXJ0W25hbWVdPT09dW5kZWZpbmVkKTtcbmlmKG1pc3NpbmcubGVuZ3RoPjApe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbml0aWFsaXplIEBlbmRvL2Vycm9ycywgbWlzc2luZyBnbG9iYWxUaGlzLmFzc2VydCBtZXRob2RzICR7bWlzc2luZy5qb2luKFxuJywgJylcbiB9YCk7XG5cbiB9XG5cbi8vXG4vL1xuLy9cbmNvbnN0e1xuYmFyZSxcbmRldGFpbHM6cmVkYWN0ZWQsXG5lcnJvcjptYWtlRXJyb3IsXG5GYWlsOnRocm93UmVkYWN0ZWQsXG5tYWtlQXNzZXJ0Ol9vbWl0dGVkTWFrZUFzc2VydCxcbm5vdGUsXG5xdW90ZSxcbi4uLmFzc2VydGlvbnN9PVxuZ2xvYmFsQXNzZXJ0O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuJGjNj19vbmNlLnJlZGFjdGVkKHJlZGFjdGVkKTskaM2PX29uY2UubWFrZUVycm9yKG1ha2VFcnJvcik7JGjNj19vbmNlLnRocm93UmVkYWN0ZWQodGhyb3dSZWRhY3RlZCk7JGjNj19vbmNlLm5vdGUobm90ZSk7JGjNj19vbmNlLnF1b3RlKHF1b3RlKTtjb25zdCBhc3NlcnQ9KHZhbHVlLG9wdERldGFpbHMsZXJyQ29udHJ1Y3RvcixvcHRpb25zKT0+XG5nbG9iYWxBc3NlcnQodmFsdWUsb3B0RGV0YWlscyxlcnJDb250cnVjdG9yLG9wdGlvbnMpOyRozY9fb25jZS5hc3NlcnQoYXNzZXJ0KTtcbk9iamVjdC5hc3NpZ24oYXNzZXJ0LGFzc2VydGlvbnMpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBiYXJlT3JRdW90ZT1iYXJlfHxxdW90ZTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5iYXJlT3JRdW90ZShiYXJlT3JRdW90ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJyZWRhY3RlZCI6WyJyZWRhY3RlZCJdLCJYIjpbInJlZGFjdGVkIl0sIm1ha2VFcnJvciI6WyJtYWtlRXJyb3IiXSwidGhyb3dSZWRhY3RlZCI6WyJ0aHJvd1JlZGFjdGVkIl0sIkZhaWwiOlsidGhyb3dSZWRhY3RlZCJdLCJub3RlIjpbIm5vdGUiXSwiYW5ub3RhdGVFcnJvciI6WyJub3RlIl0sInF1b3RlIjpbInF1b3RlIl0sInEiOlsicXVvdGUiXSwiYXNzZXJ0IjpbImFzc2VydCJdLCJiYXJlIjpbImJhcmVPclF1b3RlIl0sImIiOlsiYmFyZU9yUXVvdGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAfl1VK6UQAAClEAAAIwAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9FLmpzeyJpbXBvcnRzIjpbIi4vdHJhY2stdHVybnMuanMiLCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6WyJkZWZhdWx0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHRyYWNrVHVybnMsbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyOyRozY9faW1wb3J0cyhbW1wiLi90cmFjay10dXJucy5qc1wiLCBbW1widHJhY2tUdXJuc1wiLCBbJGjNj19hID0+ICh0cmFja1R1cm5zID0gJGjNj19hKV1dXV0sW1wiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtbXCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXJcIiwgWyRozY9fYSA9PiAobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsLGVycm9yOm1ha2VFcnJvcn09YXNzZXJ0O1xuY29uc3R7YXNzaWduLGNyZWF0ZX09T2JqZWN0O1xuXG4vKlxuXG4gKi9cblxuY29uc3Qgb25TZW5kPW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19TRU5EX0JSRUFLUE9JTlRTJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBiYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyPXtcbnNldChfdGFyZ2V0LF9wcm9wLF92YWx1ZSl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbmlzRXh0ZW5zaWJsZShfdGFyZ2V0KXtcbnJldHVybiBmYWxzZTtcbiB9LFxuc2V0UHJvdG90eXBlT2YoX3RhcmdldCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5kZWxldGVQcm9wZXJ0eShfdGFyZ2V0LF9wcm9wKXtcbnJldHVybiBmYWxzZTtcbiB9fTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFUHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltwcm9wZXJ0eUtleV0oLi4uYXJncyl7XG5pZih0aGlzIT09cmVjZWl2ZXIpe1xuLy9cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5yZWplY3QoXG5tYWtlRXJyb3IoXG5YIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShwcm9wZXJ0eUtleSl9XCIgbWV0aG9kIG9mIEUoJHtxKFxucmVjaXBpZW50KVxuIH0pYCkpO1xuXG5cbiB9XG5cbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kKHJlY2lwaWVudCxwcm9wZXJ0eUtleSxhcmdzKTtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5yZXR1cm4gSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJnQXJyYXkpO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXI9KHJlY2lwaWVudCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5nZXQ6KF90YXJnZXQscHJvcGVydHlLZXkscmVjZWl2ZXIpPT57XG5yZXR1cm4gaGFyZGVuKFxue1xuLy9cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuLy9cbnRoaXM9PT1yZWNlaXZlcnx8XG5GYWlsIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShcbnByb3BlcnR5S2V5KVxuIH1cIiBtZXRob2Qgb2YgRS5zZW5kT25seSgke3EocmVjaXBpZW50KX0pYDtcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlNZXRob2RTZW5kT25seShyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbi8vXG59W3Byb3BlcnR5S2V5XSk7XG5cbiB9LFxuYXBwbHk6KF90YXJnZXQsX3RoaXNBcmcsYXJnc0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5IYW5kbGVkUHJvbWlzZS5hcHBseUZ1bmN0aW9uU2VuZE9ubHkocmVjaXBpZW50LGFyZ3NBcnJheSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFR2V0UHJveHlIYW5kbGVyPSh4LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmhhczooX3RhcmdldCxfcHJvcCk9PnRydWUsXG5nZXQ6KF90YXJnZXQscHJvcCk9PkhhbmRsZWRQcm9taXNlLmdldCh4LHByb3ApfSk7XG5cblxuLypcblxuICovXG5jb25zdCBtYWtlRT0oSGFuZGxlZFByb21pc2UpPT57XG5yZXR1cm4gaGFyZGVuKFxuYXNzaWduKFxuLypcblxuXG5cblxuXG5cblxuICAgICAgICovXG4vL1xuKHgpPT5oYXJkZW4obmV3IFByb3h5KCgpPT57IH0sbWFrZUVQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcbntcbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuZ2V0Oih4KT0+XG4vL1xuaGFyZGVuKFxubmV3IFByb3h5KGNyZWF0ZShudWxsKSxtYWtlRUdldFByb3h5SGFuZGxlcih4LEhhbmRsZWRQcm9taXNlKSkpLFxuXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5yZXNvbHZlOkhhbmRsZWRQcm9taXNlLnJlc29sdmUsXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5zZW5kT25seTooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eSgoKT0+eyB9LG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xud2hlbjooeCxvbmZ1bGZpbGxlZCxvbnJlamVjdGVkKT0+XG5IYW5kbGVkUHJvbWlzZS5yZXNvbHZlKHgpLnRoZW4oXG4uLi50cmFja1R1cm5zKFtvbmZ1bGZpbGxlZCxvbnJlamVjdGVkXSkpfSkpO1xuXG5cblxuXG4gfTtcblxuY29uc3R7ZGVmYXVsdDokY82PX2RlZmF1bHR9PXtkZWZhdWx0Om1ha2VFfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9leHBvcnRzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAQIOOsqgwAAKoMAAAnAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL2xvY2FsLmpzeyJpbXBvcnRzIjpbIi4vbWVzc2FnZS1icmVha3BvaW50cy5qcyJdLCJleHBvcnRzIjpbImdldE1ldGhvZE5hbWVzIiwibG9jYWxBcHBseUZ1bmN0aW9uIiwibG9jYWxBcHBseU1ldGhvZCIsImxvY2FsR2V0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcjskaM2PX2ltcG9ydHMoW1tcIi4vbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbW1wibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyXCIsIFskaM2PX2EgPT4gKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e2RldGFpbHM6WCxxdW90ZTpxLEZhaWx9PWFzc2VydDtcblxuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxnZXRQcm90b3R5cGVPZixmcmVlemV9PU9iamVjdDtcbmNvbnN0e2FwcGx5LG93bktleXN9PVJlZmxlY3Q7XG5cbmNvbnN0IG50eXBlb2Y9KHNwZWNpbWVuKT0+c3BlY2ltZW49PT1udWxsPydudWxsJzp0eXBlb2Ygc3BlY2ltZW47XG5cbmNvbnN0IG9uRGVsaXZlcnk9bWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKCdFTkRPX0RFTElWRVJZX0JSRUFLUE9JTlRTJyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29tcGFyZVN0cmluZ2lmaWVkPShhLGIpPT57XG5pZih0eXBlb2YgYT09PXR5cGVvZiBiKXtcbmNvbnN0IGxlZnQ9U3RyaW5nKGEpO1xuY29uc3QgcmlnaHQ9U3RyaW5nKGIpO1xuLy9cbnJldHVybiBsZWZ0PHJpZ2h0Py0xOmxlZnQ+cmlnaHQ/MTowO1xuIH1cbmlmKHR5cGVvZiBhPT09J3N5bWJvbCcpe1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N0cmluZycpO1xucmV0dXJuLTE7XG4gfVxuYXNzZXJ0KHR5cGVvZiBhPT09J3N0cmluZycpO1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N5bWJvbCcpO1xucmV0dXJuIDE7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2ROYW1lcz0odmFsKT0+e1xubGV0IGxheWVyPXZhbDtcbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTsvL1xud2hpbGUobGF5ZXIhPT1udWxsJiZsYXllciE9PU9iamVjdC5wcm90b3R5cGUpe1xuLy9cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobGF5ZXIpO1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duS2V5cyhkZXNjcykpe1xuLy9cbi8vXG5pZih0eXBlb2YgdmFsW25hbWVdPT09J2Z1bmN0aW9uJyl7XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxuIH1cbmlmKCFpc09iamVjdCh2YWwpKXtcbmJyZWFrO1xuIH1cbmxheWVyPWdldFByb3RvdHlwZU9mKGxheWVyKTtcbiB9XG5yZXR1cm4gaGFyZGVuKFsuLi5uYW1lc10uc29ydChjb21wYXJlU3RyaW5naWZpZWQpKTtcbiB9O1xuLy9cbi8vXG4kaM2PX29uY2UuZ2V0TWV0aG9kTmFtZXMoZ2V0TWV0aG9kTmFtZXMpO2ZyZWV6ZShnZXRNZXRob2ROYW1lcyk7XG5cbmNvbnN0ICAgICAgICBsb2NhbEFwcGx5RnVuY3Rpb249KHJlY2lwaWVudCxhcmdzKT0+e1xudHlwZW9mIHJlY2lwaWVudD09PSdmdW5jdGlvbid8fFxuYXNzZXJ0LmZhaWwoXG5YIGBDYW5ub3QgaW52b2tlIHRhcmdldCBhcyBhIGZ1bmN0aW9uOyB0eXBlb2YgdGFyZ2V0IGlzICR7cShcbm50eXBlb2YocmVjaXBpZW50KSlcbiB9YCxcblR5cGVFcnJvcik7XG5cbmlmKG9uRGVsaXZlcnkmJm9uRGVsaXZlcnkuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuY29uc3QgcmVzdWx0PWFwcGx5KHJlY2lwaWVudCx1bmRlZmluZWQsYXJncyk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmxvY2FsQXBwbHlGdW5jdGlvbihsb2NhbEFwcGx5RnVuY3Rpb24pO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseU1ldGhvZD0ocmVjaXBpZW50LG1ldGhvZE5hbWUsYXJncyk9PntcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWR8fG1ldGhvZE5hbWU9PT1udWxsKXtcbi8vXG5yZXR1cm4gbG9jYWxBcHBseUZ1bmN0aW9uKHJlY2lwaWVudCxhcmdzKTtcbiB9XG5pZihyZWNpcGllbnQ9PT11bmRlZmluZWR8fHJlY2lwaWVudD09PW51bGwpe1xuYXNzZXJ0LmZhaWwoXG5YIGBDYW5ub3QgZGVsaXZlciAke3EobWV0aG9kTmFtZSl9IHRvIHRhcmdldDsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZm49cmVjaXBpZW50W21ldGhvZE5hbWVdO1xuaWYoZm49PT11bmRlZmluZWQpe1xuYXNzZXJ0LmZhaWwoXG5YIGB0YXJnZXQgaGFzIG5vIG1ldGhvZCAke3EobWV0aG9kTmFtZSl9LCBoYXMgJHtxKFxuZ2V0TWV0aG9kTmFtZXMocmVjaXBpZW50KSlcbiB9YCxcblR5cGVFcnJvcik7XG5cbiB9XG5jb25zdCBmdHlwZT1udHlwZW9mKGZuKTtcbnR5cGVvZiBmbj09PSdmdW5jdGlvbid8fFxuRmFpbCBgaW52b2tlZCBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSBpcyBub3QgYSBmdW5jdGlvbjsgaXQgaXMgYSAke3EoXG5mdHlwZSlcbiB9YDtcbmlmKG9uRGVsaXZlcnkmJm9uRGVsaXZlcnkuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsbWV0aG9kTmFtZSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShmbixyZWNpcGllbnQsYXJncyk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmxvY2FsQXBwbHlNZXRob2QobG9jYWxBcHBseU1ldGhvZCk7XG5cbmNvbnN0ICAgICAgICBsb2NhbEdldD0odCxrZXkpPT50W2tleV07JGjNj19vbmNlLmxvY2FsR2V0KGxvY2FsR2V0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldE1ldGhvZE5hbWVzIjpbImdldE1ldGhvZE5hbWVzIl0sImxvY2FsQXBwbHlGdW5jdGlvbiI6WyJsb2NhbEFwcGx5RnVuY3Rpb24iXSwibG9jYWxBcHBseU1ldGhvZCI6WyJsb2NhbEFwcGx5TWV0aG9kIl0sImxvY2FsR2V0IjpbImxvY2FsR2V0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAGOcEzpDAAA6QwAADUAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyJdLCJleHBvcnRzIjpbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjNj19hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e3F1b3RlOnEsRmFpbH09YXNzZXJ0O1xuXG5jb25zdHtoYXNPd24sZnJlZXplLGVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuLypcblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgaXNKU09OUmVjb3JkPSh2YWwpPT5cbnR5cGVvZiB2YWw9PT0nb2JqZWN0JyYmdmFsIT09bnVsbCYmIUFycmF5LmlzQXJyYXkodmFsKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2ltcGxpZnlUYWc9KHRhZyk9PntcbmZvcihjb25zdCBwcmVmaXggb2ZbJ0FsbGVnZWQ6ICcsJ0RlYnVnTmFtZTogJ10pe1xuaWYodGFnLnN0YXJ0c1dpdGgocHJlZml4KSl7XG5yZXR1cm4gdGFnLnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuIH1cbiB9XG5yZXR1cm4gdGFnO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyPShvcHRpb25OYW1lKT0+e1xubGV0IGJyZWFrcG9pbnRzPUpTT04ucGFyc2UoZ2V0RW52aXJvbm1lbnRPcHRpb24ob3B0aW9uTmFtZSwnbnVsbCcpKTtcblxuaWYoYnJlYWtwb2ludHM9PT1udWxsKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBicmVha3BvaW50c1RhYmxlO1xuXG5jb25zdCBnZXRCcmVha3BvaW50cz0oKT0+YnJlYWtwb2ludHM7XG5mcmVlemUoZ2V0QnJlYWtwb2ludHMpO1xuXG5jb25zdCBzZXRCcmVha3BvaW50cz0obmV3QnJlYWtwb2ludHM9YnJlYWtwb2ludHMpPT57XG5pc0pTT05SZWNvcmQobmV3QnJlYWtwb2ludHMpfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uIHRvIGJlIGEgSlNPTiBicmVha3BvaW50cyByZWNvcmRgO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBuZXdCcmVha3BvaW50c1RhYmxlPXtfX3Byb3RvX186bnVsbH07XG5cbmZvcihjb25zdFt0YWcsbWV0aG9kQlBzXW9mIGVudHJpZXMobmV3QnJlYWtwb2ludHMpKXtcbnRhZz09PXNpbXBsaWZ5VGFnKHRhZyl8fFxuRmFpbCBgSnVzdCB1c2Ugc2ltcGxlIHRhZyAke3Eoc2ltcGxpZnlUYWcodGFnKSl9IHJhdGhlciB0aGFuICR7cSh0YWcpfWA7XG5pc0pTT05SZWNvcmQobWV0aG9kQlBzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cShcbnRhZylcbiB9IHRvIGJlIGEgSlNPTiBtZXRob2RzIGJyZWFrcG9pbnRzIHJlY29yZGA7XG5mb3IoY29uc3RbbWV0aG9kTmFtZSxjb3VudF1vZiBlbnRyaWVzKG1ldGhvZEJQcykpe1xuY291bnQ9PT0nKid8fFxudHlwZW9mIGNvdW50PT09J251bWJlcicmJlxuTnVtYmVyLmlzU2FmZUludGVnZXIoY291bnQpJiZcbmNvdW50Pj0wfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uJ3MgJHtxKHRhZyl9LiR7cShcbm1ldGhvZE5hbWUpXG4gfSB0byBiZSBcIipcIiBvciBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyYDtcblxuY29uc3QgY2xhc3NCUHM9aGFzT3duKG5ld0JyZWFrcG9pbnRzVGFibGUsbWV0aG9kTmFtZSk/XG5uZXdCcmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdOlxubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXT17XG4vL1xuX19wcm90b19fOm51bGx9O1xuXG5jbGFzc0JQc1t0YWddPWNvdW50O1xuIH1cbiB9XG5icmVha3BvaW50cz1uZXdCcmVha3BvaW50cztcbmJyZWFrcG9pbnRzVGFibGU9bmV3QnJlYWtwb2ludHNUYWJsZTtcbiB9O1xuZnJlZXplKHNldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2hvdWxkQnJlYWtwb2ludD0ocmVjaXBpZW50LG1ldGhvZE5hbWUpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IGNsYXNzQlBzPWJyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV18fGJyZWFrcG9pbnRzVGFibGVbJyonXTtcbmlmKGNsYXNzQlBzPT09dW5kZWZpbmVkKXtcbnJldHVybiBmYWxzZTtcbiB9XG5sZXQgdGFnPXNpbXBsaWZ5VGFnKHJlY2lwaWVudFtTeW1ib2wudG9TdHJpbmdUYWddKTtcbmxldCBjb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xudGFnPScqJztcbmNvdW50PWNsYXNzQlBzW3RhZ107XG5pZihjb3VudD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbmlmKGNvdW50PT09JyonKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNvdW50PT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5hc3NlcnQodHlwZW9mIGNvdW50PT09J251bWJlcicmJmNvdW50Pj0xKTtcbmNsYXNzQlBzW3RhZ109Y291bnQtMTtcbnJldHVybiBmYWxzZTtcbiB9O1xuZnJlZXplKHNob3VsZEJyZWFrcG9pbnQpO1xuXG5jb25zdCBicmVha3BvaW50VGVzdGVyPWZyZWV6ZSh7XG5nZXRCcmVha3BvaW50cyxcbnNldEJyZWFrcG9pbnRzLFxuc2hvdWxkQnJlYWtwb2ludH0pO1xuXG5icmVha3BvaW50VGVzdGVyLnNldEJyZWFrcG9pbnRzKCk7XG5yZXR1cm4gYnJlYWtwb2ludFRlc3RlcjtcbiB9OyRozY9fb25jZS5tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbmZyZWV6ZShtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIjpbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAZbLtFMwMAADMDAAApAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL25vLXNoaW0uanN7ImltcG9ydHMiOlsiLi9FLmpzIiwiLi9leHBvcnRzLmpzIl0sImV4cG9ydHMiOlsiRSIsIkhhbmRsZWRQcm9taXNlIl0sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZUU7JGjNj19pbXBvcnRzKFtbXCIuL0UuanNcIiwgW1tcImRlZmF1bHRcIiwgWyRozY9fYSA9PiAobWFrZUUgPSAkaM2PX2EpXV1dXSxbXCIuL2V4cG9ydHMuanNcIiwgW11dXSk7ICAgXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBocD1IYW5kbGVkUHJvbWlzZTskaM2PX29uY2UuaHAoaHApO1xuY29uc3QgICAgICAgIEU9bWFrZUUoaHApOyRozY9fb25jZS5FKEUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiSGFuZGxlZFByb21pc2UiOlsiaHAiXSwiRSI6WyJFIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIaopsdfCQAAXwkAAC0AAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvdHJhY2stdHVybnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJ0cmFja1R1cm5zIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldEVudmlyb25tZW50T3B0aW9uLGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRozY9fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaM2PX2EpXV0sW1wiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc1wiLCBbJGjNj19hID0+IChlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5sZXQgaGlkZGVuUHJpb3JFcnJvcjtcbmxldCBoaWRkZW5DdXJyZW50VHVybj0wO1xubGV0IGhpZGRlbkN1cnJlbnRFdmVudD0wO1xuXG4vL1xuY29uc3QgVkVSQk9TRT1lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKCdERUJVRycsJ3RyYWNrLXR1cm5zJyk7XG5cbi8vXG4vL1xuY29uc3QgRU5BQkxFRD1cbmdldEVudmlyb25tZW50T3B0aW9uKCdUUkFDS19UVVJOUycsJ2Rpc2FibGVkJyxbJ2VuYWJsZWQnXSk9PT0nZW5hYmxlZCc7XG5cbi8vXG4vL1xuLy9cbi8vXG5cbmNvbnN0IGFkZFJlamVjdGlvbk5vdGU9KGRldGFpbHNOb3RlKT0+KHJlYXNvbik9PntcbmlmKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUocmVhc29uLGRldGFpbHNOb3RlKTtcbiB9XG5pZihWRVJCT1NFKXtcbmNvbnNvbGUubG9nKCdSRUpFQ1RFRCBhdCB0b3Agb2YgZXZlbnQgbG9vcCcscmVhc29uKTtcbiB9XG4gfTtcblxuY29uc3Qgd3JhcEZ1bmN0aW9uPVxuKGZ1bmMsc2VuZGluZ0Vycm9yLFgpPT5cbiguLi5hcmdzKT0+e1xuaGlkZGVuUHJpb3JFcnJvcj1zZW5kaW5nRXJyb3I7XG5oaWRkZW5DdXJyZW50VHVybis9MTtcbmhpZGRlbkN1cnJlbnRFdmVudD0wO1xudHJ5e1xubGV0IHJlc3VsdDtcbnRyeXtcbnJlc3VsdD1mdW5jKC4uLmFyZ3MpO1xuIH1jYXRjaChlcnIpe1xuaWYoZXJyIGluc3RhbmNlb2YgRXJyb3Ipe1xuZ2xvYmFsVGhpcy5hc3NlcnQubm90ZShcbmVycixcblggYFRocm93biBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnVEhST1dOIHRvIHRvcCBvZiBldmVudCBsb29wJyxlcnIpO1xuIH1cbnRocm93IGVycjtcbiB9XG4vL1xuY29uc3QgZGV0YWlsc05vdGU9WCBgUmVqZWN0aW9uIGZyb206ICR7aGlkZGVuUHJpb3JFcnJvcn06JHtoaWRkZW5DdXJyZW50VHVybn0uJHtoaWRkZW5DdXJyZW50RXZlbnR9YDtcblByb21pc2UucmVzb2x2ZShyZXN1bHQpLmNhdGNoKGFkZFJlamVjdGlvbk5vdGUoZGV0YWlsc05vdGUpKTtcbnJldHVybiByZXN1bHQ7XG4gfWZpbmFsbHl7XG5oaWRkZW5QcmlvckVycm9yPXVuZGVmaW5lZDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdHJhY2tUdXJucz0oZnVuY3MpPT57XG5pZighRU5BQkxFRHx8dHlwZW9mIGdsb2JhbFRoaXM9PT0ndW5kZWZpbmVkJ3x8IWdsb2JhbFRoaXMuYXNzZXJ0KXtcbnJldHVybiBmdW5jcztcbiB9XG5jb25zdHtkZXRhaWxzOlgsbm90ZTphbm5vdGF0ZUVycm9yfT1nbG9iYWxUaGlzLmFzc2VydDtcblxuaGlkZGVuQ3VycmVudEV2ZW50Kz0xO1xuY29uc3Qgc2VuZGluZ0Vycm9yPUVycm9yKFxuIGBFdmVudDogJHtoaWRkZW5DdXJyZW50VHVybn0uJHtoaWRkZW5DdXJyZW50RXZlbnR9YCk7XG5cbmlmKGhpZGRlblByaW9yRXJyb3IhPT11bmRlZmluZWQpe1xuYW5ub3RhdGVFcnJvcihzZW5kaW5nRXJyb3IsWCBgQ2F1c2VkIGJ5OiAke2hpZGRlblByaW9yRXJyb3J9YCk7XG4gfVxuXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi9cbmZ1bmNzLm1hcCgoZnVuYyk9PmZ1bmMmJndyYXBGdW5jdGlvbihmdW5jLHNlbmRpbmdFcnJvcixYKSkpO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLnRyYWNrVHVybnModHJhY2tUdXJucyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0cmFja1R1cm5zIjpbInRyYWNrVHVybnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAP/DnOlYCAABWAgAAIwAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3V0aWxzLmpzeyJpbXBvcnRzIjpbIi4vc3JjL2xvY2FsLmpzIiwiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qcyJdLCJleHBvcnRzIjpbbnVsbCxudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2xvY2FsLmpzXCIsIFtdXSxbXCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvbG9jYWwuanMiOltbImdldE1ldGhvZE5hbWVzIiwiZ2V0TWV0aG9kTmFtZXMiXV0sIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOltbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciIsIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAsVg2mFICAABSAgAAGQAAAEBlbmRvL2V4by12MS41LjcvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZXhvLW1ha2Vycy5qcyIsIi4vc3JjL3R5cGVzLmpzIiwiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9leG8tbWFrZXJzLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2V4by1tYWtlcnMuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXSxbXCIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyI6W1siR0VUX0lOVEVSRkFDRV9HVUFSRCIsIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAD6B373XFAAA1xQAACIAAABAZW5kby9leG8tdjEuNS43L3NyYy9leG8tbWFrZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vZW52LW9wdGlvbnMiLCJAZW5kby9lcnJvcnMiLCIuL2V4by10b29scy5qcyJdLCJleHBvcnRzIjpbImRlZmluZUV4b0NsYXNzIiwiZGVmaW5lRXhvQ2xhc3NLaXQiLCJpbml0RW1wdHkiLCJtYWtlRXhvIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG9iamVjdE1hcCxlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzLEZhaWwscSxkZWZlbmRQcm90b3R5cGUsZGVmZW5kUHJvdG90eXBlS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc1wiLCBbJGjNj19hID0+IChlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi9leG8tdG9vbHMuanNcIiwgW1tcImRlZmVuZFByb3RvdHlwZVwiLCBbJGjNj19hID0+IChkZWZlbmRQcm90b3R5cGUgPSAkaM2PX2EpXV0sW1wiZGVmZW5kUHJvdG90eXBlS2l0XCIsIFskaM2PX2EgPT4gKGRlZmVuZFByb3RvdHlwZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuICovXG5cbmNvbnN0e2NyZWF0ZSxzZWFsLGZyZWV6ZSxkZWZpbmVQcm9wZXJ0eSx2YWx1ZXN9PU9iamVjdDtcblxuLy9cbmNvbnN0IExBQkVMX0lOU1RBTkNFUz1lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKCdERUJVRycsJ2xhYmVsLWluc3RhbmNlcycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTZWxmPShwcm90byxpbnN0YW5jZUNvdW50KT0+e1xuY29uc3Qgc2VsZj1jcmVhdGUocHJvdG8pO1xuaWYoTEFCRUxfSU5TVEFOQ0VTKXtcbmRlZmluZVByb3BlcnR5KHNlbGYsU3ltYm9sLnRvU3RyaW5nVGFnLHtcbnZhbHVlOiBgJHtwcm90b1tTeW1ib2wudG9TdHJpbmdUYWddfSMke2luc3RhbmNlQ291bnR9YCxcbndyaXRhYmxlOmZhbHNlLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZX0pO1xuXG4gfVxucmV0dXJuIGhhcmRlbihzZWxmKTtcbiB9O1xuXG5jb25zdCBlbXB0eVJlY29yZD1oYXJkZW4oe30pO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbml0RW1wdHk9KCk9PmVtcHR5UmVjb3JkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5pbml0RW1wdHkoaW5pdEVtcHR5KTtcbmNvbnN0ICAgICAgICBkZWZpbmVFeG9DbGFzcz0oXG50YWcsXG5pbnRlcmZhY2VHdWFyZCxcbmluaXQsXG5tZXRob2RzLFxub3B0aW9ucz17fSk9Plxue1xuaGFyZGVuKG1ldGhvZHMpO1xuY29uc3R7XG5maW5pc2g9dW5kZWZpbmVkLFxucmVjZWl2ZUFtcGxpZmllcj11bmRlZmluZWQsXG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXI9dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5yZWNlaXZlQW1wbGlmaWVyPT09dW5kZWZpbmVkfHxcbkZhaWwgYE9ubHkgZmFjZXRzIG9mIGFuIGV4byBjbGFzcyBraXQgY2FuIGJlIGFtcGxpZmllZCAke3EodGFnKX1gO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbnRleHRNYXA9bmV3IFdlYWtNYXAoKTtcbmNvbnN0IHByb3RvPWRlZmVuZFByb3RvdHlwZShcbnRhZyxcbihzZWxmKT0+LyogICAgICAgICAgICAgICovY29udGV4dE1hcC5nZXQoc2VsZiksXG5tZXRob2RzLFxudHJ1ZSxcbmludGVyZmFjZUd1YXJkKTtcblxubGV0IGluc3RhbmNlQ291bnQ9MDtcbi8qXG5cbiAgICovXG5jb25zdCBtYWtlSW5zdGFuY2U9KC4uLmFyZ3MpPT57XG4vL1xuY29uc3Qgc3RhdGU9c2VhbChpbml0KC4uLmFyZ3MpKTtcbmluc3RhbmNlQ291bnQrPTE7XG5jb25zdCBzZWxmPW1ha2VTZWxmKHByb3RvLGluc3RhbmNlQ291bnQpO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbnRleHQ9ZnJlZXplKHtzdGF0ZSxzZWxmfSk7XG5jb250ZXh0TWFwLnNldChzZWxmLGNvbnRleHQpO1xuaWYoZmluaXNoKXtcbmZpbmlzaChjb250ZXh0KTtcbiB9XG5yZXR1cm4gc2VsZjtcbiB9O1xuXG5pZihyZWNlaXZlSW5zdGFuY2VUZXN0ZXIpe1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNJbnN0YW5jZT0oZXhvLGZhY2V0TmFtZT11bmRlZmluZWQpPT57XG5mYWNldE5hbWU9PT11bmRlZmluZWR8fFxuRmFpbCBgZmFjZXROYW1lIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBhbiBleG8gY2xhc3Mga2l0OiAke3EoXG50YWcpXG4gfSBoYXMgbm8gZmFjZXQgJHtxKGZhY2V0TmFtZSl9YDtcbnJldHVybiBjb250ZXh0TWFwLmhhcyhleG8pO1xuIH07XG5oYXJkZW4oaXNJbnN0YW5jZSk7XG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXIoaXNJbnN0YW5jZSk7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKG1ha2VJbnN0YW5jZSk7XG4gfTskaM2PX29uY2UuZGVmaW5lRXhvQ2xhc3MoZGVmaW5lRXhvQ2xhc3MpO1xuaGFyZGVuKGRlZmluZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZpbmVFeG9DbGFzc0tpdD0oXG50YWcsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5tZXRob2RzS2l0LFxub3B0aW9ucz17fSk9Plxue1xuaGFyZGVuKG1ldGhvZHNLaXQpO1xuY29uc3R7XG5maW5pc2g9dW5kZWZpbmVkLFxucmVjZWl2ZUFtcGxpZmllcj11bmRlZmluZWQsXG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXI9dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdCBjb250ZXh0TWFwS2l0PW9iamVjdE1hcChtZXRob2RzS2l0LCgpPT5uZXcgV2Vha01hcCgpKTtcbmNvbnN0IGdldENvbnRleHRLaXQ9b2JqZWN0TWFwKFxuY29udGV4dE1hcEtpdCxcbihjb250ZXh0TWFwKT0+KGZhY2V0KT0+Y29udGV4dE1hcC5nZXQoZmFjZXQpKTtcblxuY29uc3QgcHJvdG90eXBlS2l0PWRlZmVuZFByb3RvdHlwZUtpdChcbnRhZyxcbmdldENvbnRleHRLaXQsXG5tZXRob2RzS2l0LFxudHJ1ZSxcbmludGVyZmFjZUd1YXJkS2l0KTtcblxubGV0IGluc3RhbmNlQ291bnQ9MDtcbi8qXG5cbiAgICovXG5jb25zdCBtYWtlSW5zdGFuY2VLaXQ9KC4uLmFyZ3MpPT57XG4vL1xuY29uc3Qgc3RhdGU9c2VhbChpbml0KC4uLmFyZ3MpKTtcbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0PXtzdGF0ZSxmYWNldHM6bnVsbH07XG5pbnN0YW5jZUNvdW50Kz0xO1xuY29uc3QgZmFjZXRzPW9iamVjdE1hcChwcm90b3R5cGVLaXQsKHByb3RvLGZhY2V0TmFtZSk9PntcbmNvbnN0IHNlbGY9bWFrZVNlbGYocHJvdG8saW5zdGFuY2VDb3VudCk7XG5jb250ZXh0TWFwS2l0W2ZhY2V0TmFtZV0uc2V0KHNlbGYsY29udGV4dCk7XG5yZXR1cm4gc2VsZjtcbiB9KTtcbmNvbnRleHQuZmFjZXRzPWZhY2V0cztcbi8vXG5mcmVlemUoY29udGV4dCk7XG5pZihmaW5pc2gpe1xuZmluaXNoKGNvbnRleHQpO1xuIH1cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAqL2NvbnRleHQuZmFjZXRzKTtcbiB9O1xuXG5pZihyZWNlaXZlQW1wbGlmaWVyKXtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFtcGxpZnk9KGV4b0ZhY2V0KT0+e1xuZm9yKGNvbnN0IGNvbnRleHRNYXAgb2YgdmFsdWVzKGNvbnRleHRNYXBLaXQpKXtcbmlmKGNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KSl7XG5jb25zdHtmYWNldHN9PWNvbnRleHRNYXAuZ2V0KGV4b0ZhY2V0KTtcbnJldHVybiBmYWNldHM7XG4gfVxuIH1cbnRocm93IEZhaWwgYE11c3QgYmUgYSBmYWNldCBvZiAke3EodGFnKX06ICR7ZXhvRmFjZXR9YDtcbiB9O1xuaGFyZGVuKGFtcGxpZnkpO1xucmVjZWl2ZUFtcGxpZmllcihhbXBsaWZ5KTtcbiB9XG5cbmlmKHJlY2VpdmVJbnN0YW5jZVRlc3Rlcil7XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpc0luc3RhbmNlPShleG9GYWNldCxmYWNldE5hbWU9dW5kZWZpbmVkKT0+e1xuaWYoZmFjZXROYW1lPT09dW5kZWZpbmVkKXtcbnJldHVybiB2YWx1ZXMoY29udGV4dE1hcEtpdCkuc29tZSgoY29udGV4dE1hcCk9PlxuY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpKTtcblxuIH1cbmFzc2VydC50eXBlb2YoZmFjZXROYW1lLCdzdHJpbmcnKTtcbmNvbnN0IGNvbnRleHRNYXA9Y29udGV4dE1hcEtpdFtmYWNldE5hbWVdO1xuY29udGV4dE1hcCE9PXVuZGVmaW5lZHx8XG5GYWlsIGBleG8gY2xhc3Mga2l0ICR7cSh0YWcpfSBoYXMgbm8gZmFjZXQgbmFtZWQgJHtxKGZhY2V0TmFtZSl9YDtcbnJldHVybiBjb250ZXh0TWFwLmhhcyhleG9GYWNldCk7XG4gfTtcbmhhcmRlbihpc0luc3RhbmNlKTtcbnJlY2VpdmVJbnN0YW5jZVRlc3Rlcihpc0luc3RhbmNlKTtcbiB9XG5cbnJldHVybiBoYXJkZW4obWFrZUluc3RhbmNlS2l0KTtcbiB9OyRozY9fb25jZS5kZWZpbmVFeG9DbGFzc0tpdChkZWZpbmVFeG9DbGFzc0tpdCk7XG5oYXJkZW4oZGVmaW5lRXhvQ2xhc3NLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFeG89KHRhZyxpbnRlcmZhY2VHdWFyZCxtZXRob2RzLG9wdGlvbnM9dW5kZWZpbmVkKT0+e1xuY29uc3QgbWFrZUluc3RhbmNlPWRlZmluZUV4b0NsYXNzKFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cbnJldHVybiBtYWtlSW5zdGFuY2UoKTtcbiB9OyRozY9fb25jZS5tYWtlRXhvKG1ha2VFeG8pO1xuaGFyZGVuKG1ha2VFeG8pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaW5pdEVtcHR5IjpbImluaXRFbXB0eSJdLCJkZWZpbmVFeG9DbGFzcyI6WyJkZWZpbmVFeG9DbGFzcyJdLCJkZWZpbmVFeG9DbGFzc0tpdCI6WyJkZWZpbmVFeG9DbGFzc0tpdCJdLCJtYWtlRXhvIjpbIm1ha2VFeG8iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAzu5bBuYvAADmLwAAIQAAAEBlbmRvL2V4by12MS41Ljcvc3JjL2V4by10b29scy5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2ZhciIsIkBlbmRvL3BhdHRlcm5zIiwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9nZXQtaW50ZXJmYWNlLmpzIl0sImV4cG9ydHMiOlsiZGVmZW5kUHJvdG90eXBlIiwiZGVmZW5kUHJvdG90eXBlS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldE1ldGhvZE5hbWVzLGhhc093blByb3BlcnR5T2YsdG9UaHJvd2FibGUsRSxGYXIsbXVzdE1hdGNoLE0saXNBd2FpdEFyZ0d1YXJkLGlzUmF3R3VhcmQsZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQsZ2V0TWV0aG9kR3VhcmRQYXlsb2FkLGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCxnZXRDb3B5TWFwRW50cmllcyxsaXN0RGlmZmVyZW5jZSxvYmplY3RNYXAscSxGYWlsLEdFVF9JTlRFUkZBQ0VfR1VBUkQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJ0b1Rocm93YWJsZVwiLCBbJGjNj19hID0+ICh0b1Rocm93YWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiaXNBd2FpdEFyZ0d1YXJkXCIsIFskaM2PX2EgPT4gKGlzQXdhaXRBcmdHdWFyZCA9ICRozY9fYSldXSxbXCJpc1Jhd0d1YXJkXCIsIFskaM2PX2EgPT4gKGlzUmF3R3VhcmQgPSAkaM2PX2EpXV0sW1wiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV0sW1wiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldE1ldGhvZEd1YXJkUGF5bG9hZCA9ICRozY9fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dLFtcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBFbnRyaWVzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qc1wiLCBbW1wibGlzdERpZmZlcmVuY2VcIiwgWyRozY9fYSA9PiAobGlzdERpZmZlcmVuY2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vZ2V0LWludGVyZmFjZS5qc1wiLCBbW1wiR0VUX0lOVEVSRkFDRV9HVUFSRFwiLCBbJGjNj19hID0+IChHRVRfSU5URVJGQUNFX0dVQVJEID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZGVmaW5lUHJvcGVydGllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUmF3TWV0aG9kR3VhcmQ9TS5jYWxsKCkucmVzdChNLnJhdygpKS5yZXR1cm5zKE0ucmF3KCkpO1xuXG5jb25zdCBSRURBQ1RFRF9SQVdfQVJHPSc8cmVkYWN0ZWQgcmF3IGFyZz4nO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgUGFzc2FibGVNZXRob2RHdWFyZD1NLmNhbGwoKS5yZXN0KE0uYW55KCkpLnJldHVybnMoTS5hbnkoKSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kU3luY0FyZ3M9KHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsPXVuZGVmaW5lZCk9PntcbmNvbnN0e1xuZGVjbGFyZWRMZW4sXG5oYXNSZXN0QXJnR3VhcmQsXG5yZXN0QXJnR3VhcmRJc1JhdyxcbnBhcmFtc1BhdHRlcm4sXG5yZWRhY3RlZEluZGljZXN9PVxubWF0Y2hDb25maWc7XG5cbi8vXG4vL1xubGV0IG1hdGNoYWJsZUFyZ3M9c3luY0FyZ3M7XG5pZihyZXN0QXJnR3VhcmRJc1JhdyYmc3luY0FyZ3MubGVuZ3RoPmRlY2xhcmVkTGVuKXtcbmNvbnN0IHJlc3RMZW49c3luY0FyZ3MubGVuZ3RoLWRlY2xhcmVkTGVuO1xuY29uc3QgcmVkYWN0ZWRSZXN0PUFycmF5KHJlc3RMZW4pLmZpbGwoUkVEQUNURURfUkFXX0FSRyk7XG5tYXRjaGFibGVBcmdzPVsuLi5zeW5jQXJncy5zbGljZSgwLGRlY2xhcmVkTGVuKSwuLi5yZWRhY3RlZFJlc3RdO1xuIH1lbHNlIGlmKFxucmVkYWN0ZWRJbmRpY2VzLmxlbmd0aD4wJiZcbnJlZGFjdGVkSW5kaWNlc1swXTxzeW5jQXJncy5sZW5ndGgpXG57XG4vL1xuLy9cbm1hdGNoYWJsZUFyZ3M9Wy4uLnN5bmNBcmdzXTtcbiB9XG5cbmZvcihjb25zdCBpIG9mIHJlZGFjdGVkSW5kaWNlcyl7XG5pZihpPj1tYXRjaGFibGVBcmdzLmxlbmd0aCl7XG5icmVhaztcbiB9XG5tYXRjaGFibGVBcmdzW2ldPVJFREFDVEVEX1JBV19BUkc7XG4gfVxuXG5tdXN0TWF0Y2goaGFyZGVuKG1hdGNoYWJsZUFyZ3MpLHBhcmFtc1BhdHRlcm4sbGFiZWwpO1xuXG5pZihoYXNSZXN0QXJnR3VhcmQpe1xucmV0dXJuIHN5bmNBcmdzO1xuIH1cbnN5bmNBcmdzLmxlbmd0aDw9ZGVjbGFyZWRMZW58fFxuRmFpbCBgJHtxKGxhYmVsKX0gYWNjZXB0cyBhdCBtb3N0ICR7cShkZWNsYXJlZExlbil9IGFyZ3VtZW50cywgbm90ICR7cShcbnN5bmNBcmdzLmxlbmd0aClcbiB9OiAke3N5bmNBcmdzfWA7XG5yZXR1cm4gc3luY0FyZ3M7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBidWlsZE1hdGNoQ29uZmlnPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcblxuY29uc3QgbWF0Y2hhYmxlQXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCByZWRhY3RlZEluZGljZXM9W107XG5mb3IobGV0IGk9MDtpPG1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZUFyZ0d1YXJkc1tpXSkpe1xubWF0Y2hhYmxlQXJnR3VhcmRzW2ldPVJFREFDVEVEX1JBV19BUkc7XG5yZWRhY3RlZEluZGljZXMucHVzaChpKTtcbiB9XG4gfVxuXG4vL1xubGV0IG1hdGNoYWJsZVJlc3RBcmdHdWFyZD1yZXN0QXJnR3VhcmQ7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZVJlc3RBcmdHdWFyZCkpe1xubWF0Y2hhYmxlUmVzdEFyZ0d1YXJkPU0uYXJyYXlPZihSRURBQ1RFRF9SQVdfQVJHKTtcbiB9XG5jb25zdCBtYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQ9aGFyZGVuKHtcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczptYXRjaGFibGVBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOm1hdGNoYWJsZUFyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKSxcbnJlc3RBcmdHdWFyZDptYXRjaGFibGVSZXN0QXJnR3VhcmR9KTtcblxuXG5jb25zdCBwYXJhbXNQYXR0ZXJuPU0uc3BsaXRBcnJheShcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZC5hcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQub3B0aW9uYWxBcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQucmVzdEFyZ0d1YXJkKTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmRlY2xhcmVkTGVuOm1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGgsXG5oYXNSZXN0QXJnR3VhcmQ6cmVzdEFyZ0d1YXJkIT09dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkSXNSYXc6cmVzdEFyZ0d1YXJkIT09bWF0Y2hhYmxlUmVzdEFyZ0d1YXJkLFxucGFyYW1zUGF0dGVybixcbnJlZGFjdGVkSW5kaWNlcyxcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZH0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZFN5bmNNZXRob2Q9KFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpPT5cbntcbmNvbnN0e3JldHVybkd1YXJkfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5jb25zdCBpc1Jhd1JldHVybj1pc1Jhd0d1YXJkKHJldHVybkd1YXJkKTtcbmNvbnN0IG1hdGNoQ29uZmlnPWJ1aWxkTWF0Y2hDb25maWcobWV0aG9kR3VhcmRQYXlsb2FkKTtcbmNvbnN0e3N5bmNNZXRob2R9PXtcbi8vXG5zeW5jTWV0aG9kKC4uLnN5bmNBcmdzKXtcbnRyeXtcbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbi8vXG5jb25zdCByZWFsQXJncz1kZWZlbmRTeW5jQXJncyhzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbCk7XG5jb25zdCByZXN1bHQ9YXBwbHkoYmVoYXZpb3JNZXRob2QsY29udGV4dCxyZWFsQXJncyk7XG5pZighaXNSYXdSZXR1cm4pe1xubXVzdE1hdGNoKGhhcmRlbihyZXN1bHQpLHJldHVybkd1YXJkLCBgJHtsYWJlbH06IHJlc3VsdGApO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfWNhdGNoKHRocm93blRoaW5nKXtcbnRocm93IHRvVGhyb3dhYmxlKHRocm93blRoaW5nKTtcbiB9XG4gfX07XG5cbnJldHVybiBzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cbiAqL1xuY29uc3QgZGVzeW5jPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcbiFpc0F3YWl0QXJnR3VhcmQocmVzdEFyZ0d1YXJkKXx8XG5GYWlsIGBSZXN0IGFyZ3MgbWF5IG5vdCBiZSBhd2FpdGVkOiAke3Jlc3RBcmdHdWFyZH1gO1xuY29uc3QgcmF3QXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCBhd2FpdEluZGV4ZXM9W107XG5mb3IobGV0IGk9MDtpPHJhd0FyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBhcmdHdWFyZD1yYXdBcmdHdWFyZHNbaV07XG5pZihpc0F3YWl0QXJnR3VhcmQoYXJnR3VhcmQpKXtcbnJhd0FyZ0d1YXJkc1tpXT1nZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChhcmdHdWFyZCkuYXJnR3VhcmQ7XG5hd2FpdEluZGV4ZXMucHVzaChpKTtcbiB9XG4gfVxucmV0dXJue1xuYXdhaXRJbmRleGVzLFxucmF3TWV0aG9kR3VhcmRQYXlsb2FkOntcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczpyYXdBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOnJhd0FyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKX19O1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZEFzeW5jTWV0aG9kPShcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKT0+XG57XG5jb25zdHtyZXR1cm5HdWFyZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuY29uc3QgaXNSYXdSZXR1cm49aXNSYXdHdWFyZChyZXR1cm5HdWFyZCk7XG5cbmNvbnN0e2F3YWl0SW5kZXhlcyxyYXdNZXRob2RHdWFyZFBheWxvYWR9PWRlc3luYyhtZXRob2RHdWFyZFBheWxvYWQpO1xuY29uc3QgbWF0Y2hDb25maWc9YnVpbGRNYXRjaENvbmZpZyhyYXdNZXRob2RHdWFyZFBheWxvYWQpO1xuXG5jb25zdHthc3luY01ldGhvZH09e1xuLy9cbmFzeW5jTWV0aG9kKC4uLmFyZ3Mpe1xuY29uc3QgYXdhaXRMaXN0PVtdO1xuZm9yKGNvbnN0IGkgb2YgYXdhaXRJbmRleGVzKXtcbmlmKGk+PWFyZ3MubGVuZ3RoKXtcbmJyZWFrO1xuIH1cbmF3YWl0TGlzdC5wdXNoKGFyZ3NbaV0pO1xuIH1cbmNvbnN0IHA9UHJvbWlzZS5hbGwoYXdhaXRMaXN0KTtcbmNvbnN0IHN5bmNBcmdzPVsuLi5hcmdzXTtcbmNvbnN0IHJlc3VsdFA9RS53aGVuKFxucCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyhhd2FpdGVkQXJncyk9PntcbmZvcihsZXQgaj0wO2o8YXdhaXRlZEFyZ3MubGVuZ3RoO2orPTEpe1xuc3luY0FyZ3NbYXdhaXRJbmRleGVzW2pdXT1hd2FpdGVkQXJnc1tqXTtcbiB9XG4vL1xuLy9cbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbmNvbnN0IHJlYWxBcmdzPWRlZmVuZFN5bmNBcmdzKHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsKTtcbnJldHVybiBhcHBseShiZWhhdmlvck1ldGhvZCxjb250ZXh0LHJlYWxBcmdzKTtcbiB9KTtcblxucmV0dXJuIEUud2hlbihyZXN1bHRQLChmdWxmaWxsbWVudCk9PntcbmlmKCFpc1Jhd1JldHVybil7XG5tdXN0TWF0Y2goaGFyZGVuKGZ1bGZpbGxtZW50KSxyZXR1cm5HdWFyZCwgYCR7bGFiZWx9OiByZXN1bHRgKTtcbiB9XG5yZXR1cm4gZnVsZmlsbG1lbnQ7XG4gfSkuY2F0Y2goKHJlYXNvbik9PlxuLy9cbi8vXG5Qcm9taXNlLnJlamVjdCh0b1Rocm93YWJsZShyZWFzb24pKSk7XG5cbiB9fTtcblxucmV0dXJuIGFzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRNZXRob2Q9KGdldENvbnRleHQsYmVoYXZpb3JNZXRob2QsbWV0aG9kR3VhcmQsbGFiZWwpPT57XG5jb25zdCBtZXRob2RHdWFyZFBheWxvYWQ9Z2V0TWV0aG9kR3VhcmRQYXlsb2FkKG1ldGhvZEd1YXJkKTtcbmNvbnN0e2NhbGxLaW5kfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5pZihjYWxsS2luZD09PSdzeW5jJyl7XG5yZXR1cm4gZGVmZW5kU3luY01ldGhvZChcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKTtcblxuIH1lbHNle1xuYXNzZXJ0KGNhbGxLaW5kPT09J2FzeW5jJyk7XG5yZXR1cm4gZGVmZW5kQXN5bmNNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBiaW5kTWV0aG9kPShcbm1ldGhvZFRhZyxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQpPT5cbntcbmFzc2VydC50eXBlb2YoYmVoYXZpb3JNZXRob2QsJ2Z1bmN0aW9uJyk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldENvbnRleHQ9KHJlcHJlc2VudGF0aXZlKT0+e1xucmVwcmVzZW50YXRpdmV8fFxuLy9cbkZhaWwgYE1ldGhvZCAke21ldGhvZFRhZ30gY2FsbGVkIHdpdGhvdXQgJ3RoaXMnIG9iamVjdGA7XG5jb25zdCBjb250ZXh0PWNvbnRleHRQcm92aWRlcihyZXByZXNlbnRhdGl2ZSk7XG5pZihjb250ZXh0PT09dW5kZWZpbmVkKXtcbnRocm93IEZhaWwgYCR7cShcbm1ldGhvZFRhZylcbiB9IG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gYSB2YWxpZCBpbnN0YW5jZTogJHtyZXByZXNlbnRhdGl2ZX1gO1xuIH1cbnJldHVybiBjb250ZXh0O1xuIH07XG5cbmNvbnN0IG1ldGhvZD1kZWZlbmRNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCxcbm1ldGhvZFRhZyk7XG5cblxuZGVmaW5lUHJvcGVydGllcyhtZXRob2Qse1xubmFtZTp7dmFsdWU6bWV0aG9kVGFnfSxcbmxlbmd0aDp7dmFsdWU6YmVoYXZpb3JNZXRob2QubGVuZ3RofX0pO1xuXG5yZXR1cm4gbWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZlbmRQcm90b3R5cGU9KFxudGFnLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHM9ZmFsc2UsXG5pbnRlcmZhY2VHdWFyZD11bmRlZmluZWQpPT5cbntcbmNvbnN0IHByb3RvdHlwZT17fTtcbmNvbnN0IG1ldGhvZE5hbWVzPWdldE1ldGhvZE5hbWVzKGJlaGF2aW9yTWV0aG9kcykuZmlsdGVyKFxuLy9cbi8vXG4oa2V5KT0+e1xuaWYoa2V5IT09J2NvbnN0cnVjdG9yJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBjb25zdHJ1Y3Rvcj1iZWhhdmlvck1ldGhvZHMuY29uc3RydWN0b3I7XG5yZXR1cm4hKFxuY29uc3RydWN0b3IucHJvdG90eXBlJiZcbmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj09PWNvbnN0cnVjdG9yKTtcblxuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG1ldGhvZEd1YXJkcztcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZGVmYXVsdEd1YXJkcztcbmlmKGludGVyZmFjZUd1YXJkKXtcbmNvbnN0e1xuaW50ZXJmYWNlTmFtZSxcbm1ldGhvZEd1YXJkczptZyxcbnN5bWJvbE1ldGhvZEd1YXJkcyxcbnNsb3BweSxcbmRlZmF1bHRHdWFyZHM6ZGc9c2xvcHB5PydwYXNzYWJsZSc6ZGVmYXVsdEd1YXJkc309XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoaW50ZXJmYWNlR3VhcmQpO1xubWV0aG9kR3VhcmRzPWhhcmRlbih7XG4uLi5tZyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHMmJlxuZnJvbUVudHJpZXMoZ2V0Q29weU1hcEVudHJpZXMoc3ltYm9sTWV0aG9kR3VhcmRzKSkpfSk7XG5cbmRlZmF1bHRHdWFyZHM9ZGc7XG57XG5jb25zdCBtZXRob2RHdWFyZE5hbWVzPW93bktleXMobWV0aG9kR3VhcmRzKTtcbmNvbnN0IHVuaW1wbGVtZW50ZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kR3VhcmROYW1lcyxtZXRob2ROYW1lcyk7XG51bmltcGxlbWVudGVkLmxlbmd0aD09PTB8fFxuRmFpbCBgbWV0aG9kcyAke3EodW5pbXBsZW1lbnRlZCl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuaWYoZGVmYXVsdEd1YXJkcz09PXVuZGVmaW5lZCl7XG5jb25zdCB1bmd1YXJkZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kTmFtZXMsbWV0aG9kR3VhcmROYW1lcyk7XG51bmd1YXJkZWQubGVuZ3RoPT09MHx8XG5GYWlsIGBtZXRob2RzICR7cSh1bmd1YXJkZWQpfSBub3QgZ3VhcmRlZCBieSAke3EoaW50ZXJmYWNlTmFtZSl9YDtcbiB9XG4gfVxuIH1cblxuZm9yKGNvbnN0IHByb3Agb2YgbWV0aG9kTmFtZXMpe1xuY29uc3Qgb3JpZ2luYWxNZXRob2Q9YmVoYXZpb3JNZXRob2RzW3Byb3BdO1xuY29uc3R7c2hpZnRlZE1ldGhvZH09e1xuc2hpZnRlZE1ldGhvZCguLi5hcmdzKXtcbnJldHVybiBvcmlnaW5hbE1ldGhvZCh0aGlzLC4uLmFyZ3MpO1xuIH19O1xuXG5jb25zdCBiZWhhdmlvck1ldGhvZD10aGlzZnVsTWV0aG9kcz9vcmlnaW5hbE1ldGhvZDpzaGlmdGVkTWV0aG9kO1xuLy9cbi8vXG5sZXQgbWV0aG9kR3VhcmQ9bWV0aG9kR3VhcmRzJiZtZXRob2RHdWFyZHNbcHJvcF07XG5pZighbWV0aG9kR3VhcmQpe1xuc3dpdGNoKGRlZmF1bHRHdWFyZHMpe1xuY2FzZSB1bmRlZmluZWQ6e1xuaWYodGhpc2Z1bE1ldGhvZHMpe1xubWV0aG9kR3VhcmQ9UGFzc2FibGVNZXRob2RHdWFyZDtcbiB9ZWxzZXtcbm1ldGhvZEd1YXJkPVJhd01ldGhvZEd1YXJkO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UncGFzc2FibGUnOntcbm1ldGhvZEd1YXJkPVBhc3NhYmxlTWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5jYXNlJ3Jhdyc6e1xubWV0aG9kR3VhcmQ9UmF3TWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBkZWZhdWx0R3VhcmRzICR7cShkZWZhdWx0R3VhcmRzKX1gO1xuIH19XG5cbiB9XG5wcm90b3R5cGVbcHJvcF09YmluZE1ldGhvZChcbiBgSW4gJHtxKHByb3ApfSBtZXRob2Qgb2YgKCR7dGFnfSlgLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCk7XG5cbiB9XG5cbmlmKCFoYXNPd25Qcm9wZXJ0eU9mKHByb3RvdHlwZSxHRVRfSU5URVJGQUNFX0dVQVJEKSl7XG5jb25zdCBnZXRJbnRlcmZhY2VHdWFyZE1ldGhvZD17XG5bR0VUX0lOVEVSRkFDRV9HVUFSRF0oKXtcbi8vXG5yZXR1cm4gaW50ZXJmYWNlR3VhcmQ7XG4gfX1bXG5HRVRfSU5URVJGQUNFX0dVQVJEXTtcbnByb3RvdHlwZVtHRVRfSU5URVJGQUNFX0dVQVJEXT1iaW5kTWV0aG9kKFxuIGBJbiAke3EoR0VUX0lOVEVSRkFDRV9HVUFSRCl9IG1ldGhvZCBvZiAoJHt0YWd9KWAsXG5jb250ZXh0UHJvdmlkZXIsXG5nZXRJbnRlcmZhY2VHdWFyZE1ldGhvZCxcblBhc3NhYmxlTWV0aG9kR3VhcmQpO1xuXG4gfVxuXG5yZXR1cm4gRmFyKFxudGFnLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnByb3RvdHlwZSk7XG5cblxuIH07JGjNj19vbmNlLmRlZmVuZFByb3RvdHlwZShkZWZlbmRQcm90b3R5cGUpO1xuaGFyZGVuKGRlZmVuZFByb3RvdHlwZSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZlbmRQcm90b3R5cGVLaXQ9KFxudGFnLFxuY29udGV4dFByb3ZpZGVyS2l0LFxuYmVoYXZpb3JNZXRob2RzS2l0LFxudGhpc2Z1bE1ldGhvZHM9ZmFsc2UsXG5pbnRlcmZhY2VHdWFyZEtpdD11bmRlZmluZWQpPT5cbntcbmNvbnN0IGZhY2V0TmFtZXM9b3duS2V5cyhiZWhhdmlvck1ldGhvZHNLaXQpLnNvcnQoKTtcbmZhY2V0TmFtZXMubGVuZ3RoPjF8fEZhaWwgYEEgbXVsdGktZmFjZXQgb2JqZWN0IG11c3QgaGF2ZSBtdWx0aXBsZSBmYWNldHNgO1xuaWYoaW50ZXJmYWNlR3VhcmRLaXQpe1xuY29uc3QgaW50ZXJmYWNlTmFtZXM9b3duS2V5cyhpbnRlcmZhY2VHdWFyZEtpdCk7XG5jb25zdCBleHRyYUludGVyZmFjZU5hbWVzPWxpc3REaWZmZXJlbmNlKGZhY2V0TmFtZXMsaW50ZXJmYWNlTmFtZXMpO1xuZXh0cmFJbnRlcmZhY2VOYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEludGVyZmFjZXMgJHtxKGV4dHJhSW50ZXJmYWNlTmFtZXMpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmNvbnN0IGV4dHJhRmFjZXROYW1lcz1saXN0RGlmZmVyZW5jZShpbnRlcmZhY2VOYW1lcyxmYWNldE5hbWVzKTtcbmV4dHJhRmFjZXROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEZhY2V0cyAke3EoZXh0cmFGYWNldE5hbWVzKX0gb2YgJHtxKHRhZyl9IG5vdCBndWFyZGVkIGJ5IGludGVyZmFjZXNgO1xuIH1cbmNvbnN0IGNvbnRleHRNYXBOYW1lcz1vd25LZXlzKGNvbnRleHRQcm92aWRlcktpdCk7XG5jb25zdCBleHRyYUNvbnRleHROYW1lcz1saXN0RGlmZmVyZW5jZShmYWNldE5hbWVzLGNvbnRleHRNYXBOYW1lcyk7XG5leHRyYUNvbnRleHROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYENvbnRleHRzICR7cShleHRyYUNvbnRleHROYW1lcyl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuY29uc3QgZXh0cmFGYWNldE5hbWVzPWxpc3REaWZmZXJlbmNlKGNvbnRleHRNYXBOYW1lcyxmYWNldE5hbWVzKTtcbmV4dHJhRmFjZXROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEZhY2V0cyAke3EoZXh0cmFGYWNldE5hbWVzKX0gb2YgJHtxKHRhZyl9IG1pc3NpbmcgY29udGV4dHNgO1xuY29uc3QgcHJvdG9LaXQ9b2JqZWN0TWFwKGJlaGF2aW9yTWV0aG9kc0tpdCwoYmVoYXZpb3JNZXRob2RzLGZhY2V0TmFtZSk9PlxuZGVmZW5kUHJvdG90eXBlKFxuIGAke3RhZ30gJHtTdHJpbmcoZmFjZXROYW1lKX1gLFxuY29udGV4dFByb3ZpZGVyS2l0W2ZhY2V0TmFtZV0sXG5iZWhhdmlvck1ldGhvZHMsXG50aGlzZnVsTWV0aG9kcyxcbmludGVyZmFjZUd1YXJkS2l0JiZpbnRlcmZhY2VHdWFyZEtpdFtmYWNldE5hbWVdKSk7XG5cblxucmV0dXJuIHByb3RvS2l0O1xuIH07JGjNj19vbmNlLmRlZmVuZFByb3RvdHlwZUtpdChkZWZlbmRQcm90b3R5cGVLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmZW5kUHJvdG90eXBlIjpbImRlZmVuZFByb3RvdHlwZSJdLCJkZWZlbmRQcm90b3R5cGVLaXQiOlsiZGVmZW5kUHJvdG90eXBlS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEaTPG42AgAANgIAACUAAABAZW5kby9leG8tdjEuNS43L3NyYy9nZXQtaW50ZXJmYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJHRVRfSU5URVJGQUNFX0dVQVJEIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9JTlRFUkZBQ0VfR1VBUkQ9J19fZ2V0SW50ZXJmYWNlR3VhcmRfXyc7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5HRVRfSU5URVJGQUNFX0dVQVJEKEdFVF9JTlRFUkZBQ0VfR1VBUkQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiR0VUX0lOVEVSRkFDRV9HVUFSRCI6WyJHRVRfSU5URVJGQUNFX0dVQVJEIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAAB0AAABAZW5kby9leG8tdjEuNS43L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAC0qYOFYCAABWAgAAHQAAAEBlbmRvL2Zhci12MS4xLjkvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wYXNzLXN0eWxlIl0sImV4cG9ydHMiOlsiZ2V0SW50ZXJmYWNlT2YiLCJnZXRJbnRlcmZhY2VPZiIsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtdXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vZXZlbnR1YWwtc2VuZCI6W1siRSIsIkUiXV0sIkBlbmRvL3Bhc3Mtc3R5bGUiOltbIkZhciIsIkZhciJdLFsiZ2V0SW50ZXJmYWNlT2YiLCJnZXRJbnRlcmZhY2VPZiJdLFsicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuIFp8HQHAAB0BwAAHQAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vc3JjL21hcnNoYWwuanMiLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIiwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiLCIuL3NyYy9yYW5rT3JkZXIuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsInBhcnNlIiwicGFyc2UiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc1wiLCBbXV0sW1wiLi9zcmMvZW5jb2RlUGFzc2FibGUuanNcIiwgW11dLFtcIi4vc3JjL3JhbmtPcmRlci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOltbIlFDTEFTUyIsIlFDTEFTUyJdXSwiLi9zcmMvbWFyc2hhbC5qcyI6W1sibWFrZU1hcnNoYWwiLCJtYWtlTWFyc2hhbCJdXSwiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiOltbInN0cmluZ2lmeSIsInN0cmluZ2lmeSJdLFsicGFyc2UiLCJwYXJzZSJdXSwiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanMiOltbImRlY29kZVRvSnVzdGluIiwiZGVjb2RlVG9KdXN0aW4iXV0sIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIjpbWyJtYWtlUGFzc2FibGVLaXQiLCJtYWtlUGFzc2FibGVLaXQiXSxbIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSJdLFsibWFrZURlY29kZVBhc3NhYmxlIiwibWFrZURlY29kZVBhc3NhYmxlIl0sWyJpc0VuY29kZWRSZW1vdGFibGUiLCJpc0VuY29kZWRSZW1vdGFibGUiXSxbInplcm9QYWQiLCJ6ZXJvUGFkIl0sWyJyZWNvcmROYW1lcyIsInJlY29yZE5hbWVzIl0sWyJyZWNvcmRWYWx1ZXMiLCJyZWNvcmRWYWx1ZXMiXV0sIi4vc3JjL3JhbmtPcmRlci5qcyI6W1sidHJpdmlhbENvbXBhcmF0b3IiLCJ0cml2aWFsQ29tcGFyYXRvciJdLFsiYXNzZXJ0UmFua1NvcnRlZCIsImFzc2VydFJhbmtTb3J0ZWQiXSxbImNvbXBhcmVSYW5rIiwiY29tcGFyZVJhbmsiXSxbImlzUmFua1NvcnRlZCIsImlzUmFua1NvcnRlZCJdLFsic29ydEJ5UmFuayIsInNvcnRCeVJhbmsiXSxbImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVBbnRpUmFuayJdLFsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCJdLFsiZ2V0UGFzc1N0eWxlQ292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciJdLFsiaW50ZXJzZWN0UmFua0NvdmVycyIsImludGVyc2VjdFJhbmtDb3ZlcnMiXSxbInVuaW9uUmFua0NvdmVycyIsInVuaW9uUmFua0NvdmVycyJdXSwiQGVuZG8vcGFzcy1zdHlsZSI6W1siZGVlcGx5RnVsZmlsbGVkIiwiZGVlcGx5RnVsZmlsbGVkIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADXbFulWUMAAFlDAAAqAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL2VuY29kZVBhc3NhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJpc0VuY29kZWRSZW1vdGFibGUiLCJtYWtlRGVjb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlUGFzc2FibGVLaXQiLCJwYXNzU3R5bGVQcmVmaXhlcyIsInJlY29yZE5hbWVzIiwicmVjb3JkVmFsdWVzIiwiemVyb1BhZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixhc3NlcnRSZWNvcmQsaXNFcnJvckxpa2UsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxiLHEsRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImFzc2VydFJlY29yZFwiLCBbJGjNj19hID0+IChhc3NlcnRSZWNvcmQgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJiXCIsIFskaM2PX2EgPT4gKGIgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7ZnJvbUVudHJpZXMsaXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8vXG5jb25zdCByQzA9L1tcXHgwMC1cXHgxRl0vO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdldFN1ZmZpeD0oc3RyLGluZGV4KT0+aW5kZXg9PT0wP3N0cjpzdHIuc3Vic3RyaW5nKGluZGV4KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcmVjb3JkTmFtZXM9KHJlY29yZCk9PlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4oLyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlY29yZCkuc29ydCgpLnJldmVyc2UoKSk7JGjNj19vbmNlLnJlY29yZE5hbWVzKHJlY29yZE5hbWVzKTtcbmhhcmRlbihyZWNvcmROYW1lcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZFZhbHVlcz0ocmVjb3JkLG5hbWVzKT0+XG5oYXJkZW4obmFtZXMubWFwKChuYW1lKT0+cmVjb3JkW25hbWVdKSk7JGjNj19vbmNlLnJlY29yZFZhbHVlcyhyZWNvcmRWYWx1ZXMpO1xuaGFyZGVuKHJlY29yZFZhbHVlcyk7XG5cbmNvbnN0IHplcm9lcz1BcnJheSgxNikuXG5maWxsKHVuZGVmaW5lZCkuXG5tYXAoKF8saSk9PicwJy5yZXBlYXQoaSkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgemVyb1BhZD0obixzaXplKT0+e1xuY29uc3QgblN0cj0gYCR7bn1gO1xuY29uc3QgZmlsbExlbj1zaXplLW5TdHIubGVuZ3RoO1xuaWYoZmlsbExlbj09PTApcmV0dXJuIG5TdHI7XG5hc3NlcnQoZmlsbExlbj4wJiZmaWxsTGVuPHplcm9lcy5sZW5ndGgpO1xucmV0dXJuIGAke3plcm9lc1tmaWxsTGVuXX0ke25TdHJ9YDtcbiB9OyRozY9fb25jZS56ZXJvUGFkKHplcm9QYWQpO1xuaGFyZGVuKHplcm9QYWQpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGFzTnVtYmVyPW5ldyBGbG9hdDY0QXJyYXkoMSk7XG5jb25zdCBhc0JpdHM9bmV3IEJpZ1VpbnQ2NEFycmF5KGFzTnVtYmVyLmJ1ZmZlcik7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbmNvbnN0IENhbm9uaWNhbE5hTkJpdHM9J2ZmZjgwMDAwMDAwMDAwMDAnO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmluYXJ5NjQ9KG4pPT57XG4vL1xuaWYoaXMobiwtMCkpe1xubj0wO1xuIH1lbHNlIGlmKGlzKG4sTmFOKSl7XG5yZXR1cm4gYGYke0Nhbm9uaWNhbE5hTkJpdHN9YDtcbiB9XG5hc051bWJlclswXT1uO1xubGV0IGJpdHM9YXNCaXRzWzBdO1xuaWYobjwwKXtcbmJpdHNePTB4ZmZmZmZmZmZmZmZmZmZmZm47XG4gfWVsc2V7XG5iaXRzXj0weDgwMDAwMDAwMDAwMDAwMDBuO1xuIH1cbnJldHVybiBgZiR7emVyb1BhZChiaXRzLnRvU3RyaW5nKDE2KSwxNil9YDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVCaW5hcnk2ND0oZW5jb2RlZCxza2lwPTApPT57XG5lbmNvZGVkLmNoYXJBdChza2lwKT09PSdmJ3x8RmFpbCBgRW5jb2RlZCBudW1iZXIgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IGJpdHM9QmlnSW50KCBgMHgke2dldFN1ZmZpeChlbmNvZGVkLHNraXArMSl9YCk7XG5pZihlbmNvZGVkLmNoYXJBdChza2lwKzEpPCc4Jyl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5hc0JpdHNbMF09Yml0cztcbmNvbnN0IHJlc3VsdD1hc051bWJlclswXTtcbiFpcyhyZXN1bHQsLTApfHxcbkZhaWwgYFVuZXhwZWN0ZWQgbmVnYXRpdmUgemVybzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVCaWdJbnQ9KG4pPT57XG5jb25zdCBhYnM9bjwwbj8tbjpuO1xuY29uc3QgbkRpZ2l0cz1hYnMudG9TdHJpbmcoKS5sZW5ndGg7XG5jb25zdCBsRGlnaXRzPW5EaWdpdHMudG9TdHJpbmcoKS5sZW5ndGg7XG5pZihuPDBuKXtcbnJldHVybiBgbiR7XG4vL1xuLy9cbicjJy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbigxMCoqbERpZ2l0cy1uRGlnaXRzKS50b1N0cmluZygpLnBhZFN0YXJ0KGxEaWdpdHMsJzAnKVxuIH06JHtcbi8vXG4oMTBuKipCaWdJbnQobkRpZ2l0cykrbikudG9TdHJpbmcoKS5wYWRTdGFydChuRGlnaXRzLCcwJylcbiB9YDtcbiB9ZWxzZXtcbnJldHVybiBgcCR7XG4vL1xuLy9cbid+Jy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbm5EaWdpdHNcbiB9OiR7XG4vL1xublxuIH1gO1xuIH1cbiB9O1xuXG5jb25zdCByQmlnSW50UGF5bG9hZD0vKFswLTldKykoOihbMC05XSskfCl8KS9zO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmlnSW50PShlbmNvZGVkKT0+e1xuY29uc3QgdHlwZVByZWZpeD1lbmNvZGVkLmNoYXJBdCgwKTsvL1xudHlwZVByZWZpeD09PSdwJ3x8XG50eXBlUHJlZml4PT09J24nfHxcbkZhaWwgYEVuY29kZWQgYmlnaW50IGV4cGVjdGVkOiAke2VuY29kZWR9YDtcblxuY29uc3R7XG5pbmRleDpsRGlnaXRzLFxuMTpzbkRpZ2l0cyxcbjI6dGFpbCxcbjM6ZGlnaXRzfT1cbmVuY29kZWQubWF0Y2gockJpZ0ludFBheWxvYWQpfHxGYWlsIGBEaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbnNuRGlnaXRzLmxlbmd0aD09PWxEaWdpdHN8fFxuRmFpbCBgVW5hcnktcHJlZml4ZWQgZGVjaW1hbCBkaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5sZXQgbkRpZ2l0cz1wYXJzZUludChzbkRpZ2l0cywxMCk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubkRpZ2l0cz0xMCoqLyogICAgICAgICAgICAgICAgICovbERpZ2l0cy1uRGlnaXRzO1xuIH1cblxudGFpbC5jaGFyQXQoMCk9PT0nOid8fEZhaWwgYFNlcGFyYXRvciBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5kaWdpdHMubGVuZ3RoPT09bkRpZ2l0c3x8XG5GYWlsIGBGaXhlZC1sZW5ndGggZGlnaXQgc2VxdWVuY2UgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG49QmlnSW50KGRpZ2l0cyk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubj0tKDEwbioqQmlnSW50KG5EaWdpdHMpLW4pO1xuIH1cblxucmV0dXJuIG47XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdHJpbmdFc2NhcGVzPUFycmF5KDB4MjIpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGNwKT0+e1xuc3dpdGNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApKXtcbmNhc2UnICc6XG5yZXR1cm4nIV8nO1xuY2FzZSchJzpcbnJldHVybichfCc7XG5kZWZhdWx0OlxucmV0dXJuIGAhJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKzB4MjEpfWA7fVxuXG4gfSk7XG5zdHJpbmdFc2NhcGVzWydeJy5jaGFyQ29kZUF0KDApXT0nX0AnO1xuc3RyaW5nRXNjYXBlc1snXycuY2hhckNvZGVBdCgwKV09J19fJztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeD0oc3RyKT0+XG5zdHIucmVwbGFjZSgvW1xcMC0hXl9dL2csKGNoKT0+c3RyaW5nRXNjYXBlc1tjaC5jaGFyQ29kZUF0KDApXSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT57XG5yZXR1cm4gZW5jb2RlZC5yZXBsYWNlKC8oW1xcMC0hX10pKC58XFxuKT8vZywoZXNjLHByZWZpeCxzdWZmaXgpPT57XG5zd2l0Y2goZXNjKXtcbmNhc2UnIV8nOlxucmV0dXJuJyAnO1xuY2FzZSchfCc6XG5yZXR1cm4nISc7XG5jYXNlJ19AJzpcbnJldHVybideJztcbmNhc2UnX18nOlxucmV0dXJuJ18nO1xuZGVmYXVsdDp7XG5jb25zdCBjaD0vKiAgICAgICAgICAgICAgICAgKi9zdWZmaXg7XG4vL1xuLy9cbnByZWZpeD09PSchJyYmc3VmZml4IT09dW5kZWZpbmVkJiZjaD49JyEnJiZjaDw9J0AnfHxcbkZhaWwgYGludmFsaWQgc3RyaW5nIGVzY2FwZTogJHtxKGVzYyl9YDtcbnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoLmNoYXJDb2RlQXQoMCktMHgyMSk7XG4gfX1cblxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeVN0cmluZ1N1ZmZpeD0oc3RyKT0+c3RyO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT5lbmNvZGVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ14nXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmNoYXJzLnB1c2goZW5jLCcgJyk7XG4gfVxucmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQ29tcGFjdEFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xubGV0IGRlcHRoPTA7XG4vL1xuLy9cbmxldCBuZXh0SW5kZXg9c2tpcCsxO1xubGV0IGN1cnJlbnRFbGVtZW50U3RhcnQ9c2tpcCsxO1xuZm9yKGNvbnN0ezA6Y2gsaW5kZXg6aX1vZiBlbmNvZGVkLm1hdGNoQWxsKC9bXFxeIF0vZykpe1xuY29uc3QgaW5kZXg9LyogICAgICAgICAgICAgICAgICovaTtcbmlmKGluZGV4PD1za2lwKXtcbmlmKGluZGV4PT09c2tpcCl7XG5jaD09PSdeJ3x8RmFpbCBgRW5jb2RlZCBhcnJheSBleHBlY3RlZDogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH1cbiB9ZWxzZSBpZihjaD09PSdeJyl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcHRoKz0xO1xuIH1lbHNle1xuLy9cbmlmKGluZGV4PT09bmV4dEluZGV4KXtcbi8vXG5kZXB0aC09MTtcbmRlcHRoPj0wfHxcbi8vXG5GYWlsIGB1bmV4cGVjdGVkIGFycmF5IGVsZW1lbnQgdGVybWluYXRvcjogJHtlbmNvZGVkLnNsaWNlKHNraXAsaW5kZXgrMil9YDtcbiB9XG5pZihkZXB0aD09PTApe1xuLy9cbmVsZW1lbnRzLnB1c2goXG5kZWNvZGVQYXNzYWJsZShlbmNvZGVkLnNsaWNlKGN1cnJlbnRFbGVtZW50U3RhcnQsaW5kZXgpKSk7XG5cbmN1cnJlbnRFbGVtZW50U3RhcnQ9aW5kZXgrMTtcbiB9XG4gfVxuLy9cbm5leHRJbmRleD1pbmRleCsxO1xuIH1cbmRlcHRoPT09MHx8RmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5uZXh0SW5kZXg9PT1lbmNvZGVkLmxlbmd0aHx8XG5GYWlsIGB1bnRlcm1pbmF0ZWQgYXJyYXkgZWxlbWVudDogJHtnZXRTdWZmaXgoXG5lbmNvZGVkLFxuY3VycmVudEVsZW1lbnRTdGFydClcbiB9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeUFycmF5PShhcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IGNoYXJzPVsnWyddO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpe1xuY29uc3QgZW5jPWVuY29kZVBhc3NhYmxlKGVsZW1lbnQpO1xuZm9yKGNvbnN0IGMgb2YgZW5jKXtcbmlmKGM9PT0nXFx1MDAwMCd8fGM9PT0nXFx1MDAwMScpe1xuY2hhcnMucHVzaCgnXFx1MDAwMScpO1xuIH1cbmNoYXJzLnB1c2goYyk7XG4gfVxuY2hhcnMucHVzaCgnXFx1MDAwMCcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUxlZ2FjeUFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xuY29uc3QgZWxlbUNoYXJzPVtdO1xuLy9cbi8vXG5sZXQgc3RpbGxUb1NraXA9c2tpcCsxO1xubGV0IGluRXNjYXBlPWZhbHNlO1xuZm9yKGNvbnN0IGMgb2YgZW5jb2RlZCl7XG5pZihzdGlsbFRvU2tpcD4wKXtcbnN0aWxsVG9Ta2lwLT0xO1xuaWYoc3RpbGxUb1NraXA9PT0wKXtcbmM9PT0nWyd8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoaW5Fc2NhcGUpe1xuYz09PSdcXHUwMDAwJ3x8XG5jPT09J1xcdTAwMDEnfHxcbkZhaWwgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIHUwMDAxIGVzY2FwZTogJHtjfWA7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDAnKXtcbmNvbnN0IGVuY29kZWRFbGVtZW50PWVsZW1DaGFycy5qb2luKCcnKTtcbmVsZW1DaGFycy5sZW5ndGg9MDtcbmNvbnN0IGVsZW1lbnQ9ZGVjb2RlUGFzc2FibGUoZW5jb2RlZEVsZW1lbnQpO1xuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDEnKXtcbmluRXNjYXBlPXRydWU7XG4vL1xuY29udGludWU7XG4gfWVsc2V7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9XG5pbkVzY2FwZT1mYWxzZTtcbiB9XG4haW5Fc2NhcGV8fEZhaWwgYHVuZXhwZWN0ZWQgZW5kIG9mIGVuY29kaW5nICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmVsZW1DaGFycy5sZW5ndGg9PT0wfHxcbkZhaWwgYGVuY29kaW5nIHRlcm1pbmF0ZWQgZWFybHk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlY29yZD0ocmVjb3JkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgbmFtZXM9cmVjb3JkTmFtZXMocmVjb3JkKTtcbmNvbnN0IHZhbHVlcz1yZWNvcmRWYWx1ZXMocmVjb3JkLG5hbWVzKTtcbnJldHVybiBgKCR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtuYW1lcyx2YWx1ZXNdKSxlbmNvZGVQYXNzYWJsZSl9YDtcbiB9O1xuXG5jb25zdCBkZWNvZGVSZWNvcmQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JygnKTtcbi8vXG4vL1xuY29uc3QgdW56aXBwZWRFbnRyaWVzPWRlY29kZUFycmF5KGVuY29kZWQsZGVjb2RlUGFzc2FibGUsc2tpcCsxKTtcbnVuemlwcGVkRW50cmllcy5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIGtleXMsdmFsdWVzIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W2tleXMsdmFsc109dW56aXBwZWRFbnRyaWVzO1xuXG5wYXNzU3R5bGVPZihrZXlzKT09PSdjb3B5QXJyYXknJiZcbnBhc3NTdHlsZU9mKHZhbHMpPT09J2NvcHlBcnJheScmJlxua2V5cy5sZW5ndGg9PT12YWxzLmxlbmd0aCYmXG5rZXlzLmV2ZXJ5KChrZXkpPT50eXBlb2Yga2V5PT09J3N0cmluZycpfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHJlY29yZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3QgbWFwRW50cmllcz1rZXlzLm1hcCgoa2V5LGkpPT5ba2V5LHZhbHNbaV1dKTtcbmNvbnN0IHJlY29yZD1oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cmllcykpO1xuYXNzZXJ0UmVjb3JkKHJlY29yZCwnZGVjb2RlZCByZWNvcmQnKTtcbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3QgZW5jb2RlVGFnZ2VkPSh0YWdnZWQsZW5jb2RlQXJyYXksZW5jb2RlUGFzc2FibGUpPT5cbiBgOiR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtnZXRUYWcodGFnZ2VkKSx0YWdnZWQucGF5bG9hZF0pLGVuY29kZVBhc3NhYmxlKX1gO1xuXG5jb25zdCBkZWNvZGVUYWdnZWQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JzonKTtcbi8vXG4vL1xuY29uc3QgdGFnZ2VkUGF5bG9hZD1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG50YWdnZWRQYXlsb2FkLmxlbmd0aD09PTJ8fFxuRmFpbCBgZXhwZWN0ZWQgdGFnLHBheWxvYWQgcGFpcjogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3RbdGFnLHBheWxvYWRdPXRhZ2dlZFBheWxvYWQ7XG5wYXNzU3R5bGVPZih0YWcpPT09J3N0cmluZyd8fFxuRmFpbCBgbm90IGEgdmFsaWQgdGFnZ2VkIGVuY29kaW5nOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVJlbW90YWJsZT0odW5zYWZlRW5jb2RlUmVtb3RhYmxlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPShyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUmVtb3RhYmxlKHIsaW5uZXJFbmNvZGUpO1xudHlwZW9mIGVuY29kaW5nPT09J3N0cmluZycmJmVuY29kaW5nLmNoYXJBdCgwKT09PSdyJ3x8XG5GYWlsIGBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiclwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUmVtb3RhYmxlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVSZW1vdGFibGU7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVByb21pc2U9KHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVQcm9taXNlPShwLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUHJvbWlzZShwLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nPyd8fFxuRmFpbCBgUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCI/XCI6ICR7ZW5jb2Rpbmd9YDtcbnZlcmlmeUVuY29kaW5nKGVuY29kaW5nLCdQcm9taXNlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVQcm9taXNlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVFcnJvcj0odW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVFcnJvcj0oZXJyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlRXJyb3IoZXJyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nISd8fFxuRmFpbCBgRXJyb3IgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiIVwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnRXJyb3InKTtcbnJldHVybiBlbmNvZGluZztcbiB9O1xucmV0dXJuIGVuY29kZUVycm9yO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRW5jb2RlPShlbmNvZGVTdHJpbmdTdWZmaXgsZW5jb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlOnVuc2FmZUVuY29kZVJlbW90YWJsZSxcbmVuY29kZVByb21pc2U6dW5zYWZlRW5jb2RlUHJvbWlzZSxcbmVuY29kZUVycm9yOnVuc2FmZUVuY29kZUVycm9yLFxudmVyaWZ5RW5jb2Rpbmc9KCk9PnsgfX09XG5vcHRpb25zO1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPW1ha2VFbmNvZGVSZW1vdGFibGUoXG51bnNhZmVFbmNvZGVSZW1vdGFibGUsXG52ZXJpZnlFbmNvZGluZyk7XG5cbmNvbnN0IGVuY29kZVByb21pc2U9bWFrZUVuY29kZVByb21pc2UodW5zYWZlRW5jb2RlUHJvbWlzZSx2ZXJpZnlFbmNvZGluZyk7XG5jb25zdCBlbmNvZGVFcnJvcj1tYWtlRW5jb2RlRXJyb3IodW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBpbm5lckVuY29kZT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBlbmNvZGVFcnJvcihwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzp7XG5yZXR1cm4ndic7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybid6JztcbiB9XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kZUJpbmFyeTY0KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xucmV0dXJuIGBzJHtlbmNvZGVTdHJpbmdTdWZmaXgocGFzc2FibGUpfWA7XG4gfVxuY2FzZSdib29sZWFuJzp7XG5yZXR1cm4gYGIke3Bhc3NhYmxlfWA7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybiBlbmNvZGVCaWdJbnQocGFzc2FibGUpO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGVuY29kZVByb21pc2UocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG4vL1xuY29uc3QgbmFtZT1uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbnJldHVybiBgeSR7ZW5jb2RlU3RyaW5nU3VmZml4KG5hbWUpfWA7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBlbmNvZGVBcnJheShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5yZXR1cm4gZW5jb2RlUmVjb3JkKHBhc3NhYmxlLGVuY29kZUFycmF5LGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJuIGVuY29kZVRhZ2dlZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBhICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbGxlY3Rpb24gcGFzc2FibGVgO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRW5jb2RlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBsaWJlcmFsRGVjb2RlcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgKi97XG5kZWNvZGVSZW1vdGFibGU6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWQsXG5kZWNvZGVQcm9taXNlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlRXJyb3I6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWR9O1xuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlSW5uZXJEZWNvZGU9KGRlY29kZVN0cmluZ1N1ZmZpeCxkZWNvZGVBcnJheSxvcHRpb25zKT0+e1xuY29uc3R7ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9PW9wdGlvbnM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5uZXJEZWNvZGU9KGVuY29kZWQsc2tpcD0wKT0+e1xuc3dpdGNoKGVuY29kZWQuY2hhckF0KHNraXApKXtcbmNhc2Undic6e1xucmV0dXJuIG51bGw7XG4gfVxuY2FzZSd6Jzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnZic6e1xucmV0dXJuIGRlY29kZUJpbmFyeTY0KGVuY29kZWQsc2tpcCk7XG4gfVxuY2FzZSdzJzp7XG5yZXR1cm4gZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xuIH1cbmNhc2UnYic6e1xuY29uc3Qgc3Vic3RyaW5nPWdldFN1ZmZpeChlbmNvZGVkLHNraXArMSk7XG5pZihzdWJzdHJpbmc9PT0ndHJ1ZScpe1xucmV0dXJuIHRydWU7XG4gfWVsc2UgaWYoc3Vic3RyaW5nPT09J2ZhbHNlJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxudGhyb3cgRmFpbCBgZXhwZWN0ZWQgZW5jb2RlZCBib29sZWFuIHRvIGJlIFwiYnRydWVcIiBvciBcImJmYWxzZVwiOiAke3N1YnN0cmluZ31gO1xuIH1cbmNhc2Unbic6XG5jYXNlJ3AnOntcbnJldHVybiBkZWNvZGVCaWdJbnQoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCkpO1xuIH1cbmNhc2Uncic6e1xucmV0dXJuIGRlY29kZVJlbW90YWJsZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSc/Jzp7XG5yZXR1cm4gZGVjb2RlUHJvbWlzZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSchJzp7XG5yZXR1cm4gZGVjb2RlRXJyb3IoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UneSc6e1xuLy9cbmNvbnN0IG5hbWU9ZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ1snOlxuY2FzZSdeJzp7XG4vL1xucmV0dXJuIGRlY29kZUFycmF5KGVuY29kZWQsaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZScoJzp7XG5yZXR1cm4gZGVjb2RlUmVjb3JkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZSc6Jzp7XG5yZXR1cm4gZGVjb2RlVGFnZ2VkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGRhdGFiYXNlIGtleTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRGVjb2RlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGFzc2FibGVLaXQ9KG9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZT0ocixfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cn1gLFxuZW5jb2RlUHJvbWlzZT0ocCxfKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3B9YCxcbmVuY29kZUVycm9yPShlcnIsXyk9PkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyfWAsXG5mb3JtYXQ9J2xlZ2FjeU9yZGVyZWQnLFxuXG5kZWNvZGVSZW1vdGFibGU9KGVuY29kaW5nLF8pPT5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlUHJvbWlzZT0oZW5jb2RpbmcsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlRXJyb3I9KGVuY29kaW5nLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWB9PVxub3B0aW9ucztcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbmNvZGVQYXNzYWJsZTtcbmNvbnN0IGVuY29kZU9wdGlvbnM9e2VuY29kZVJlbW90YWJsZSxlbmNvZGVQcm9taXNlLGVuY29kZUVycm9yLGZvcm1hdH07XG5pZihmb3JtYXQ9PT0nY29tcGFjdE9yZGVyZWQnKXtcbmNvbnN0IGxpYmVyYWxEZWNvZGU9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmxpYmVyYWxEZWNvZGVycyk7XG5cbi8qXG5cblxuXG4gICAgICovXG5jb25zdCB2ZXJpZnlFbmNvZGluZz0oZW5jb2RpbmcsbGFiZWwpPT57XG4hZW5jb2RpbmcubWF0Y2gockMwKXx8XG5GYWlsIGAke2IoXG5sYWJlbClcbiB9IGVuY29kaW5nIG11c3Qgbm90IGNvbnRhaW4gYSBDMCBjb250cm9sIGNoYXJhY3RlcjogJHtlbmNvZGluZ31gO1xuY29uc3QgZGVjb2RlZD1kZWNvZGVDb21wYWN0QXJyYXkoIGBediAke2VuY29kaW5nfSB2IGAsbGliZXJhbERlY29kZSk7XG5pc0FycmF5KGRlY29kZWQpJiZcbmRlY29kZWQubGVuZ3RoPT09MyYmXG5kZWNvZGVkWzBdPT09bnVsbCYmXG5kZWNvZGVkWzJdPT09bnVsbHx8XG5GYWlsIGAke2IobGFiZWwpfSBlbmNvZGluZyBtdXN0IGJlIGVtYmVkZGFibGU6ICR7ZW5jb2Rpbmd9YDtcbiB9O1xuY29uc3QgZW5jb2RlQ29tcGFjdD1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZW5jb2RlQ29tcGFjdEFycmF5LFxuey4uLmVuY29kZU9wdGlvbnMsdmVyaWZ5RW5jb2Rpbmd9KTtcblxuZW5jb2RlUGFzc2FibGU9KHBhc3NhYmxlKT0+IGB+JHtlbmNvZGVDb21wYWN0KHBhc3NhYmxlKX1gO1xuIH1lbHNlIGlmKGZvcm1hdD09PSdsZWdhY3lPcmRlcmVkJyl7XG5lbmNvZGVQYXNzYWJsZT1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5lbmNvZGVMZWdhY3lBcnJheSxcbmVuY29kZU9wdGlvbnMpO1xuXG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZm9ybWF0OiAke3EoZm9ybWF0KX1gO1xuIH1cblxuY29uc3QgZGVjb2RlT3B0aW9ucz17ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9O1xuY29uc3QgZGVjb2RlQ29tcGFjdD1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZGVjb2RlQ29tcGFjdEFycmF5LFxuZGVjb2RlT3B0aW9ucyk7XG5cbmNvbnN0IGRlY29kZUxlZ2FjeT1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5kZWNvZGVMZWdhY3lBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVQYXNzYWJsZT0oZW5jb2RlZCk9Pntcbi8vXG4vL1xuLy9cbmlmKGVuY29kZWQuY2hhckF0KDApPT09J34nKXtcbnJldHVybiBkZWNvZGVDb21wYWN0KGVuY29kZWQsMSk7XG4gfVxucmV0dXJuIGRlY29kZUxlZ2FjeShlbmNvZGVkKTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtlbmNvZGVQYXNzYWJsZSxkZWNvZGVQYXNzYWJsZX0pO1xuIH07JGjNj19vbmNlLm1ha2VQYXNzYWJsZUtpdChtYWtlUGFzc2FibGVLaXQpO1xuaGFyZGVuKG1ha2VQYXNzYWJsZUtpdCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVBhc3NhYmxlPShlbmNvZGVPcHRpb25zKT0+e1xuY29uc3R7ZW5jb2RlUGFzc2FibGV9PW1ha2VQYXNzYWJsZUtpdChlbmNvZGVPcHRpb25zKTtcbnJldHVybiBlbmNvZGVQYXNzYWJsZTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlUGFzc2FibGUobWFrZUVuY29kZVBhc3NhYmxlKTtcbmhhcmRlbihtYWtlRW5jb2RlUGFzc2FibGUpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVQYXNzYWJsZT0oZGVjb2RlT3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZGVjb2RlT3B0aW9ucyk7XG5yZXR1cm4gZGVjb2RlUGFzc2FibGU7XG4gfTskaM2PX29uY2UubWFrZURlY29kZVBhc3NhYmxlKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZURlY29kZVBhc3NhYmxlKTtcblxuY29uc3QgICAgICAgIGlzRW5jb2RlZFJlbW90YWJsZT0oZW5jb2RlZCk9PmVuY29kZWQuY2hhckF0KDApPT09J3InOyRozY9fb25jZS5pc0VuY29kZWRSZW1vdGFibGUoaXNFbmNvZGVkUmVtb3RhYmxlKTtcbmhhcmRlbihpc0VuY29kZWRSZW1vdGFibGUpO1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFzc1N0eWxlUHJlZml4ZXM9e1xuZXJyb3I6JyEnLFxuY29weVJlY29yZDonKCcsXG50YWdnZWQ6JzonLFxucHJvbWlzZTonPycsXG5jb3B5QXJyYXk6J1teJyxcbmJvb2xlYW46J2InLFxubnVtYmVyOidmJyxcbmJpZ2ludDonbnAnLFxucmVtb3RhYmxlOidyJyxcbnN0cmluZzoncycsXG5udWxsOid2JyxcbnN5bWJvbDoneScsXG4vL1xuLy9cbi8vXG51bmRlZmluZWQ6J3onfTskaM2PX29uY2UucGFzc1N0eWxlUHJlZml4ZXMocGFzc1N0eWxlUHJlZml4ZXMpO1xuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUHJlZml4ZXMsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUHJlZml4ZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVjb3JkTmFtZXMiOlsicmVjb3JkTmFtZXMiXSwicmVjb3JkVmFsdWVzIjpbInJlY29yZFZhbHVlcyJdLCJ6ZXJvUGFkIjpbInplcm9QYWQiXSwibWFrZVBhc3NhYmxlS2l0IjpbIm1ha2VQYXNzYWJsZUtpdCJdLCJtYWtlRW5jb2RlUGFzc2FibGUiOlsibWFrZUVuY29kZVBhc3NhYmxlIl0sIm1ha2VEZWNvZGVQYXNzYWJsZSI6WyJtYWtlRGVjb2RlUGFzc2FibGUiXSwiaXNFbmNvZGVkUmVtb3RhYmxlIjpbImlzRW5jb2RlZFJlbW90YWJsZSJdLCJwYXNzU3R5bGVQcmVmaXhlcyI6WyJwYXNzU3R5bGVQcmVmaXhlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABfnPAyUiIAAFIiAAArAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL2VuY29kZVRvQ2FwRGF0YS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiUUNMQVNTIiwibWFrZURlY29kZUZyb21DYXBEYXRhIiwibWFrZUVuY29kZVRvQ2FwRGF0YSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGlzT2JqZWN0LGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxcbmRlZmluZVByb3BlcnRpZXMsXG5pcyxcbmVudHJpZXMsXG5mcm9tRW50cmllcyxcbmZyZWV6ZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBRQ0xBU1M9J0BxY2xhc3MnOyRozY9fb25jZS5RQ0xBU1MoUUNMQVNTKTtcblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgaGFzUUNsYXNzPShlbmNvZGVkKT0+aGFzT3duUHJvcGVydHlPZihlbmNvZGVkLFFDTEFTUyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHFjbGFzc01hdGNoZXM9KGVuY29kZWQscWNsYXNzKT0+XG5pc09iamVjdChlbmNvZGVkKSYmXG4haXNBcnJheShlbmNvZGVkKSYmXG5oYXNRQ2xhc3MoZW5jb2RlZCkmJlxuZW5jb2RlZFtRQ0xBU1NdPT09cWNsYXNzO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YT0ocmVtKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIpPT5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtlcnJ9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9DYXBEYXRhPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9ZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YSxcbmVuY29kZVByb21pc2VUb0NhcERhdGE9ZG9udEVuY29kZVByb21pc2VUb0NhcERhdGEsXG5lbmNvZGVFcnJvclRvQ2FwRGF0YT1kb250RW5jb2RlRXJyb3JUb0NhcERhdGF9PVxuZW5jb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvQ2FwRGF0YVJlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJue1tRQ0xBU1NdOid1bmRlZmluZWQnfTtcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJue1tRQ0xBU1NdOidOYU4nfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybntbUUNMQVNTXTonSW5maW5pdHknfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106Jy1JbmZpbml0eSd9O1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybntcbltRQ0xBU1NdOidiaWdpbnQnLFxuZGlnaXRzOlN0cmluZyhwYXNzYWJsZSl9O1xuXG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybntcbltRQ0xBU1NdOidzeW1ib2wnLFxubmFtZX07XG5cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmlmKGhhc093blByb3BlcnR5T2YocGFzc2FibGUsUUNMQVNTKSl7XG4vL1xuY29uc3R7W1FDTEFTU106cWNsYXNzVmFsdWUsLi4ucmVzdH09cGFzc2FibGU7XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PXtcbltRQ0xBU1NdOidoaWxiZXJ0Jyxcbm9yaWdpbmFsOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHFjbGFzc1ZhbHVlKX07XG5cbmlmKG93bktleXMocmVzdCkubGVuZ3RoPj0xKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJlc3VsdC5yZXN0PWVuY29kZVRvQ2FwRGF0YVJlY3VyKGZyZWV6ZShyZXN0KSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb0NhcERhdGFSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbltRQ0xBU1NdOid0YWdnZWQnLFxudGFnOmdldFRhZyhwYXNzYWJsZSksXG5wYXlsb2FkOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YShcbnBhc3NhYmxlLFxuZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuXG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ3Nsb3QnKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUylcbiB9ICR7cSgnc2xvdCcpfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVByb21pc2VUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MsXG4nc2xvdCcpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVFcnJvclRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cik7XG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ2Vycm9yJykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ2Vycm9yJylcbiB9OiAke2VuY29kZWR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvQ2FwRGF0YT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpKTtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9DYXBEYXRhKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9DYXBEYXRhKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShzbG90RW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSBvciBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7c2xvdEVuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0oZXJyb3JFbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlcnJvckVuY29kaW5nfWA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21DYXBEYXRhPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT1kb250RGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT1kb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YX09XG5kZWNvZGVPcHRpb25zO1xuXG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT09PWRlY29kZVByb21pc2VGcm9tQ2FwRGF0YXx8XG5GYWlsIGBBbiBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbiBmb3Igbm93OiBJZiBlaXRoZXIgZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEgb3IgZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhIGlzIHByb3ZpZGVkLCBib3RoIG11c3QgYmUgcHJvdmlkZWQgYW5kIHRoZXkgbXVzdCBiZSB0aGUgc2FtZTogJHtxKFxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEpXG4gfSB2cyAke3EoZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhKX1gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tQ2FwRGF0YT0oanNvbkVuY29kZWQpPT57XG5pZighaXNPYmplY3QoanNvbkVuY29kZWQpKXtcbi8vXG5yZXR1cm4ganNvbkVuY29kZWQ7XG4gfVxuaWYoaXNBcnJheShqc29uRW5jb2RlZCkpe1xucmV0dXJuIGpzb25FbmNvZGVkLm1hcCgoZW5jb2RlZFZhbCk9PmRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpKTtcbiB9ZWxzZSBpZihoYXNRQ2xhc3MoanNvbkVuY29kZWQpKXtcbmNvbnN0IHFjbGFzcz1qc29uRW5jb2RlZFtRQ0xBU1NdO1xudHlwZW9mIHFjbGFzcz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgJHtxKFFDTEFTUyl9IHR5cGVvZiAke3EodHlwZW9mIHFjbGFzcyl9YDtcbnN3aXRjaChxY2xhc3Mpe1xuLy9cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PWpzb25FbmNvZGVkO1xudHlwZW9mIGRpZ2l0cz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZGlnaXRzIHR5cGVvZiAke3EodHlwZW9mIGRpZ2l0cyl9YDtcbnJldHVybiBCaWdJbnQoZGlnaXRzKTtcbiB9XG5jYXNlJ0BAYXN5bmNJdGVyYXRvcic6e1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvcjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09anNvbkVuY29kZWQ7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09anNvbkVuY29kZWQ7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcsZGVjb2RlRnJvbUNhcERhdGEocGF5bG9hZCkpO1xuIH1cbmNhc2Unc2xvdCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlZD1kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGRlY29kZWQ7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZGVjb2RlZD1kZWNvZGVFcnJvckZyb21DYXBEYXRhKFxuanNvbkVuY29kZWQsXG5kZWNvZGVGcm9tQ2FwRGF0YSk7XG5cbmlmKHBhc3NTdHlsZU9mKGRlY29kZWQpPT09J2Vycm9yJyl7XG5yZXR1cm4gZGVjb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YSBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7ZGVjb2RlZH1gO1xuIH1cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09anNvbkVuY29kZWQ7XG5oYXNPd25Qcm9wZXJ0eU9mKGpzb25FbmNvZGVkLCdvcmlnaW5hbCcpfHxcbkZhaWwgYEludmFsaWQgSGlsYmVydCBIb3RlbCBlbmNvZGluZyAke2pzb25FbmNvZGVkfWA7XG4vL1xuY29uc3QgcmVzdWx0PXtbUUNMQVNTXTpkZWNvZGVGcm9tQ2FwRGF0YShvcmlnaW5hbCl9O1xuaWYoaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwncmVzdCcpKXtcbmNvbnN0IGlzTm9uRW1wdHlPYmplY3Q9XG50eXBlb2YgcmVzdD09PSdvYmplY3QnJiZcbnJlc3QhPT1udWxsJiZcbm93bktleXMocmVzdCkubGVuZ3RoPj0xO1xuaWYoIWlzTm9uRW1wdHlPYmplY3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyBtdXN0IGJlIGEgbm9uLWVtcHR5IG9iamVjdDogJHtyZXN0fWA7XG4gfVxuY29uc3QgcmVzdE9iaj1kZWNvZGVGcm9tQ2FwRGF0YShyZXN0KTtcbi8vXG4vL1xuLy9cbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RPYmosUUNMQVNTKXx8XG5GYWlsIGBSZXN0IG11c3Qgbm90IGNvbnRhaW4gaXRzIG93biBkZWZpbml0aW9uIG9mICR7cShRQ0xBU1MpfWA7XG5kZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHJlc3RPYmopKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG5jYXNlJ2liaWQnOntcbnRocm93IEZhaWwgYFRoZSBjYXBEYXRhIHByb3RvY29sIG5vIGxvbmdlciBzdXBwb3J0cyAke3EoUUNMQVNTKX0gJHtxKFxucWNsYXNzKVxuIH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1lbHNle1xuYXNzZXJ0KHR5cGVvZiBqc29uRW5jb2RlZD09PSdvYmplY3QnJiZqc29uRW5jb2RlZCE9PW51bGwpO1xuY29uc3QgZGVjb2RlRW50cnk9KFtuYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSAke3EobmFtZSl9IG9mICR7anNvbkVuY29kZWR9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbUNhcERhdGEoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGpzb25FbmNvZGVkKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbUNhcERhdGEpO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVGcm9tQ2FwRGF0YShtYWtlRGVjb2RlRnJvbUNhcERhdGEpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUUNMQVNTIjpbIlFDTEFTUyJdLCJtYWtlRW5jb2RlVG9DYXBEYXRhIjpbIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwibWFrZURlY29kZUZyb21DYXBEYXRhIjpbIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAPShurLiIAAC4iAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyIsIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtpcyxlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbmNvbnN0IEJBTkc9JyEnLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBEQVNIPSctJy5jaGFyQ29kZUF0KDApO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdGFydHNTcGVjaWFsPShlbmNvZGVkU3RyKT0+e1xuaWYoZW5jb2RlZFN0cj09PScnKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuY29uc3QgY29kZT1lbmNvZGVkU3RyLmNoYXJDb2RlQXQoMCk7XG4vL1xucmV0dXJuIEJBTkc8PWNvZGUmJmNvZGU8PURBU0g7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnRFbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtyZW19YDtcblxuY29uc3QgZG9udEVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbSk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwcm9tfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVFcnJvclRvU21hbGxjYXBzPShlcnIpPT5cbkZhaWwgYGVycm9yIG9iamVjdCB1bmV4cGVjdGVkOiAke3EoZXJyKX1gO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVUb1NtYWxsY2Fwcz0oZW5jb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHM9ZG9udEVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPWRvbnRFbmNvZGVQcm9taXNlVG9TbWFsbGNhcHMsXG5lbmNvZGVFcnJvclRvU21hbGxjYXBzPWRvbnRFbmNvZGVFcnJvclRvU21hbGxjYXBzfT1cbmVuY29kZU9wdGlvbnM7XG5cbmNvbnN0IGFzc2VydEVuY29kZWRFcnJvcj0oZW5jb2RpbmcpPT57XG50eXBlb2YgZW5jb2Rpbmc9PT0nb2JqZWN0JyYmaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI2Vycm9yJyl8fFxuRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgaGF2ZSBcIiNlcnJvclwiIHByb3BlcnR5OiAke3EoXG5lbmNvZGluZylcbiB9YDtcbi8vXG5jb25zdCBtZXNzYWdlPWVuY29kaW5nWycjZXJyb3InXTtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZycmJihcbiFzdGFydHNTcGVjaWFsKG1lc3NhZ2UpfHxtZXNzYWdlLmNoYXJBdCgwKT09PSchJyl8fFxuRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgaGF2ZSBzdHJpbmcgbWVzc2FnZTogJHtxKG1lc3NhZ2UpfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzUmVjdXI9KHBhc3NhYmxlKT0+e1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocGFzc2FibGUpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzp7XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZihzdGFydHNTcGVjaWFsKHBhc3NhYmxlKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBgISR7cGFzc2FibGV9YDtcbiB9XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4nI3VuZGVmaW5lZCc7XG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4ocGFzc2FibGUpKXtcbnJldHVybicjTmFOJztcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybicjSW5maW5pdHknO1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09LUluZmluaXR5KXtcbnJldHVybicjLUluZmluaXR5JztcbiB9XG4vL1xucmV0dXJuIGlzKHBhc3NhYmxlLC0wKT8wOnBhc3NhYmxlO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdCBzdHI9U3RyaW5nKHBhc3NhYmxlKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICovcGFzc2FibGU8MG4/c3RyOmArJHtzdHJ9YCk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybiBgJSR7bmFtZX1gO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgbmFtZXM9b3duS2V5cyhwYXNzYWJsZSkuc29ydCgpO1xucmV0dXJuIGZyb21FbnRyaWVzKFxubmFtZXMubWFwKChuYW1lKT0+W1xuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihuYW1lKSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGVbbmFtZV0pXSkpO1xuXG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJue1xuJyN0YWcnOmVuY29kZVRvU21hbGxjYXBzUmVjdXIoZ2V0VGFnKHBhc3NhYmxlKSksXG5wYXlsb2FkOmVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGUucGF5bG9hZCl9O1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyhcbnBhc3NhYmxlLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5cbmlmKHR5cGVvZiByZXN1bHQ9PT0nc3RyaW5nJyYmcmVzdWx0LmNoYXJBdCgwKT09PSckJyl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiRcIjogJHtyZXN1bHR9YDtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVQcm9taXNlVG9TbWFsbGNhcHMoXG5wYXNzYWJsZSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuXG5pZih0eXBlb2YgcmVzdWx0PT09J3N0cmluZycmJnJlc3VsdC5jaGFyQXQoMCk9PT0nJicpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCImXCI6ICR7cmVzdWx0fWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgcmVzdWx0PWVuY29kZUVycm9yVG9TbWFsbGNhcHMocGFzc2FibGUsZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5hc3NlcnRFbmNvZGVkRXJyb3IocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiBVbnJlY29nbml6ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5jb25zdCBlbmNvZGVUb1NtYWxsY2Fwcz0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHJlc3VsdD1oYXJkZW4oXG5lbmNvZGVFcnJvclRvU21hbGxjYXBzKHBhc3NhYmxlLGVuY29kZVRvU21hbGxjYXBzUmVjdXIpKTtcblxuYXNzZXJ0RW5jb2RlZEVycm9yKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnJldHVybiBoYXJkZW4oZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZSkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvU21hbGxjYXBzKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9TbWFsbGNhcHMobWFrZUVuY29kZVRvU21hbGxjYXBzKTtcbmhhcmRlbihtYWtlRW5jb2RlVG9TbWFsbGNhcHMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtxKGVuY29kaW5nKX1gO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9ZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9PVxuZGVjb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVjb2RlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT57XG5zd2l0Y2godHlwZW9mIGVuY29kaW5nKXtcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZighc3RhcnRzU3BlY2lhbChlbmNvZGluZykpe1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNvbnN0IGM9ZW5jb2RpbmcuY2hhckF0KDApO1xuc3dpdGNoKGMpe1xuY2FzZSchJzp7XG4vL1xucmV0dXJuIGVuY29kaW5nLnNsaWNlKDEpO1xuIH1cbmNhc2UnJSc6e1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShlbmNvZGluZy5zbGljZSgxKSk7XG4gfVxuY2FzZScjJzp7XG5zd2l0Y2goZW5jb2Rpbmcpe1xuY2FzZScjdW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnI05hTic6e1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJyNJbmZpbml0eSc6e1xucmV0dXJuIEluZmluaXR5O1xuIH1cbmNhc2UnIy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bmtub3duIGNvbnN0YW50IFwiJHtxKGVuY29kaW5nKX1cImAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1cbmNhc2UnKyc6XG5jYXNlJy0nOntcbnJldHVybiBCaWdJbnQoZW5jb2RpbmcpO1xuIH1cbmNhc2UnJCc6e1xuY29uc3QgcmVzdWx0PWRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG4vL1xuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdyZW1vdGFibGUnKXtcbkZhaWwgYGludGVybmFsOiBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhIHJlbW90YWJsZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNhc2UnJic6e1xuY29uc3QgcmVzdWx0PWRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdwcm9taXNlJyl7XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGEgcHJvbWlzZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgU3BlY2lhbCBjaGFyICR7cShcbmMpXG4gfSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTogJHtlbmNvZGluZ31gO1xuIH19XG5cbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoZW5jb2Rpbmc9PT1udWxsKXtcbnJldHVybiBlbmNvZGluZztcbiB9XG5cbmlmKGlzQXJyYXkoZW5jb2RpbmcpKXtcbnJldHVybiBlbmNvZGluZy5tYXAoKHZhbCk9PmRlY29kZUZyb21TbWFsbGNhcHModmFsKSk7XG4gfVxuXG5pZihoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjdGFnJykpe1xuY29uc3R7JyN0YWcnOnRhZyxwYXlsb2FkLC4uLnJlc3R9PWVuY29kaW5nO1xudHlwZW9mIHRhZz09PSdzdHJpbmcnfHxcbkZhaWwgYFZhbHVlIG9mIFwiI3RhZ1wiLCB0aGUgdGFnLCBtdXN0IGJlIGEgc3RyaW5nOiAke2VuY29kaW5nfWA7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgI3RhZyByZWNvcmQgdW5leHBlY3RlZCBwcm9wZXJ0aWVzOiAke3Eob3duS2V5cyhyZXN0KSl9YDtcbnJldHVybiBtYWtlVGFnZ2VkKFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyh0YWcpLFxuZGVjb2RlRnJvbVNtYWxsY2FwcyhwYXlsb2FkKSk7XG5cbiB9XG5cbmlmKGhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpKXtcbmNvbnN0IHJlc3VsdD1kZWNvZGVFcnJvckZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG5wYXNzU3R5bGVPZihyZXN1bHQpPT09J2Vycm9yJ3x8XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhbiBlcnJvcjogJHtyZXN1bHR9YDtcbnJldHVybiByZXN1bHQ7XG4gfVxuXG5jb25zdCBkZWNvZGVFbnRyeT0oW2VuY29kZWROYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIGVuY29kZWROYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke3EoXG5lbmNvZGVkTmFtZSlcbiB9IG9mICR7ZW5jb2Rpbmd9IG11c3QgYmUgYSBzdHJpbmdgO1xuZW5jb2RlZE5hbWUuY2hhckF0KDApIT09JyMnfHxcbkZhaWwgYFVucmVjb2duaXplZCByZWNvcmQgdHlwZSAke3EoZW5jb2RlZE5hbWUpfTogJHtlbmNvZGluZ31gO1xuY29uc3QgbmFtZT1kZWNvZGVGcm9tU21hbGxjYXBzKGVuY29kZWROYW1lKTtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRGVjb2RlZCBwcm9wZXJ0eSBuYW1lICR7bmFtZX0gZnJvbSAke2VuY29kaW5nfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnJldHVybltuYW1lLGRlY29kZUZyb21TbWFsbGNhcHMoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGVuY29kaW5nKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IHVucmVjb2duaXplZCBKU09OIHR5cGVvZiAke3EoXG50eXBlb2YgZW5jb2RpbmcpXG4gfTogJHtlbmNvZGluZ31gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xucmV0dXJuIGhhcmRlbihkZWNvZGVGcm9tU21hbGxjYXBzKTtcbiB9OyRozY9fb25jZS5tYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyhtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiOlsibWFrZUVuY29kZVRvU21hbGxjYXBzIl0sIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIjpbIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEULMv0QIwAAECMAACoAAABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC1qdXN0aW4uanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0IiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIl0sImV4cG9ydHMiOlsiZGVjb2RlVG9KdXN0aW4iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTmF0LGdldEVycm9yQ29uc3RydWN0b3IsaXNPYmplY3QscGFzc2FibGVTeW1ib2xGb3JOYW1lLHEsWCxGYWlsLFFDTEFTUzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtbXCJRQ0xBU1NcIiwgWyRozY9fYSA9PiAoUUNMQVNTID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtzdHJpbmdpZnk6cXVvdGV9PUpTT047XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVllc0luZGVudGVyPSgpPT57XG5jb25zdCBzdHJpbmdzPVtdO1xubGV0IGxldmVsPTA7XG5sZXQgbmVlZFNwYWNlPWZhbHNlO1xuY29uc3QgbGluZT0oKT0+e1xubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaCgnXFxuJywnICAnLnJlcGVhdChsZXZlbCkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHtcbm9wZW46KG9wZW5CcmFja2V0KT0+e1xubGV2ZWwrPTE7XG5pZihuZWVkU3BhY2Upe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaChvcGVuQnJhY2tldCk7XG4gfSxcbmxpbmUsXG5uZXh0Oih0b2tlbik9PntcbmlmKG5lZWRTcGFjZSYmdG9rZW4hPT0nLCcpe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPXRydWU7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKHRva2VuKTtcbiB9LFxuY2xvc2U6KGNsb3NlQnJhY2tldCk9PntcbmFzc2VydChsZXZlbD49MSk7XG5sZXZlbC09MTtcbmxpbmUoKTtcbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+e1xuYXNzZXJ0LmVxdWFsKGxldmVsLDApO1xucmV0dXJuIHN0cmluZ3Muam9pbignJyk7XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZFBhaXJQYXR0ZXJuPS9eKD86XFx3XFx3fDw8fD4+fFxcK1xcK3wtLXw8IXwtPikkLztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZU5vSW5kZW50ZXI9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdzPVtdO1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PnN0cmluZ3MucHVzaChvcGVuQnJhY2tldCksXG5saW5lOigpPT5zdHJpbmdzLmxlbmd0aCxcbm5leHQ6KHRva2VuKT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEpe1xuY29uc3QgbGFzdD1zdHJpbmdzW3N0cmluZ3MubGVuZ3RoLTFdO1xuLy9cbmlmKGxhc3QubGVuZ3RoPj0xJiZ0b2tlbi5sZW5ndGg+PTEpe1xuY29uc3QgcGFpcj0gYCR7bGFzdFtsYXN0Lmxlbmd0aC0xXX0ke3Rva2VuWzBdfWA7XG5pZihiYWRQYWlyUGF0dGVybi50ZXN0KHBhaXIpKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbiB9XG4gfVxucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5pZihzdHJpbmdzLmxlbmd0aD49MSYmc3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXT09PScsJyl7XG5zdHJpbmdzLnBvcCgpO1xuIH1cbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+c3RyaW5ncy5qb2luKCcnKX0pO1xuXG4gfTtcblxuY29uc3QgaWRlbnRQYXR0ZXJuPS9eW2EtekEtWl1cXHcqJC87XG5oYXJkZW4oaWRlbnRQYXR0ZXJuKTtcbmNvbnN0IEF0QXRQcmVmaXhQYXR0ZXJuPS9eQEAoLiopJC87XG5oYXJkZW4oQXRBdFByZWZpeFBhdHRlcm4pO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZVRvSnVzdGluPShlbmNvZGluZyxzaG91bGRJbmRlbnQ9ZmFsc2Usc2xvdHM9W10pPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZT0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG5yZXR1cm47XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIHFjbGFzcyB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5hc3NlcnQoIWlzQXJyYXkocmF3VHJlZSkpO1xuc3dpdGNoKHJhd1RyZWVbJ0BxY2xhc3MnXSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG5yZXR1cm47XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm47XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbnJldHVybjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5jb25zdCBzeW09cGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuYXNzZXJ0LnR5cGVvZihzeW0sJ3N5bWJvbCcpO1xucmV0dXJuO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YodGFnLCdzdHJpbmcnKTtcbnByZXBhcmUocGF5bG9hZCk7XG5yZXR1cm47XG4gfVxuY2FzZSdzbG90Jzp7XG5jb25zdHtpbmRleCxpZmFjZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoaW5kZXgsJ251bWJlcicpO1xuTmF0KGluZGV4KTtcbmlmKGlmYWNlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoaWZhY2UsJ3N0cmluZycpO1xuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG4nb3JpZ2luYWwnaW4gcmF3VHJlZXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtyYXdUcmVlfWA7XG5wcmVwYXJlKG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuaWYodHlwZW9mIHJlc3QhPT0nb2JqZWN0Jyl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3RgO1xuIH1cbmlmKHJlc3Q9PT1udWxsKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBudWxsYDtcbiB9XG5pZihpc0FycmF5KHJlc3QpKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBhbiBhcnJheWA7XG4gfVxuaWYoUUNMQVNTIGluIHJlc3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyAke3Jlc3R9IG11c3Qgbm90IGNvbnRhaW4gJHtxKFFDTEFTUyl9YDtcbiB9XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnByZXBhcmUocmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdHtuYW1lLG1lc3NhZ2V9PXJhd1RyZWU7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBuYW1lKX1gO1xuIH1cbmdldEVycm9yQ29uc3RydWN0b3IobmFtZSkhPT11bmRlZmluZWR8fFxuRmFpbCBgTXVzdCBiZSB0aGUgbmFtZSBvZiBhbiBFcnJvciBjb25zdHJ1Y3RvciAke25hbWV9YDtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBlcnJvciBtZXNzYWdlIHR5cGVvZiAke3EodHlwZW9mIG1lc3NhZ2UpfWA7XG5yZXR1cm47XG4gfVxuXG5kZWZhdWx0OntcbmFzc2VydC5mYWlsKFggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xucHJlcGFyZShyYXdUcmVlW2ldKTtcbiB9XG4gfWVsc2V7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJhd1RyZWUpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbiB9XG5wcmVwYXJlKHJhd1RyZWVbbmFtZV0pO1xuIH1cbiB9XG4gfTtcblxuY29uc3QgbWFrZUluZGVudGVyPXNob3VsZEluZGVudD9tYWtlWWVzSW5kZW50ZXI6bWFrZU5vSW5kZW50ZXI7XG5sZXQgb3V0PW1ha2VJbmRlbnRlcigpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlY29kZT0ocmF3VHJlZSk9Pntcbi8vXG5yZXR1cm4gcmVjdXIocmF3VHJlZSk7XG4gfTtcblxuY29uc3QgZGVjb2RlUHJvcGVydHk9KG5hbWUsdmFsdWUpPT57XG5vdXQubGluZSgpO1xuaWYobmFtZT09PSdfX3Byb3RvX18nKXtcbi8vXG4vL1xuLy9cbi8vXG5vdXQubmV4dCggYFtcIl9fcHJvdG9fX1wiXTpgKTtcbiB9ZWxzZSBpZihpZGVudFBhdHRlcm4udGVzdChuYW1lKSl7XG5vdXQubmV4dCggYCR7bmFtZX06YCk7XG4gfWVsc2V7XG5vdXQubmV4dCggYCR7cXVvdGUobmFtZSl9OmApO1xuIH1cbmRlY29kZSh2YWx1ZSk7XG5vdXQubmV4dCgnLCcpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCByZWN1cj0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG4vL1xucmV0dXJuIG91dC5uZXh0KHF1b3RlKHJhd1RyZWUpKTtcbiB9XG4vL1xuYXNzZXJ0LnR5cGVvZihyYXdUcmVlLCdvYmplY3QnKTtcbmFzc2VydChyYXdUcmVlIT09bnVsbCk7XG5pZihRQ0xBU1MgaW4gcmF3VHJlZSl7XG5jb25zdCBxY2xhc3M9cmF3VHJlZVtRQ0xBU1NdO1xuYXNzZXJ0LnR5cGVvZihxY2xhc3MsJ3N0cmluZycpO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbi8vXG4vL1xuLy9cbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuLy9cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnTmFOJzpcbmNhc2UnSW5maW5pdHknOlxuY2FzZSctSW5maW5pdHknOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQocWNsYXNzKTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihkaWdpdHMsJ3N0cmluZycpO1xucmV0dXJuIG91dC5uZXh0KCBgJHtCaWdJbnQoZGlnaXRzKX1uYCk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQoJ1N5bWJvbC5hc3luY0l0ZXJhdG9yJyk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbmNvbnN0IHJlZ2lzdGVyZWROYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKHJlZ2lzdGVyZWROYW1lPT09dW5kZWZpbmVkKXtcbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5hc3NlcnQobWF0Y2ghPT1udWxsKTtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmFzc2VydChTeW1ib2xbc3VmZml4XT09PXN5bSk7XG5hc3NlcnQoaWRlbnRQYXR0ZXJuLnRlc3Qoc3VmZml4KSk7XG5yZXR1cm4gb3V0Lm5leHQoIGBTeW1ib2wuJHtzdWZmaXh9YCk7XG4gfVxucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLmZvcigke3F1b3RlKHJlZ2lzdGVyZWROYW1lKX0pYCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0e3RhZyxwYXlsb2FkfT1yYXdUcmVlO1xub3V0Lm5leHQoIGBtYWtlVGFnZ2VkKCR7cXVvdGUodGFnKX0sYCk7XG5kZWNvZGUocGF5bG9hZCk7XG5yZXR1cm4gb3V0Lm5leHQoJyknKTtcbiB9XG5cbmNhc2Unc2xvdCc6e1xubGV0e2lmYWNlfT1yYXdUcmVlO1xuY29uc3QgaW5kZXg9TnVtYmVyKE5hdChyYXdUcmVlLmluZGV4KSk7XG5jb25zdCBuZXN0ZWRSZW5kZXI9KGFyZyk9PntcbmNvbnN0IG9sZE91dD1vdXQ7XG50cnl7XG5vdXQ9bWFrZU5vSW5kZW50ZXIoKTtcbmRlY29kZShhcmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfWZpbmFsbHl7XG5vdXQ9b2xkT3V0O1xuIH1cbiB9O1xuaWYoaW5kZXg8c2xvdHMubGVuZ3RoKXtcbmNvbnN0IHNsb3Q9bmVzdGVkUmVuZGVyKHNsb3RzW2luZGV4XSk7XG5pZihpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gb3V0Lm5leHQoIGBzbG90VG9WYWwoJHtzbG90fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0sJHtpZmFjZX0pYCk7XG4gfWVsc2UgaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSwke2lmYWNlfSlgKTtcbiB9XG5cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09cmF3VHJlZTtcbm91dC5vcGVuKCd7Jyk7XG5kZWNvZGVQcm9wZXJ0eShRQ0xBU1Msb3JpZ2luYWwpO1xuaWYoJ3Jlc3QnaW4gcmF3VHJlZSl7XG5hc3NlcnQudHlwZW9mKHJlc3QsJ29iamVjdCcpO1xuYXNzZXJ0KHJlc3QhPT1udWxsKTtcbmNvbnN0IG5hbWVzPW93bktleXMocmVzdCk7XG5mb3IoY29uc3QgbmFtZSBvZiBuYW1lcyl7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYFByb3BlcnR5IG5hbWUgJHtxKFxubmFtZSlcbiB9IG9mICR7cmVzdH0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxuZGVjb2RlUHJvcGVydHkobmFtZSxyZXN0W25hbWVdKTtcbiB9XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cblxuY2FzZSdlcnJvcic6e1xuY29uc3R7XG5uYW1lLFxubWVzc2FnZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWR9PVxucmF3VHJlZTtcbmNhdXNlPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGNhdXNlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xubmFtZSE9PSBgQWdncmVnYXRlRXJyb3JgfHxcbkZhaWwgYEFnZ3JlZ2F0ZUVycm9yIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xuZXJyb3JzPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGVycm9ycyBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbnJldHVybiBvdXQubmV4dCggYCR7bmFtZX0oJHtxdW90ZShtZXNzYWdlKX0pYCk7XG4gfVxuXG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmlmKGxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCdbXScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ1snKTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xub3V0LmxpbmUoKTtcbmRlY29kZShyYXdUcmVlW2ldKTtcbm91dC5uZXh0KCcsJyk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnXScpO1xuIH1cbiB9ZWxzZXtcbi8vXG4vL1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJhd1RyZWUpO1xuaWYobmFtZXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gb3V0Lm5leHQoJ3t9Jyk7XG4gfWVsc2V7XG5vdXQub3BlbigneycpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuZGVjb2RlUHJvcGVydHkobmFtZSxyYXdUcmVlW25hbWVdKTtcbiB9XG5yZXR1cm4gb3V0LmNsb3NlKCd9Jyk7XG4gfVxuIH1cbiB9O1xucHJlcGFyZShlbmNvZGluZyk7XG5kZWNvZGUoZW5jb2RpbmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfTskaM2PX29uY2UuZGVjb2RlVG9KdXN0aW4oZGVjb2RlVG9KdXN0aW4pO1xuaGFyZGVuKGRlY29kZVRvSnVzdGluKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlY29kZVRvSnVzdGluIjpbImRlY29kZVRvSnVzdGluIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEQSpudcBgAAXAYAAC0AAABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9tYXJzaGFsLmpzIl0sImV4cG9ydHMiOlsicGFyc2UiLCJzdHJpbmdpZnkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlTWFyc2hhbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkb05vdENvbnZlcnRWYWxUb1Nsb3Q9KHZhbCk9PlxuRmFpbCBgTWFyc2hhbCdzIHN0cmluZ2lmeSByZWplY3RzIHByZXNlbmNlcyBhbmQgcHJvbWlzZXMgJHt2YWx9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkb05vdENvbnZlcnRTbG90VG9WYWw9KHNsb3QsX2lmYWNlKT0+XG5GYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90cyAke3Nsb3R9YDtcblxuY29uc3QgYmFkQXJyYXlIYW5kbGVyPWhhcmRlbih7XG5nZXQ6KF90YXJnZXQsbmFtZSxfcmVjZWl2ZXIpPT57XG5pZihuYW1lPT09J2xlbmd0aCcpe1xucmV0dXJuIDA7XG4gfVxuLy9cbnRocm93IEZhaWwgYE1hcnNoYWwncyBwYXJzZSBtdXN0IG5vdCBlbmNvZGUgYW55IHNsb3QgcG9zaXRpb25zICR7bmFtZX1gO1xuIH19KTtcblxuXG5jb25zdCBiYWRBcnJheT1oYXJkZW4obmV3IFByb3h5KGhhcmRlbihbXSksYmFkQXJyYXlIYW5kbGVyKSk7XG5cbmNvbnN0e3NlcmlhbGl6ZSx1bnNlcmlhbGl6ZX09bWFrZU1hcnNoYWwoXG5kb05vdENvbnZlcnRWYWxUb1Nsb3QsXG5kb05vdENvbnZlcnRTbG90VG9WYWwsXG57XG5lcnJvclRhZ2dpbmc6J29mZicsXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdDonY2FwZGF0YSd9KTtcblxuXG5cbi8qXG5cblxuICovXG5jb25zdCBzdHJpbmdpZnk9KHZhbCk9PnNlcmlhbGl6ZSh2YWwpLmJvZHk7JGjNj19vbmNlLnN0cmluZ2lmeShzdHJpbmdpZnkpO1xuaGFyZGVuKHN0cmluZ2lmeSk7XG5cbi8qXG5cblxuICovXG5jb25zdCBwYXJzZT0oc3RyKT0+XG51bnNlcmlhbGl6ZShcbmhhcmRlbih7XG5ib2R5OnN0cixcbnNsb3RzOmJhZEFycmF5fSkpOyRozY9fb25jZS5wYXJzZShwYXJzZSk7XG5cblxuaGFyZGVuKHBhcnNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN0cmluZ2lmeSI6WyJzdHJpbmdpZnkiXSwicGFyc2UiOlsicGFyc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKcNSTionAAAqJwAAIwAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIiwiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXJzaGFsIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxhc3NlcnRQYXNzYWJsZSxnZXRJbnRlcmZhY2VPZixnZXRFcnJvckNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5T2YsdG9QYXNzYWJsZUVycm9yLFgsRmFpbCxxLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLG9iamVjdE1hcCxRQ0xBU1MsbWFrZUVuY29kZVRvQ2FwRGF0YSxtYWtlRGVjb2RlRnJvbUNhcERhdGEsbWFrZURlY29kZUZyb21TbWFsbGNhcHMsbWFrZUVuY29kZVRvU21hbGxjYXBzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJ0b1Bhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAodG9QYXNzYWJsZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiLi9lbmNvZGVUb0NhcERhdGEuanNcIiwgW1tcIlFDTEFTU1wiLCBbJGjNj19hID0+IChRQ0xBU1MgPSAkaM2PX2EpXV0sW1wibWFrZUVuY29kZVRvQ2FwRGF0YVwiLCBbJGjNj19hID0+IChtYWtlRW5jb2RlVG9DYXBEYXRhID0gJGjNj19hKV1dLFtcIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YVwiLCBbJGjNj19hID0+IChtYWtlRGVjb2RlRnJvbUNhcERhdGEgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVRvU21hbGxjYXBzLmpzXCIsIFtbXCJtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwc1wiLCBbJGjNj19hID0+IChtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyA9ICRozY9fYSldXSxbXCJtYWtlRW5jb2RlVG9TbWFsbGNhcHNcIiwgWyRozY9fYSA9PiAobWFrZUVuY29kZVRvU21hbGxjYXBzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e2RlZmluZVByb3BlcnRpZXN9PU9iamVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0VmFsVG9TbG90Rm49KHgpPT54O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0U2xvdFRvVmFsRm49KHgsXyk9Png7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXJzaGFsPShcbmNvbnZlcnRWYWxUb1Nsb3Q9ZGVmYXVsdFZhbFRvU2xvdEZuLFxuY29udmVydFNsb3RUb1ZhbD1kZWZhdWx0U2xvdFRvVmFsRm4sXG57XG5lcnJvclRhZ2dpbmc9J29uJyxcbm1hcnNoYWxOYW1lPSdhbm9uLW1hcnNoYWwnLFxuLy9cbi8vXG5lcnJvcklkTnVtPTEwMDAwLFxuLy9cbi8vXG5tYXJzaGFsU2F2ZUVycm9yPShlcnIpPT5cbmNvbnNvbGUubG9nKCdUZW1wb3JhcnkgbG9nZ2luZyBvZiBzZW50IGVycm9yJyxlcnIpLFxuLy9cbi8vXG5zZXJpYWxpemVCb2R5Rm9ybWF0PSdjYXBkYXRhJ309XG57fSk9Plxue1xuYXNzZXJ0LnR5cGVvZihtYXJzaGFsTmFtZSwnc3RyaW5nJyk7XG5lcnJvclRhZ2dpbmc9PT0nb24nfHxcbmVycm9yVGFnZ2luZz09PSdvZmYnfHxcbkZhaWwgYFRoZSBlcnJvclRhZ2dpbmcgb3B0aW9uIGNhbiBvbmx5IGJlIFwib25cIiBvciBcIm9mZlwiICR7ZXJyb3JUYWdnaW5nfWA7XG5jb25zdCBuZXh0RXJyb3JJZD0oKT0+e1xuZXJyb3JJZE51bSs9MTtcbnJldHVybiBgZXJyb3I6JHttYXJzaGFsTmFtZX0jJHtlcnJvcklkTnVtfWA7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IHRvQ2FwRGF0YT0ocm9vdCk9PntcbmNvbnN0IHNsb3RzPVtdO1xuLy9cbmNvbnN0IHNsb3RNYXA9bmV3IE1hcCgpO1xuXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RDb21tb249KHBhc3NhYmxlKT0+e1xubGV0IGluZGV4PXNsb3RNYXAuZ2V0KHBhc3NhYmxlKTtcbmlmKGluZGV4IT09dW5kZWZpbmVkKXtcbi8vXG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDp0cnVlfSk7XG4gfVxuXG5pbmRleD1zbG90cy5sZW5ndGg7XG5jb25zdCBzbG90PWNvbnZlcnRWYWxUb1Nsb3QocGFzc2FibGUpO1xuc2xvdHMucHVzaChzbG90KTtcbnNsb3RNYXAuc2V0KHBhc3NhYmxlLGluZGV4KTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDpmYWxzZX0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAqL1xuY29uc3QgZW5jb2RlRXJyb3JDb21tb249KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IG1lc3NhZ2U9ZW5jb2RlUmVjdXIoIGAke2Vyci5tZXNzYWdlfWApO1xuYXNzZXJ0LnR5cGVvZihtZXNzYWdlLCdzdHJpbmcnKTtcbmNvbnN0IG5hbWU9ZW5jb2RlUmVjdXIoIGAke2Vyci5uYW1lfWApO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbi8vXG4vL1xuLy9cbmlmKGVycm9yVGFnZ2luZz09PSdvbicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGVycm9ySWQ9ZW5jb2RlUmVjdXIobmV4dEVycm9ySWQoKSk7XG5hc3NlcnQudHlwZW9mKGVycm9ySWQsJ3N0cmluZycpO1xuYW5ub3RhdGVFcnJvcihlcnIsWCBgU2VudCBhcyAke2Vycm9ySWR9YCk7XG5tYXJzaGFsU2F2ZUVycm9yKGVycik7XG5yZXR1cm4gaGFyZGVuKHtlcnJvcklkLG1lc3NhZ2UsbmFtZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7bWVzc2FnZSxuYW1lfSk7XG4gfVxuIH07XG5cbmlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nY2FwZGF0YScpe1xuLypcblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvQ2FwRGF0YT0ocGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuaWYocmVwZWF0PT09dHJ1ZXx8aWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGluZGV4fSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonc2xvdCcsaWZhY2UsaW5kZXh9KTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9KHZhbCxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEodmFsLGdldEludGVyZmFjZU9mKHZhbCkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvQ2FwRGF0YShwcm9taXNlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBlcnJEYXRhPWVuY29kZUVycm9yQ29tbW9uKGVycixlbmNvZGVSZWN1cik7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonZXJyb3InLC4uLmVyckRhdGF9KTtcbiB9O1xuXG5jb25zdCBlbmNvZGVUb0NhcERhdGE9bWFrZUVuY29kZVRvQ2FwRGF0YSh7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGEsXG5lbmNvZGVQcm9taXNlVG9DYXBEYXRhLFxuZW5jb2RlRXJyb3JUb0NhcERhdGF9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvQ2FwRGF0YShyb290KTtcbmNvbnN0IGJvZHk9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5yZXR1cm4gaGFyZGVuKHtcbmJvZHksXG5zbG90c30pO1xuXG4gfWVsc2UgaWYoc2VyaWFsaXplQm9keUZvcm1hdD09PSdzbWFsbGNhcHMnKXtcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvU21hbGxjYXBzPShwcmVmaXgscGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuLy9cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH1gO1xuIH1cbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH0uJHtpZmFjZX1gO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPShyZW1vdGFibGUsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9TbWFsbGNhcHMoJyQnLHJlbW90YWJsZSxnZXRJbnRlcmZhY2VPZihyZW1vdGFibGUpKTtcblxuY29uc3QgZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCcmJyxwcm9taXNlKTtcblxuY29uc3QgZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xuY29uc3R7bWVzc2FnZSwuLi5yZXN0fT1lcnJEYXRhO1xucmV0dXJuIGhhcmRlbih7JyNlcnJvcic6bWVzc2FnZSwuLi5yZXN0fSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9bWFrZUVuY29kZVRvU21hbGxjYXBzKHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwc30pO1xuXG5cbmNvbnN0IGVuY29kZWQ9ZW5jb2RlVG9TbWFsbGNhcHMocm9vdCk7XG5jb25zdCBzbWFsbGNhcHNCb2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG4vL1xuLy9cbmJvZHk6IGAjJHtzbWFsbGNhcHNCb2R5fWAsXG5zbG90c30pO1xuXG4gfWVsc2V7XG4vL1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZUJvZHlGb3JtYXQ6ICR7cShzZXJpYWxpemVCb2R5Rm9ybWF0KX1gO1xuIH1cbiB9O1xuXG5jb25zdCBtYWtlRnVsbFJldml2ZT0oc2xvdHMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsTWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVTbG90Q29tbW9uPShzbG90RGF0YSk9PntcbmNvbnN0e2lmYWNlPXVuZGVmaW5lZCxpbmRleCwuLi5yZXN0fT1zbG90RGF0YTtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgc2xvdCBwcm9wZXJ0aWVzICR7cShvd25LZXlzKHJlc3QpKX1gO1xuY29uc3QgZXh0YW50PXZhbE1hcC5nZXQoaW5kZXgpO1xuaWYoZXh0YW50KXtcbnJldHVybiBleHRhbnQ7XG4gfVxuLy9cbi8vXG5jb25zdCBzbG90PXNsb3RzW051bWJlcihOYXQoaW5kZXgpKV07XG5jb25zdCB2YWw9Y29udmVydFNsb3RUb1ZhbChzbG90LGlmYWNlKTtcbnZhbE1hcC5zZXQoaW5kZXgsdmFsKTtcbnJldHVybiB2YWw7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGRlY29kZUVycm9yQ29tbW9uPShlcnJEYXRhLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7XG5lcnJvcklkPXVuZGVmaW5lZCxcbm1lc3NhZ2UsXG5uYW1lLFxuY2F1c2U9dW5kZWZpbmVkLFxuZXJyb3JzPXVuZGVmaW5lZCxcbi4uLnJlc3R9PVxuZXJyRGF0YTtcbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBkTmFtZT1kZWNvZGVSZWN1cihuYW1lKTtcbmNvbnN0IGRNZXNzYWdlPWRlY29kZVJlY3VyKG1lc3NhZ2UpO1xuLy9cbmNvbnN0IGRFcnJvcklkPS8qICAgICAgICAgICAgICAgICAqL2Vycm9ySWQmJmRlY29kZVJlY3VyKGVycm9ySWQpO1xuaWYodHlwZW9mIGROYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgaW52YWxpZCBlcnJvciBuYW1lIHR5cGVvZiAke3EodHlwZW9mIGROYW1lKX1gO1xuIH1cbmlmKHR5cGVvZiBkTWVzc2FnZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBkTWVzc2FnZSl9YDtcbiB9XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKGROYW1lKXx8RXJyb3I7XG5jb25zdCBlcnJvck5hbWU9XG5kRXJyb3JJZD09PXVuZGVmaW5lZD9cbiBgUmVtb3RlJHtlcnJDb25zdHJ1Y3Rvci5uYW1lfWA6XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX0oJHtkRXJyb3JJZH0pYDtcbmNvbnN0IG9wdGlvbnM9e1xuZXJyb3JOYW1lLFxuc2FuaXRpemU6ZmFsc2V9O1xuXG5pZihjYXVzZSl7XG5vcHRpb25zLmNhdXNlPWRlY29kZVJlY3VyKGNhdXNlKTtcbiB9XG5pZihlcnJvcnMpe1xub3B0aW9ucy5lcnJvcnM9ZGVjb2RlUmVjdXIoZXJyb3JzKTtcbiB9XG5jb25zdCByYXdFcnJvcj1tYWtlRXJyb3IoZE1lc3NhZ2UsZXJyQ29uc3RydWN0b3Isb3B0aW9ucyk7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVzY3M9b2JqZWN0TWFwKHJlc3QsKGRhdGEpPT4oe1xudmFsdWU6ZGVjb2RlUmVjdXIoZGF0YSksXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KSk7XG5cbmRlZmluZVByb3BlcnRpZXMocmF3RXJyb3IsZGVzY3MpO1xuaGFyZGVuKHJhd0Vycm9yKTtcbnJldHVybiB0b1Bhc3NhYmxlRXJyb3IocmF3RXJyb3IpO1xuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGE9KHJhd1RyZWUsX2RlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5zbG90RGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHNsb3REYXRhKTtcbiB9O1xuXG5jb25zdCBkZWNvZGVFcnJvckZyb21DYXBEYXRhPShyYXdUcmVlLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5lcnJEYXRhfT1yYXdUcmVlO1xucmV0dXJuIGRlY29kZUVycm9yQ29tbW9uKGVyckRhdGEsZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21DYXBEYXRhPW1ha2VEZWNvZGVGcm9tQ2FwRGF0YSh7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZVByb21pc2VGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGF9KTtcblxuXG5jb25zdCBtYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHM9KHByZWZpeCk9Pntcbi8qXG5cblxuXG4gICAgICAgKi9cbnJldHVybihzdHJpbmdFbmNvZGluZyxfZGVjb2RlUmVjdXIpPT57XG5hc3NlcnQoc3RyaW5nRW5jb2RpbmcuY2hhckF0KDApPT09cHJlZml4KTtcbi8vXG5jb25zdCBpPXN0cmluZ0VuY29kaW5nLmluZGV4T2YoJy4nKTtcbmNvbnN0IGluZGV4PU51bWJlcihzdHJpbmdFbmNvZGluZy5zbGljZSgxLGk8MD91bmRlZmluZWQ6aSkpO1xuLy9cbmNvbnN0IGlmYWNlPWk8MD91bmRlZmluZWQ6c3RyaW5nRW5jb2Rpbmcuc2xpY2UoaSsxKTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHtpZmFjZSxpbmRleH0pO1xuIH07XG4gfTtcbmNvbnN0IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCckJyk7XG5jb25zdCBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1tYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHMoJyYnKTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyxkZWNvZGVSZWN1cik9PntcbmNvbnN0eycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdEVyckRhdGF9PWVuY29kaW5nO1xuIWhhc093blByb3BlcnR5T2YocmVzdEVyckRhdGEsJ21lc3NhZ2UnKXx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgZXJyb3IgcHJvcGVydHkgJHtxKCdtZXNzYWdlJyl9YDtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbih7bWVzc2FnZSwuLi5yZXN0RXJyRGF0YX0sZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZUZyb21TbWFsbGNhcHMoe1xuLy9cbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG4vL1xuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtyZXZpdmVGcm9tQ2FwRGF0YSxyZXZpdmVGcm9tU21hbGxjYXBzfSk7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPShkYXRhKT0+e1xuY29uc3R7Ym9keSxzbG90c309ZGF0YTtcbnR5cGVvZiBib2R5PT09J3N0cmluZyd8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLmJvZHkgaXMgJHtib2R5fSwgbm90IHN0cmluZylgO1xuaXNBcnJheShkYXRhLnNsb3RzKXx8XG5GYWlsIGB1bnNlcmlhbGl6ZSgpIGdpdmVuIG5vbi1jYXBkYXRhICguc2xvdHMgYXJlIG5vdCBBcnJheSlgO1xuY29uc3R7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc309bWFrZUZ1bGxSZXZpdmUoc2xvdHMpO1xubGV0IHJlc3VsdDtcbi8vXG5pZihib2R5LmNoYXJBdCgwKT09PScjJyl7XG5jb25zdCBzbWFsbGNhcHNCb2R5PWJvZHkuc2xpY2UoMSk7XG5jb25zdCBlbmNvZGluZz1oYXJkZW4oSlNPTi5wYXJzZShzbWFsbGNhcHNCb2R5KSk7XG5yZXN1bHQ9aGFyZGVuKHJldml2ZUZyb21TbWFsbGNhcHMoZW5jb2RpbmcpKTtcbiB9ZWxzZXtcbmNvbnN0IHJhd1RyZWU9aGFyZGVuKEpTT04ucGFyc2UoYm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tQ2FwRGF0YShyYXdUcmVlKSk7XG4gfVxuLy9cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUocmVzdWx0KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9yZXN1bHQpO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xudG9DYXBEYXRhLFxuZnJvbUNhcERhdGEsXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuc2VyaWFsaXplOnRvQ2FwRGF0YSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVuc2VyaWFsaXplOmZyb21DYXBEYXRhfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTWFyc2hhbChtYWtlTWFyc2hhbCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFyc2hhbCI6WyJtYWtlTWFyc2hhbCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC7402JnCcAAJwnAAAlAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL3JhbmtPcmRlci5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiLi9lbmNvZGVQYXNzYWJsZS5qcyJdLCJleHBvcnRzIjpbIkZ1bGxSYW5rQ292ZXIiLCJhc3NlcnRSYW5rU29ydGVkIiwiY29tcGFyYXRvck1pcnJvckltYWdlIiwiY29tcGFyZUFudGlSYW5rIiwiY29tcGFyZVJhbmsiLCJjb3ZlcmVkRW50cmllcyIsImdldEluZGV4Q292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciIsImludGVyc2VjdFJhbmtDb3ZlcnMiLCJpc1JhbmtTb3J0ZWQiLCJtYWtlQ29tcGFyYXRvcktpdCIsIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Iiwic29ydEJ5UmFuayIsInRyaXZpYWxDb21wYXJhdG9yIiwidW5pb25SYW5rQ292ZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldFRhZyxwYXNzU3R5bGVPZixuYW1lRm9yUGFzc2FibGVTeW1ib2wsRmFpbCxxLHBhc3NTdHlsZVByZWZpeGVzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlUGFzc2FibGUuanNcIiwgW1tcInBhc3NTdHlsZVByZWZpeGVzXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZVByZWZpeGVzID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzLHNldFByb3RvdHlwZU9mLGlzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNhbWVWYWx1ZVplcm89KHgseSk9Png9PT15fHxpcyh4LHkpO1xuXG5jb25zdCAgICAgICAgdHJpdmlhbENvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT5cbi8vXG5sZWZ0PHJpZ2h0Py0xOmxlZnQ9PT1yaWdodD8wOjE7XG5cbi8qXG5cbiAqLyRozY9fb25jZS50cml2aWFsQ29tcGFyYXRvcih0cml2aWFsQ29tcGFyYXRvcik7XG5cbmNvbnN0IHBhc3NTdHlsZVJhbmtzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mcm9tRW50cmllcyhcbmVudHJpZXMocGFzc1N0eWxlUHJlZml4ZXMpXG4vL1xuLnNvcnQoKFtfbGVmdFN0eWxlLGxlZnRQcmVmaXhlc10sW19yaWdodFN0eWxlLHJpZ2h0UHJlZml4ZXNdKT0+e1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKGxlZnRQcmVmaXhlcyxyaWdodFByZWZpeGVzKTtcbiB9KS5cbm1hcCgoW3Bhc3NTdHlsZSxwcmVmaXhlc10saW5kZXgpPT57XG4vL1xuLy9cbi8vXG5wcmVmaXhlcz09PVsuLi5wcmVmaXhlc10uc29ydCgpLmpvaW4oJycpfHxcbkZhaWwgYHVuc29ydGVkIHByZWZpeGVzIGZvciBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3EocHJlZml4ZXMpfWA7XG5jb25zdCBjb3Zlcj1bXG5wcmVmaXhlcy5jaGFyQXQoMCksXG5TdHJpbmcuZnJvbUNoYXJDb2RlKHByZWZpeGVzLmNoYXJDb2RlQXQocHJlZml4ZXMubGVuZ3RoLTEpKzEpXTtcblxucmV0dXJuW3Bhc3NTdHlsZSx7aW5kZXgsY292ZXJ9XTtcbiB9KSk7XG5cblxuc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUmFua3MsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUmFua3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0UGFzc1N0eWxlQ292ZXI9KHBhc3NTdHlsZSk9PnBhc3NTdHlsZVJhbmtzW3Bhc3NTdHlsZV0uY292ZXI7JGjNj19vbmNlLmdldFBhc3NTdHlsZUNvdmVyKGdldFBhc3NTdHlsZUNvdmVyKTtcbmhhcmRlbihnZXRQYXNzU3R5bGVDb3Zlcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWVtb09mU29ydGVkPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAqL1xuY29uc3QgY29tcGFyYXRvck1pcnJvckltYWdlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29tcGFyYXRvcktpdD0oY29tcGFyZVJlbW90YWJsZXM9KF94LF95KT0+TmFOKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT57XG5pZihzYW1lVmFsdWVaZXJvKGxlZnQscmlnaHQpKXtcbnJldHVybiAwO1xuIH1cbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG5yZXR1cm4gdHJpdmlhbENvbXBhcmF0b3IoXG5wYXNzU3R5bGVSYW5rc1tsZWZ0U3R5bGVdLmluZGV4LFxucGFzc1N0eWxlUmFua3NbcmlnaHRTdHlsZV0uaW5kZXgpO1xuXG4gfVxuLypcblxuICAgICAqL1xuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGNvbXBhcmVSZW1vdGFibGVzKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xuLy9cbi8vXG5yZXR1cm4gMDtcbiB9XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOntcbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ3N5bWJvbCc6e1xucmV0dXJuIGNvbXBhcmF0b3IoXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wobGVmdCksXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wocmlnaHQpKTtcblxuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKGxlZnQpKXtcbmFzc2VydCghTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihOdW1iZXIuaXNOYU4ocmlnaHQpKXtcbnJldHVybi0xO1xuIH1cbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlZnROYW1lcz1yZWNvcmROYW1lcyhsZWZ0KTtcbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG5jb25zdCByZXN1bHQ9Y29tcGFyYXRvcihsZWZ0TmFtZXMscmlnaHROYW1lcyk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuY29uc3QgbGVmdFZhbHVlcz1yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpO1xuY29uc3QgcmlnaHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHJpZ2h0LHJpZ2h0TmFtZXMpO1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdFZhbHVlcyxyaWdodFZhbHVlcyk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxhYmVsQ29tcD1jb21wYXJhdG9yKGdldFRhZyhsZWZ0KSxnZXRUYWcocmlnaHQpKTtcbmlmKGxhYmVsQ29tcCE9PTApe1xucmV0dXJuIGxhYmVsQ29tcDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihsZWZ0LnBheWxvYWQscmlnaHQucGF5bG9hZCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgcGFzc1N0eWxlOiAke3EobGVmdFN0eWxlKX1gO1xuIH19XG5cbi8qICAgICAgICAgICAgICAgKi9cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3V0ZXJDb21wYXJhdG9yPSh4LHkpPT5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NvbXBhcmF0b3IoeCx5KXx8MDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFudGlDb21wYXJhdG9yPSh4LHkpPT5vdXRlckNvbXBhcmF0b3IoeSx4KTtcblxubWVtb09mU29ydGVkLnNldChvdXRlckNvbXBhcmF0b3IsbmV3IFdlYWtTZXQoKSk7XG5tZW1vT2ZTb3J0ZWQuc2V0KGFudGlDb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xuY29tcGFyYXRvck1pcnJvckltYWdlcy5zZXQob3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KGFudGlDb21wYXJhdG9yLG91dGVyQ29tcGFyYXRvcik7XG5cbnJldHVybiBoYXJkZW4oe2NvbXBhcmF0b3I6b3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yfSk7XG4gfTtcbi8qXG5cblxuICovJGjNj19vbmNlLm1ha2VDb21wYXJhdG9yS2l0KG1ha2VDb21wYXJhdG9yS2l0KTtcbmNvbnN0ICAgICAgICBjb21wYXJhdG9yTWlycm9ySW1hZ2U9KGNvbXBhcmF0b3IpPT5cbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuZ2V0KGNvbXBhcmF0b3IpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmNvbXBhcmF0b3JNaXJyb3JJbWFnZShjb21wYXJhdG9yTWlycm9ySW1hZ2UpO1xuY29uc3QgICAgICAgIGlzUmFua1NvcnRlZD0ocGFzc2FibGVzLGNvbXBhcmUpPT57XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuaWYoc3ViTWVtb09mU29ydGVkLmhhcyhwYXNzYWJsZXMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmFzc2VydChwYXNzU3R5bGVPZihwYXNzYWJsZXMpPT09J2NvcHlBcnJheScpO1xuZm9yKGxldCBpPTE7aTxwYXNzYWJsZXMubGVuZ3RoO2krPTEpe1xuaWYoY29tcGFyZShwYXNzYWJsZXNbaS0xXSxwYXNzYWJsZXNbaV0pPj0xKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuc3ViTWVtb09mU29ydGVkLmFkZChwYXNzYWJsZXMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuaXNSYW5rU29ydGVkKGlzUmFua1NvcnRlZCk7XG5oYXJkZW4oaXNSYW5rU29ydGVkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRSYW5rU29ydGVkPShzb3J0ZWQsY29tcGFyZSk9PlxuaXNSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKXx8XG4vL1xuLy9cbkZhaWwgYE11c3QgYmUgcmFuayBzb3J0ZWQ6ICR7c29ydGVkfSB2cyAke3NvcnRCeVJhbmsoc29ydGVkLGNvbXBhcmUpfWA7JGjNj19vbmNlLmFzc2VydFJhbmtTb3J0ZWQoYXNzZXJ0UmFua1NvcnRlZCk7XG5oYXJkZW4oYXNzZXJ0UmFua1NvcnRlZCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNvcnRCeVJhbms9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuaWYoQXJyYXkuaXNBcnJheShwYXNzYWJsZXMpKXtcbmhhcmRlbihwYXNzYWJsZXMpO1xuLy9cbi8vXG4vL1xuaWYoaXNSYW5rU29ydGVkKHBhc3NhYmxlcyxjb21wYXJlKSl7XG5yZXR1cm4gcGFzc2FibGVzO1xuIH1cbiB9XG5jb25zdCB1bnNvcnRlZD1bLi4ucGFzc2FibGVzXTtcbnVuc29ydGVkLmZvckVhY2goaGFyZGVuKTtcbmNvbnN0IHNvcnRlZD11bnNvcnRlZC5zb3J0KGNvbXBhcmUpO1xuLy9cbi8vXG4vL1xuaWYoY29tcGFyZSh0cnVlLHVuZGVmaW5lZCk+MCl7XG5sZXQgaT1zb3J0ZWQubGVuZ3RoLTE7XG53aGlsZShpPj0wJiZzb3J0ZWRbaV09PT11bmRlZmluZWQpaS09MTtcbmNvbnN0IG49c29ydGVkLmxlbmd0aC1pLTE7XG5pZihuPjAmJm48c29ydGVkLmxlbmd0aCl7XG5zb3J0ZWQuY29weVdpdGhpbihuLDApO1xuc29ydGVkLmZpbGwoLyogICAgICAgICAgICAqL3VuZGVmaW5lZCwwLG4pO1xuIH1cbiB9XG5oYXJkZW4oc29ydGVkKTtcbmNvbnN0IHN1Yk1lbW9PZlNvcnRlZD1tZW1vT2ZTb3J0ZWQuZ2V0KGNvbXBhcmUpO1xuYXNzZXJ0KHN1Yk1lbW9PZlNvcnRlZCE9PXVuZGVmaW5lZCk7XG5zdWJNZW1vT2ZTb3J0ZWQuYWRkKHNvcnRlZCk7XG5yZXR1cm4gc29ydGVkO1xuIH07JGjNj19vbmNlLnNvcnRCeVJhbmsoc29ydEJ5UmFuayk7XG5oYXJkZW4oc29ydEJ5UmFuayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCByYW5rU2VhcmNoPShzb3J0ZWQsY29tcGFyZSxrZXksYmlhcz0nbGVmdE1vc3QnKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5sZXQgbGVmdD0wO1xubGV0IHJpZ2h0PXNvcnRlZC5sZW5ndGg7XG53aGlsZShsZWZ0PHJpZ2h0KXtcbmNvbnN0IG09TWF0aC5mbG9vcigobGVmdCtyaWdodCkvMik7XG5jb25zdCBjb21wPWNvbXBhcmUoc29ydGVkW21dLGtleSk7XG5pZihjb21wPD0tMXx8Y29tcD09PTAmJmJpYXM9PT0ncmlnaHRNb3N0Jyl7XG5sZWZ0PW0rMTtcbiB9ZWxzZXtcbmFzc2VydChjb21wPj0xfHxjb21wPT09MCYmYmlhcz09PSdsZWZ0TW9zdCcpO1xucmlnaHQ9bTtcbiB9XG4gfVxucmV0dXJuIGJpYXM9PT0nbGVmdE1vc3QnP2xlZnQ6cmlnaHQtMTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbmRleENvdmVyPShzb3J0ZWQsY29tcGFyZSxbbGVmdEtleSxyaWdodEtleV0pPT57XG5hc3NlcnRSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKTtcbmNvbnN0IGxlZnRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLGxlZnRLZXksJ2xlZnRNb3N0Jyk7XG5jb25zdCByaWdodEluZGV4PXJhbmtTZWFyY2goc29ydGVkLGNvbXBhcmUscmlnaHRLZXksJ3JpZ2h0TW9zdCcpO1xucmV0dXJuW2xlZnRJbmRleCxyaWdodEluZGV4XTtcbiB9OyRozY9fb25jZS5nZXRJbmRleENvdmVyKGdldEluZGV4Q292ZXIpO1xuaGFyZGVuKGdldEluZGV4Q292ZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBGdWxsUmFua0NvdmVyPWhhcmRlbihbJycsJ3snXSk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuRnVsbFJhbmtDb3ZlcihGdWxsUmFua0NvdmVyKTtcbmNvbnN0ICAgICAgICBjb3ZlcmVkRW50cmllcz0oc29ydGVkLFtsZWZ0SW5kZXgscmlnaHRJbmRleF0pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpdGVyYWJsZT1oYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPWxlZnRJbmRleDtcbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuaWYoaTw9cmlnaHRJbmRleCl7XG5jb25zdCBlbGVtZW50PXNvcnRlZFtpXTtcbmkrPTE7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTpbaSxlbGVtZW50XSxkb25lOmZhbHNlfSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTp1bmRlZmluZWQsZG9uZTp0cnVlfSk7XG4gfVxuIH19KTtcblxuIH19KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLmNvdmVyZWRFbnRyaWVzKGNvdmVyZWRFbnRyaWVzKTtcbmhhcmRlbihjb3ZlcmVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYXhSYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKT49MD9hOmI7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtaW5SYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKTw9MD9hOmI7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bmlvblJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCB1bmlvblJhbmtDb3ZlclBhaXI9KFtsZWZ0QSxyaWdodEFdLFtsZWZ0QixyaWdodEJdKT0+W1xubWluUmFuayhjb21wYXJlLGxlZnRBLGxlZnRCKSxcbm1heFJhbmsoY29tcGFyZSxyaWdodEEscmlnaHRCKV07XG5cbnJldHVybiBjb3ZlcnMucmVkdWNlKHVuaW9uUmFua0NvdmVyUGFpcixbJ3snLCcnXSk7XG4gfTskaM2PX29uY2UudW5pb25SYW5rQ292ZXJzKHVuaW9uUmFua0NvdmVycyk7XG5oYXJkZW4odW5pb25SYW5rQ292ZXJzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGludGVyc2VjdFJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBpbnRlcnNlY3RSYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1heFJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5taW5SYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZShpbnRlcnNlY3RSYW5rQ292ZXJQYWlyLFsnJywneyddKTtcbiB9OyRozY9fb25jZS5pbnRlcnNlY3RSYW5rQ292ZXJzKGludGVyc2VjdFJhbmtDb3ZlcnMpO1xuXG5jb25zdCAgICAgICB7Y29tcGFyYXRvcjpjb21wYXJlUmFuayxhbnRpQ29tcGFyYXRvcjpjb21wYXJlQW50aVJhbmt9PVxubWFrZUNvbXBhcmF0b3JLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5jb21wYXJlUmFuayhjb21wYXJlUmFuayk7JGjNj19vbmNlLmNvbXBhcmVBbnRpUmFuayhjb21wYXJlQW50aVJhbmspO1xuY29uc3QgICAgICAgIG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0PShsb25nTGl2ZWQ9ZmFsc2UpPT57XG5sZXQgbnVtU2Vlbj0wO1xuLy9cbi8vXG4vL1xuY29uc3QgTWFwQ29uc3RydWN0b3I9bG9uZ0xpdmVkP1dlYWtNYXA6TWFwO1xuY29uc3Qgc2Vlbj1uZXcgTWFwQ29uc3RydWN0b3IoKTtcbmNvbnN0IHRhZz0ocik9PntcbmlmKHNlZW4uaGFzKHIpKXtcbnJldHVybiBzZWVuLmdldChyKTtcbiB9XG5udW1TZWVuKz0xO1xuc2Vlbi5zZXQocixudW1TZWVuKTtcbnJldHVybiBudW1TZWVuO1xuIH07XG5jb25zdCBjb21wYXJlUmVtb3RhYmxlcz0oeCx5KT0+Y29tcGFyZVJhbmsodGFnKHgpLHRhZyh5KSk7XG5yZXR1cm4gbWFrZUNvbXBhcmF0b3JLaXQoY29tcGFyZVJlbW90YWJsZXMpO1xuIH07JGjNj19vbmNlLm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KTtcbmhhcmRlbihtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0cml2aWFsQ29tcGFyYXRvciI6WyJ0cml2aWFsQ29tcGFyYXRvciJdLCJnZXRQYXNzU3R5bGVDb3ZlciI6WyJnZXRQYXNzU3R5bGVDb3ZlciJdLCJtYWtlQ29tcGFyYXRvcktpdCI6WyJtYWtlQ29tcGFyYXRvcktpdCJdLCJjb21wYXJhdG9yTWlycm9ySW1hZ2UiOlsiY29tcGFyYXRvck1pcnJvckltYWdlIl0sImlzUmFua1NvcnRlZCI6WyJpc1JhbmtTb3J0ZWQiXSwiYXNzZXJ0UmFua1NvcnRlZCI6WyJhc3NlcnRSYW5rU29ydGVkIl0sInNvcnRCeVJhbmsiOlsic29ydEJ5UmFuayJdLCJnZXRJbmRleENvdmVyIjpbImdldEluZGV4Q292ZXIiXSwiRnVsbFJhbmtDb3ZlciI6WyJGdWxsUmFua0NvdmVyIl0sImNvdmVyZWRFbnRyaWVzIjpbImNvdmVyZWRFbnRyaWVzIl0sInVuaW9uUmFua0NvdmVycyI6WyJ1bmlvblJhbmtDb3ZlcnMiXSwiaW50ZXJzZWN0UmFua0NvdmVycyI6WyJpbnRlcnNlY3RSYW5rQ292ZXJzIl0sImNvbXBhcmVSYW5rIjpbImNvbXBhcmVSYW5rIl0sImNvbXBhcmVBbnRpUmFuayI6WyJjb21wYXJlQW50aVJhbmsiXSwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiOlsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAIQAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX+pOglkFAABZBQAAHgAAAEBlbmRvL25hdC12NS4wLjEzL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiTmF0IiwiaXNOYXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc05hdCwgJ25hbWUnLCB7dmFsdWU6IFwiaXNOYXRcIn0pOyRozY9fb25jZS5pc05hdChpc05hdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdCwgJ25hbWUnLCB7dmFsdWU6IFwiTmF0XCJ9KTskaM2PX29uY2UuTmF0KE5hdCk7ICAgLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGlzTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5yZXR1cm4gYWxsZWdlZE51bT49MDtcbiB9XG5pZih0eXBlb2YgYWxsZWdlZE51bSE9PSdudW1iZXInKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbnJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcihhbGxlZ2VkTnVtKSYmYWxsZWdlZE51bT49MDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBOYXQoYWxsZWdlZE51bSl7XG5pZih0eXBlb2YgYWxsZWdlZE51bT09PSdiaWdpbnQnKXtcbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBhbGxlZ2VkTnVtO1xuIH1cblxuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nbnVtYmVyJyl7XG5pZighTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkpe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYCk7XG4gfVxuaWYoYWxsZWdlZE51bTwwKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5lZ2F0aXZlYCk7XG4gfVxucmV0dXJuIEJpZ0ludChhbGxlZ2VkTnVtKTtcbiB9XG5cbnRocm93IFR5cGVFcnJvcihcbiBgJHthbGxlZ2VkTnVtfSBpcyBhICR7dHlwZW9mIGFsbGVnZWROdW19IGJ1dCBtdXN0IGJlIGEgYmlnaW50IG9yIGEgbnVtYmVyYCk7XG5cbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc05hdCI6WyJpc05hdCJdLCJOYXQiOlsiTmF0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKEpqrw/CgAAPwoAACAAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiLCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vc3JjL2Vycm9yLmpzIiwiLi9zcmMvcmVtb3RhYmxlLmpzIiwiLi9zcmMvc3ltYm9sLmpzIiwiLi9zcmMvc3RyaW5nLmpzIiwiLi9zcmMvcGFzc1N0eWxlT2YuanMiLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIiwiLi9zcmMvbWFrZS1mYXIuanMiLCIuL3NyYy90eXBlR3VhcmRzLmpzIiwiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJGYXIiLCJGYXIiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiLCJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIiwiaXNPYmplY3QiLCJpc09iamVjdCIsImlzUGFzc2FibGUiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvaXRlci1oZWxwZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvZXJyb3IuanNcIiwgW11dLFtcIi4vc3JjL3JlbW90YWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvc3ltYm9sLmpzXCIsIFtdXSxbXCIuL3NyYy9zdHJpbmcuanNcIiwgW11dLFtcIi4vc3JjL3Bhc3NTdHlsZU9mLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlVGFnZ2VkLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlLWZhci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2l0ZXItaGVscGVycy5qcyI6W1sibWFwSXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLFsiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSJdXSwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOltbIlBBU1NfU1RZTEUiLCJQQVNTX1NUWUxFIl0sWyJpc09iamVjdCIsImlzT2JqZWN0Il0sWyJhc3NlcnRDaGVja2VyIiwiYXNzZXJ0Q2hlY2tlciJdLFsiZ2V0VGFnIiwiZ2V0VGFnIl0sWyJoYXNPd25Qcm9wZXJ0eU9mIiwiaGFzT3duUHJvcGVydHlPZiJdXSwiLi9zcmMvZXJyb3IuanMiOltbImdldEVycm9yQ29uc3RydWN0b3IiLCJnZXRFcnJvckNvbnN0cnVjdG9yIl0sWyJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIl1dLCIuL3NyYy9yZW1vdGFibGUuanMiOltbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXV0sIi4vc3JjL3N5bWJvbC5qcyI6W1siYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLFsiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiXSxbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCIsIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLFsicGFzc2FibGVTeW1ib2xGb3JOYW1lIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl1dLCIuL3NyYy9zdHJpbmcuanMiOltbImlzV2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLFsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0UGFzc2FibGVTdHJpbmciXV0sIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjpbWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl0sWyJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSJdLFsiYXNzZXJ0UGFzc2FibGUiLCJhc3NlcnRQYXNzYWJsZSJdLFsidG9QYXNzYWJsZUVycm9yIiwidG9QYXNzYWJsZUVycm9yIl0sWyJ0b1Rocm93YWJsZSIsInRvVGhyb3dhYmxlIl1dLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIjpbWyJtYWtlVGFnZ2VkIiwibWFrZVRhZ2dlZCJdXSwiLi9zcmMvbWFrZS1mYXIuanMiOltbIlJlbW90YWJsZSIsIlJlbW90YWJsZSJdLFsiRmFyIiwiRmFyIl0sWyJUb0ZhckZ1bmN0aW9uIiwiVG9GYXJGdW5jdGlvbiJdLFsiR0VUX01FVEhPRF9OQU1FUyIsIkdFVF9NRVRIT0RfTkFNRVMiXV0sIi4vc3JjL3R5cGVHdWFyZHMuanMiOltbImFzc2VydFJlY29yZCIsImFzc2VydFJlY29yZCJdLFsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5Il0sWyJhc3NlcnRSZW1vdGFibGUiLCJhc3NlcnRSZW1vdGFibGUiXSxbImlzUmVtb3RhYmxlIiwiaXNSZW1vdGFibGUiXSxbImlzUmVjb3JkIiwiaXNSZWNvcmQiXSxbImlzQ29weUFycmF5IiwiaXNDb3B5QXJyYXkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJeovyVUBgAAVAYAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvY29weUFycmF5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5QXJyYXlIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxhc3NlcnRDaGVja2VyLGdldE93bkRhdGFEZXNjcmlwdG9yOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHtnZXRQcm90b3R5cGVPZn09T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXkscHJvdG90eXBlOmFycmF5UHJvdG90eXBlfT1BcnJheTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2FuQmVWYWxpZD0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PlxuaXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJmNoZWNrKGZhbHNlLFggYEFycmF5IGV4cGVjdGVkOiAke2NhbmRpZGF0ZX1gKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5QXJyYXlIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonY29weUFycmF5JyxcblxuY2FuQmVWYWxpZCxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09YXJyYXlQcm90b3R5cGV8fFxuYXNzZXJ0LmZhaWwoWCBgTWFsZm9ybWVkIGFycmF5OiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4vL1xuLy9cbmNvbnN0IGxlbj0vKiAgICAgICAgICAgICAgICAgKi9cbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwnbGVuZ3RoJyxmYWxzZSxhc3NlcnRDaGVja2VyKS52YWx1ZTtcblxuLy9cbi8vXG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbnBhc3NTdHlsZU9mUmVjdXIoXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsaSx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH1cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkubGVuZ3RoPT09bGVuKzF8fFxuYXNzZXJ0LmZhaWwoWCBgQXJyYXlzIG11c3Qgbm90IGhhdmUgbm9uLWluZGV4ZXM6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbiB9fSk7JGjNj19vbmNlLkNvcHlBcnJheUhlbHBlcihDb3B5QXJyYXlIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ29weUFycmF5SGVscGVyIjpbIkNvcHlBcnJheUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAyz0q1KQgAACkIAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2NvcHlSZWNvcmQuanN7ImltcG9ydHMiOlsiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkNvcHlSZWNvcmRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixjYW5CZU1ldGhvZCxnZXRPd25EYXRhRGVzY3JpcHRvcixDWDskaM2PX2ltcG9ydHMoW1tcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRQcm90b3R5cGVPZixwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBjaGVja09iamVjdFByb3RvdHlwZT0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk9PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlY29yZHMgbXVzdCBpbmhlcml0IGZyb20gT2JqZWN0LnByb3RvdHlwZTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJvcGVydHlDYW5CZVZhbGlkPShjYW5kaWRhdGUsa2V5LHZhbHVlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbih0eXBlb2Yga2V5PT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbiBvbmx5IGhhdmUgc3RyaW5nLW5hbWVkIHByb3BlcnRpZXM6ICR7Y2FuZGlkYXRlfWApJiYoXG4hY2FuQmVNZXRob2QodmFsdWUpfHxcbiEhY2hlY2smJlxuLy9cbkNYKFxuY2hlY2spXG4gYFJlY29yZHMgY2Fubm90IGNvbnRhaW4gbm9uLWZhciBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IG1heSBiZSBtZXRob2RzIG9mIGFuIGltcGxpY2l0IFJlbW90YWJsZTogJHtjYW5kaWRhdGV9YCkpO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5UmVjb3JkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2NvcHlSZWNvcmQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xucmV0dXJuKFxuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGNoZWNrKSYmXG4vL1xuLy9cbm93bktleXMoY2FuZGlkYXRlKS5ldmVyeSgoa2V5KT0+XG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsa2V5LGNhbmRpZGF0ZVtrZXldLGNoZWNrKSkpO1xuXG5cbiB9LFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja09iamVjdFByb3RvdHlwZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG4vL1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duS2V5cyhjYW5kaWRhdGUpKXtcbmNvbnN0e3ZhbHVlfT1nZXRPd25EYXRhRGVzY3JpcHRvcihcbmNhbmRpZGF0ZSxcbm5hbWUsXG50cnVlLFxuYXNzZXJ0Q2hlY2tlcik7XG5cbmNoZWNrUHJvcGVydHlDYW5CZVZhbGlkKGNhbmRpZGF0ZSxuYW1lLHZhbHVlLGFzc2VydENoZWNrZXIpO1xucGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSk7XG4gfVxuIH19KTskaM2PX29uY2UuQ29weVJlY29yZEhlbHBlcihDb3B5UmVjb3JkSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlSZWNvcmRIZWxwZXIiOlsiQ29weVJlY29yZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABwIuV6VgoAAFYKAAAuAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyIsIi4vbWFrZVRhZ2dlZC5qcyJdLCJleHBvcnRzIjpbImRlZXBseUZ1bGZpbGxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRSxpc1Byb21pc2UsZ2V0VGFnLGlzT2JqZWN0LHBhc3NTdHlsZU9mLG1ha2VUYWdnZWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIi4vbWFrZVRhZ2dlZC5qc1wiLCBbW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkPWFzeW5jKHZhbCk9Pntcbi8vXG4vL1xuLy9cblxuaWYoIWlzT2JqZWN0KHZhbCkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsKTtcbiB9XG5pZihpc1Byb21pc2UodmFsKSl7XG5yZXR1cm4gRS53aGVuKHZhbCwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCBuYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMocmVjKTtcbmNvbnN0IHZhbFBzPW5hbWVzLm1hcCgobmFtZSk9PmRlZXBseUZ1bGZpbGxlZChyZWNbbmFtZV0pKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PlxuaGFyZGVuKGZyb21FbnRyaWVzKHZhbHMubWFwKChjLGkpPT5bbmFtZXNbaV0sY10pKSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGFycj0vKiAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB2YWxQcz1hcnIubWFwKChwKT0+ZGVlcGx5RnVsZmlsbGVkKHApKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PmhhcmRlbih2YWxzKSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnZD0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdGFnPWdldFRhZyh0Z2QpO1xuLy9cbnJldHVybiBFLndoZW4oZGVlcGx5RnVsZmlsbGVkKHRnZC5wYXlsb2FkKSwocGF5bG9hZCk9PlxubWFrZVRhZ2dlZCh0YWcscGF5bG9hZCkpO1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlbT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIHJlbTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlcnI9LyogICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIGVycjtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHByb209LyogICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdmFsO1xucmV0dXJuIEUud2hlbihwcm9tLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTskaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkKGRlZXBseUZ1bGZpbGxlZCk7XG5oYXJkZW4oZGVlcGx5RnVsZmlsbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZCI6WyJkZWVwbHlGdWxmaWxsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiRXJyb3JIZWxwZXIiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciIsImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciIsImlzRXJyb3JMaWtlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsYXNzZXJ0Q2hlY2tlcixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGhhc093bixlbnRyaWVzfT1PYmplY3Q7XG5cbi8vXG4vL1xuY29uc3QgZXJyb3JDb25zdHJ1Y3RvcnM9bmV3IE1hcChcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bXG5bJ0Vycm9yJyxFcnJvcl0sXG5bJ0V2YWxFcnJvcicsRXZhbEVycm9yXSxcblsnUmFuZ2VFcnJvcicsUmFuZ2VFcnJvcl0sXG5bJ1JlZmVyZW5jZUVycm9yJyxSZWZlcmVuY2VFcnJvcl0sXG5bJ1N5bnRheEVycm9yJyxTeW50YXhFcnJvcl0sXG5bJ1R5cGVFcnJvcicsVHlwZUVycm9yXSxcblsnVVJJRXJyb3InLFVSSUVycm9yXVxuXG4vL1xuLy9cbi8vXG4vL1xuXSk7XG5cblxuaWYodHlwZW9mIEFnZ3JlZ2F0ZUVycm9yIT09J3VuZGVmaW5lZCcpe1xuLy9cbmVycm9yQ29uc3RydWN0b3JzLnNldCgnQWdncmVnYXRlRXJyb3InLEFnZ3JlZ2F0ZUVycm9yKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0RXJyb3JDb25zdHJ1Y3Rvcj0obmFtZSk9PmVycm9yQ29uc3RydWN0b3JzLmdldChuYW1lKTskaM2PX29uY2UuZ2V0RXJyb3JDb25zdHJ1Y3RvcihnZXRFcnJvckNvbnN0cnVjdG9yKTtcbmhhcmRlbihnZXRFcnJvckNvbnN0cnVjdG9yKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tFcnJvckxpa2U9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuKFxuY2FuZGlkYXRlIGluc3RhbmNlb2YgRXJyb3J8fFxuISFjaGVjayYmQ1goY2hlY2spIGBFcnJvciBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrRXJyb3JMaWtlKTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzRXJyb3JMaWtlPShjYW5kaWRhdGUpPT5jaGVja0Vycm9yTGlrZShjYW5kaWRhdGUpOyRozY9fb25jZS5pc0Vycm9yTGlrZShpc0Vycm9yTGlrZSk7XG5oYXJkZW4oaXNFcnJvckxpa2UpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjPShcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaz11bmRlZmluZWQpPT5cbntcbmlmKGRlc2MuZW51bWVyYWJsZSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtkZXNjfWApO1xuXG4gfVxuaWYoIWhhc093bihkZXNjLCd2YWx1ZScpKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eTogJHtkZXNjfWApO1xuXG4gfVxuY29uc3R7dmFsdWV9PWRlc2M7XG5zd2l0Y2gocHJvcE5hbWUpe1xuY2FzZSdtZXNzYWdlJzpcbmNhc2Unc3RhY2snOntcbnJldHVybihcbnR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nOiAke3ZhbHVlfWApO1xuXG4gfVxuY2FzZSdjYXVzZSc6e1xuLy9cbnJldHVybiBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcih2YWx1ZSxwYXNzU3R5bGVPZlJlY3VyLGNoZWNrKTtcbiB9XG5jYXNlJ2Vycm9ycyc6e1xuaWYoIUFycmF5LmlzQXJyYXkodmFsdWUpfHxwYXNzU3R5bGVPZlJlY3VyKHZhbHVlKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgY29weUFycmF5OiAke3ZhbHVlfWApO1xuXG4gfVxucmV0dXJuIHZhbHVlLmV2ZXJ5KChlcnIpPT5cbi8vXG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2ZSZWN1cixjaGVjaykpO1xuXG4gfVxuZGVmYXVsdDp7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgaGFzIGV4dHJhIHVucGFzc2VkIHByb3BlcnR5ICR7cShwcm9wTmFtZSl9YCk7XG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcj0oXG5jYW5kaWRhdGUsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZighY2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKTtcbmNvbnN0e25hbWV9PXByb3RvO1xuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihuYW1lKTtcbmlmKGVyckNvbnN0cnVjdG9yPT09dW5kZWZpbmVkfHxlcnJDb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1wcm90byl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaW5oZXJpdCBmcm9tIGFuIGVycm9yIGNsYXNzIC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYoISgnbWVzc2FnZSdpbiBkZXNjcykpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGhhdmUgYW4gb3duIFwibWVzc2FnZVwiIHN0cmluZyBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5cbnJldHVybiBlbnRyaWVzKGRlc2NzKS5ldmVyeSgoW3Byb3BOYW1lLGRlc2NdKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaykpO1xuXG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcik7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBFcnJvckhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidlcnJvcicsXG5cbmNhbkJlVmFsaWQ6Y2hlY2tFcnJvckxpa2UsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIsYXNzZXJ0Q2hlY2tlcil9KTskaM2PX29uY2UuRXJyb3JIZWxwZXIoRXJyb3JIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0RXJyb3JDb25zdHJ1Y3RvciI6WyJnZXRFcnJvckNvbnN0cnVjdG9yIl0sImlzRXJyb3JMaWtlIjpbImlzRXJyb3JMaWtlIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIl0sIkVycm9ySGVscGVyIjpbIkVycm9ySGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvaXRlci1oZWxwZXJzLmpzeyJpbXBvcnRzIjpbIi4vbWFrZS1mYXIuanMiXSwiZXhwb3J0cyI6WyJmaWx0ZXJJdGVyYWJsZSIsIm1hcEl0ZXJhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaM2PX2ltcG9ydHMoW1tcIi4vbWFrZS1mYXIuanNcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFwSXRlcmFibGU9KGJhc2VJdGVyYWJsZSxmdW5jKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdtYXBwZWQgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBiYXNlSXRlcmF0b3I9YmFzZUl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBGYXIoJ21hcHBlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuY29uc3R7dmFsdWU6YmFzZVZhbHVlLGRvbmV9PWJhc2VJdGVyYXRvci5uZXh0KCk7XG5jb25zdCB2YWx1ZT1kb25lP2Jhc2VWYWx1ZTpmdW5jKGJhc2VWYWx1ZSk7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSxkb25lfSk7XG4gfX0pO1xuXG4gfX0pOyRozY9fb25jZS5tYXBJdGVyYWJsZShtYXBJdGVyYWJsZSk7XG5cbmhhcmRlbihtYXBJdGVyYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmaWx0ZXJJdGVyYWJsZT0oYmFzZUl0ZXJhYmxlLHByZWQpPT5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5GYXIoJ2ZpbHRlcmVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdmaWx0ZXJlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuZm9yKDs7KXtcbmNvbnN0IHJlc3VsdD1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3R7dmFsdWUsZG9uZX09cmVzdWx0O1xuaWYoZG9uZXx8cHJlZCh2YWx1ZSkpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuIH19KTtcblxuIH19KTskaM2PX29uY2UuZmlsdGVySXRlcmFibGUoZmlsdGVySXRlcmFibGUpO1xuXG5oYXJkZW4oZmlsdGVySXRlcmFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFwSXRlcmFibGUiOlsibWFwSXRlcmFibGUiXSwiZmlsdGVySXRlcmFibGUiOlsiZmlsdGVySXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9tYWtlLWZhci5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcmVtb3RhYmxlLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiR0VUX01FVEhPRF9OQU1FUyIsIlJlbW90YWJsZSIsIlRvRmFyRnVuY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMscSxGYWlsLGFzc2VydENoZWNrZXIsUEFTU19TVFlMRSxhc3NlcnRJZmFjZSxnZXRJbnRlcmZhY2VPZixSZW1vdGFibGVIZWxwZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3JlbW90YWJsZS5qc1wiLCBbW1wiYXNzZXJ0SWZhY2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0SWZhY2UgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaM2PX2EgPT4gKFJlbW90YWJsZUhlbHBlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbnNldFByb3RvdHlwZU9mLFxuY3JlYXRlLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlUmVtb3RhYmxlUHJvdG89KHJlbW90YWJsZSxpZmFjZSk9PntcbmxldCBvbGRQcm90bz1nZXRQcm90b3R5cGVPZihyZW1vdGFibGUpO1xuaWYodHlwZW9mIHJlbW90YWJsZT09PSdvYmplY3QnKXtcbmlmKG9sZFByb3RvPT09bnVsbCl7XG5vbGRQcm90bz1vYmplY3RQcm90b3R5cGU7XG4gfVxub2xkUHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuRmFpbCBgRm9yIG5vdywgcmVtb3RhYmxlcyBjYW5ub3QgaW5oZXJpdCBmcm9tIGFueXRoaW5nIHVudXN1YWwsIGluICR7cmVtb3RhYmxlfWA7XG4gfWVsc2UgaWYodHlwZW9mIHJlbW90YWJsZT09PSdmdW5jdGlvbicpe1xub2xkUHJvdG8hPT1udWxsfHxcbkZhaWwgYE9yaWdpbmFsIGZ1bmN0aW9uIG11c3Qgbm90IGluaGVyaXQgZnJvbSBudWxsOiAke3JlbW90YWJsZX1gO1xub2xkUHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5nZXRQcm90b3R5cGVPZihvbGRQcm90byk9PT1mdW5jdGlvblByb3RvdHlwZXx8XG5GYWlsIGBGYXIgZnVuY3Rpb25zIG11c3Qgb3JpZ2luYWxseSBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNle1xuRmFpbCBgdW5yZWNvZ25pemVkIHR5cGVvZiAke3JlbW90YWJsZX1gO1xuIH1cbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2xkUHJvdG8se1xuW1BBU1NfU1RZTEVdOnt2YWx1ZToncmVtb3RhYmxlJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6aWZhY2V9fSkpO1xuXG5cbiB9O1xuXG5jb25zdCBhc3NlcnRDYW5CZVJlbW90YWJsZT0oY2FuZGlkYXRlKT0+XG5SZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBSZW1vdGFibGU9KFxuLy9cbmlmYWNlPSdSZW1vdGFibGUnLFxucHJvcHM9dW5kZWZpbmVkLFxucmVtb3RhYmxlPS8qICAgICAgICAgICAgKi97fSk9Plxue1xuYXNzZXJ0SWZhY2UoaWZhY2UpO1xuYXNzZXJ0KGlmYWNlKTtcbi8vXG4vL1xucHJvcHM9PT11bmRlZmluZWR8fEZhaWwgYFJlbW90YWJsZSBwcm9wcyBub3QgeWV0IGltcGxlbWVudGVkICR7cHJvcHN9YDtcblxuLy9cbmFzc2VydENhbkJlUmVtb3RhYmxlKHJlbW90YWJsZSk7XG5cbi8vXG4hKFBBU1NfU1RZTEUgaW4gcmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgbWFya2VkIGFzIGEgJHtxKFxucmVtb3RhYmxlW1BBU1NfU1RZTEVdKVxuIH1gO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4uaXNGYWtlfHxcbi8vXG4haXNGcm96ZW4ocmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgZnJvemVuYDtcbmNvbnN0IHJlbW90YWJsZVByb3RvPW1ha2VSZW1vdGFibGVQcm90byhyZW1vdGFibGUsaWZhY2UpO1xuXG4vL1xuLy9cbmNvbnN0IG11dGF0ZUhhcmRlbkFuZENoZWNrPSh0YXJnZXQpPT57XG4vL1xuc2V0UHJvdG90eXBlT2YodGFyZ2V0LHJlbW90YWJsZVByb3RvKTtcbmhhcmRlbih0YXJnZXQpO1xuYXNzZXJ0Q2FuQmVSZW1vdGFibGUodGFyZ2V0KTtcbiB9O1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2soe30pO1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2socmVtb3RhYmxlKTtcblxuLy9cbi8vXG5hc3NlcnQoaWZhY2UhPT11bmRlZmluZWQpOy8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAqL3JlbW90YWJsZSk7XG4gfTskaM2PX29uY2UuUmVtb3RhYmxlKFJlbW90YWJsZSk7XG5oYXJkZW4oUmVtb3RhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9NRVRIT0RfTkFNRVM9J19fZ2V0TWV0aG9kTmFtZXNfXyc7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5HRVRfTUVUSE9EX05BTUVTKEdFVF9NRVRIT0RfTkFNRVMpO1xuY29uc3QgZ2V0TWV0aG9kTmFtZXNNZXRob2Q9aGFyZGVuKHtcbltHRVRfTUVUSE9EX05BTUVTXSgpe1xucmV0dXJuIGdldE1ldGhvZE5hbWVzKHRoaXMpO1xuIH19KVtcbkdFVF9NRVRIT0RfTkFNRVNdO1xuXG5jb25zdCBnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3I9aGFyZGVuKHtcbnZhbHVlOmdldE1ldGhvZE5hbWVzTWV0aG9kLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZSxcbndyaXRhYmxlOmZhbHNlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEZhcj0oZmFyTmFtZSxyZW1vdGFibGU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgcj1yZW1vdGFibGU9PT11bmRlZmluZWQ/LyogICAgICAgICAgICAqL3t9OnJlbW90YWJsZTtcbmlmKHR5cGVvZiByPT09J29iamVjdCcmJiEoR0VUX01FVEhPRF9OQU1FUyBpbiByKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsR0VUX01FVEhPRF9OQU1FUyxnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3IpO1xuIH1cbnJldHVybiBSZW1vdGFibGUoIGBBbGxlZ2VkOiAke2Zhck5hbWV9YCx1bmRlZmluZWQscik7XG4gfTskaM2PX29uY2UuRmFyKEZhcik7XG5oYXJkZW4oRmFyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRvRmFyRnVuY3Rpb249KGZhck5hbWUsZnVuYyk9PntcbmlmKGdldEludGVyZmFjZU9mKGZ1bmMpIT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gZnVuYztcbiB9XG4vL1xucmV0dXJuIEZhcihmYXJOYW1lLCguLi5hcmdzKT0+ZnVuYyguLi5hcmdzKSk7XG4gfTskaM2PX29uY2UuVG9GYXJGdW5jdGlvbihUb0ZhckZ1bmN0aW9uKTtcbmhhcmRlbihUb0ZhckZ1bmN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlJlbW90YWJsZSI6WyJSZW1vdGFibGUiXSwiR0VUX01FVEhPRF9OQU1FUyI6WyJHRVRfTUVUSE9EX05BTUVTIl0sIkZhciI6WyJGYXIiXSwiVG9GYXJGdW5jdGlvbiI6WyJUb0ZhckZ1bmN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvbWFrZVRhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbIm1ha2VUYWdnZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxQQVNTX1NUWUxFLGFzc2VydFBhc3NhYmxlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuY29uc3R7Y3JlYXRlLHByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVGFnZ2VkPSh0YWcscGF5bG9hZCk9PntcbnR5cGVvZiB0YWc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBUaGUgdGFnIG9mIGEgdGFnZ2VkIHJlY29yZCBtdXN0IGJlIGEgc3RyaW5nOiAke3RhZ31gO1xuYXNzZXJ0UGFzc2FibGUoaGFyZGVuKHBheWxvYWQpKTtcbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2JqZWN0UHJvdG90eXBlLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3RhZ2dlZCd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOnRhZ30sXG5wYXlsb2FkOnt2YWx1ZTpwYXlsb2FkLGVudW1lcmFibGU6dHJ1ZX19KSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VUYWdnZWQobWFrZVRhZ2dlZCk7XG5oYXJkZW4obWFrZVRhZ2dlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlVGFnZ2VkIjpbIm1ha2VUYWdnZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAADSKSdxQVAAAUFQAAMAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJDWCIsIlBBU1NfU1RZTEUiLCJhc3NlcnRDaGVja2VyIiwiY2FuQmVNZXRob2QiLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIiwiY2hlY2tQYXNzU3R5bGUiLCJjaGVja1RhZ1JlY29yZCIsImdldE93bkRhdGFEZXNjcmlwdG9yIiwiZ2V0VGFnIiwiaGFzT3duUHJvcGVydHlPZiIsImlzT2JqZWN0IiwiaXNUeXBlZEFycmF5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e3Byb3RvdHlwZTpmdW5jdGlvblByb3RvdHlwZX09RnVuY3Rpb247XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbmdldFByb3RvdHlwZU9mLFxuaGFzT3duUHJvcGVydHk6b2JqZWN0SGFzT3duUHJvcGVydHksXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PVxuT2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZzp0b1N0cmluZ1RhZ1N5bWJvbH09U3ltYm9sO1xuXG5jb25zdCB0eXBlZEFycmF5UHJvdG90eXBlPWdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkucHJvdG90eXBlKTtcbmNvbnN0IHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxudHlwZWRBcnJheVByb3RvdHlwZSxcbnRvU3RyaW5nVGFnU3ltYm9sKTtcblxuYXNzZXJ0KHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MpO1xuY29uc3QgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPXR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MuZ2V0O1xuYXNzZXJ0KHR5cGVvZiBnZXRUeXBlZEFycmF5VG9TdHJpbmdUYWc9PT0nZnVuY3Rpb24nKTtcblxuY29uc3QgICAgICAgIGhhc093blByb3BlcnR5T2Y9KG9iaixwcm9wKT0+XG5hcHBseShvYmplY3RIYXNPd25Qcm9wZXJ0eSxvYmosW3Byb3BdKTskaM2PX29uY2UuaGFzT3duUHJvcGVydHlPZihoYXNPd25Qcm9wZXJ0eU9mKTtcbmhhcmRlbihoYXNPd25Qcm9wZXJ0eU9mKTtcblxuLy9cbmNvbnN0ICAgICAgICBpc09iamVjdD0odmFsKT0+T2JqZWN0KHZhbCk9PT12YWw7JGjNj19vbmNlLmlzT2JqZWN0KGlzT2JqZWN0KTtcbmhhcmRlbihpc09iamVjdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1R5cGVkQXJyYXk9KG9iamVjdCk9Pntcbi8vXG5jb25zdCB0YWc9YXBwbHkoZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLG9iamVjdCxbXSk7XG5yZXR1cm4gdGFnIT09dW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmlzVHlwZWRBcnJheShpc1R5cGVkQXJyYXkpO1xuaGFyZGVuKGlzVHlwZWRBcnJheSk7XG5cbmNvbnN0ICAgICAgICBQQVNTX1NUWUxFPVN5bWJvbC5mb3IoJ3Bhc3NTdHlsZScpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5QQVNTX1NUWUxFKFBBU1NfU1RZTEUpO1xuY29uc3QgICAgICAgIGNhbkJlTWV0aG9kPShmdW5jKT0+XG50eXBlb2YgZnVuYz09PSdmdW5jdGlvbicmJiEoUEFTU19TVFlMRSBpbiBmdW5jKTskaM2PX29uY2UuY2FuQmVNZXRob2QoY2FuQmVNZXRob2QpO1xuaGFyZGVuKGNhbkJlTWV0aG9kKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydENoZWNrZXI9KGNvbmQsZGV0YWlscyk9PntcbmFzc2VydChjb25kLGRldGFpbHMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q2hlY2tlcihhc3NlcnRDaGVja2VyKTtcbmhhcmRlbihhc3NlcnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQ1g9KGNoZWNrKT0+e1xuY29uc3QgcmVqZWN0PShULC4uLnN1YnMpPT5jaGVjayhmYWxzZSxYKFQsLi4uc3VicykpO1xucmV0dXJuIHJlamVjdDtcbiB9OyRozY9fb25jZS5DWChDWCk7XG5oYXJkZW4oQ1gpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE93bkRhdGFEZXNjcmlwdG9yPShcbmNhbmRpZGF0ZSxcbnByb3BOYW1lLFxuc2hvdWxkQmVFbnVtZXJhYmxlLFxuY2hlY2spPT5cbntcbmNvbnN0IGRlc2M9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY2FuZGlkYXRlLHByb3BOYW1lKTtcblxucmV0dXJuKGRlc2MhPT11bmRlZmluZWR8fFxuISFjaGVjayYmQ1goY2hlY2spIGAke3EocHJvcE5hbWUpfSBwcm9wZXJ0eSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCkmJihcbmhhc093blByb3BlcnR5T2YoZGVzYywndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGFjY2Vzc29yIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKSYmKFxuc2hvdWxkQmVFbnVtZXJhYmxlP1xuZGVzYy5lbnVtZXJhYmxlfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgJHtxKHByb3BOYW1lKX0gbXVzdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gOlxuIWRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGVudW1lcmFibGUgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApP1xuZGVzYzpcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmdldE93bkRhdGFEZXNjcmlwdG9yKGdldE93bkRhdGFEZXNjcmlwdG9yKTtcbmhhcmRlbihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRUYWc9KHRhZ1JlY29yZCk9PnRhZ1JlY29yZFtTeW1ib2wudG9TdHJpbmdUYWddOyRozY9fb25jZS5nZXRUYWcoZ2V0VGFnKTtcbmhhcmRlbihnZXRUYWcpO1xuXG5jb25zdCAgICAgICAgY2hlY2tQYXNzU3R5bGU9KG9iaixwYXNzU3R5bGUsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG5wYXNzU3R5bGU9PT1leHBlY3RlZFBhc3NTdHlsZXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRXhwZWN0ZWQgJHtxKGV4cGVjdGVkUGFzc1N0eWxlKX0sIG5vdCAke3EocGFzc1N0eWxlKX06ICR7b2JqfWApO1xuXG4gfTskaM2PX29uY2UuY2hlY2tQYXNzU3R5bGUoY2hlY2tQYXNzU3R5bGUpO1xuaGFyZGVuKGNoZWNrUGFzc1N0eWxlKTtcblxuY29uc3QgbWFrZUNoZWNrVGFnUmVjb3JkPShjaGVja1Byb3RvKT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnUmVjb3JkPSh0YWdSZWNvcmQsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNPYmplY3QodGFnUmVjb3JkKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgQSBub24tb2JqZWN0IGNhbm5vdCBiZSBhIHRhZ1JlY29yZDogJHt0YWdSZWNvcmR9YCkmJihcbmlzRnJvemVuKHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBIHRhZ1JlY29yZCBtdXN0IGJlIGZyb3plbjogJHt0YWdSZWNvcmR9YCkmJihcbiFpc0FycmF5KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBbiBhcnJheSBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUGFzc1N0eWxlKFxudGFnUmVjb3JkLFxuZ2V0T3duRGF0YURlc2NyaXB0b3IodGFnUmVjb3JkLFBBU1NfU1RZTEUsZmFsc2UsY2hlY2spLnZhbHVlLFxuZXhwZWN0ZWRQYXNzU3R5bGUsXG5jaGVjaykmJihcblxudHlwZW9mIGdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxTeW1ib2wudG9TdHJpbmdUYWcsZmFsc2UsY2hlY2spLlxudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEEgW1N5bWJvbC50b1N0cmluZ1RhZ10tbmFtZWQgcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt0YWdSZWNvcmR9YCkmJlxuY2hlY2tQcm90byh0YWdSZWNvcmQsZ2V0UHJvdG90eXBlT2YodGFnUmVjb3JkKSxjaGVjaykpO1xuXG4gfTtcbnJldHVybiBoYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuIH07XG5cbmNvbnN0ICAgICAgICBjaGVja1RhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG4hIWNoZWNrJiZcbmNoZWNrKGZhbHNlLFggYEEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7dmFsfWApKTskaM2PX29uY2UuY2hlY2tUYWdSZWNvcmQoY2hlY2tUYWdSZWNvcmQpO1xuXG5oYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuXG5jb25zdCAgICAgICAgY2hlY2tGdW5jdGlvblRhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbnByb3RvIT09bnVsbCYmZ2V0UHJvdG90eXBlT2YocHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhcbmZhbHNlLFxuWCBgRm9yIGZ1bmN0aW9ucywgYSB0YWdSZWNvcmQgbXVzdCBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrRnVuY3Rpb25UYWdSZWNvcmQoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCk7XG5cblxuaGFyZGVuKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaGFzT3duUHJvcGVydHlPZiI6WyJoYXNPd25Qcm9wZXJ0eU9mIl0sImlzT2JqZWN0IjpbImlzT2JqZWN0Il0sImlzVHlwZWRBcnJheSI6WyJpc1R5cGVkQXJyYXkiXSwiUEFTU19TVFlMRSI6WyJQQVNTX1NUWUxFIl0sImNhbkJlTWV0aG9kIjpbImNhbkJlTWV0aG9kIl0sImFzc2VydENoZWNrZXIiOlsiYXNzZXJ0Q2hlY2tlciJdLCJDWCI6WyJDWCJdLCJnZXRPd25EYXRhRGVzY3JpcHRvciI6WyJnZXRPd25EYXRhRGVzY3JpcHRvciJdLCJnZXRUYWciOlsiZ2V0VGFnIl0sImNoZWNrUGFzc1N0eWxlIjpbImNoZWNrUGFzc1N0eWxlIl0sImNoZWNrVGFnUmVjb3JkIjpbImNoZWNrVGFnUmVjb3JkIl0sImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiOlsiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3Bhc3NTdHlsZU9mLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vY29weUFycmF5LmpzIiwiLi9jb3B5UmVjb3JkLmpzIiwiLi90YWdnZWQuanMiLCIuL2Vycm9yLmpzIiwiLi9yZW1vdGFibGUuanMiLCIuL3N5bWJvbC5qcyIsIi4vc2FmZS1wcm9taXNlLmpzIiwiLi9zdHJpbmcuanMiXSwiZXhwb3J0cyI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCIsImFzc2VydFBhc3NhYmxlIiwiaXNQYXNzYWJsZSIsInBhc3NTdHlsZU9mIiwidG9QYXNzYWJsZUVycm9yIiwidG9UaHJvd2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLFgsRmFpbCxxLGFubm90YXRlRXJyb3IsbWFrZUVycm9yLGlzT2JqZWN0LGlzVHlwZWRBcnJheSxQQVNTX1NUWUxFLENvcHlBcnJheUhlbHBlcixDb3B5UmVjb3JkSGVscGVyLFRhZ2dlZEhlbHBlcixFcnJvckhlbHBlcixjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyxjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcixnZXRFcnJvckNvbnN0cnVjdG9yLGlzRXJyb3JMaWtlLFJlbW90YWJsZUhlbHBlcixhc3NlcnRQYXNzYWJsZVN5bWJvbCxhc3NlcnRTYWZlUHJvbWlzZSxhc3NlcnRQYXNzYWJsZVN0cmluZzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzVHlwZWRBcnJheVwiLCBbJGjNj19hID0+IChpc1R5cGVkQXJyYXkgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5QXJyYXkuanNcIiwgW1tcIkNvcHlBcnJheUhlbHBlclwiLCBbJGjNj19hID0+IChDb3B5QXJyYXlIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlSZWNvcmQuanNcIiwgW1tcIkNvcHlSZWNvcmRIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weVJlY29yZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vdGFnZ2VkLmpzXCIsIFtbXCJUYWdnZWRIZWxwZXJcIiwgWyRozY9fYSA9PiAoVGFnZ2VkSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9lcnJvci5qc1wiLCBbW1wiRXJyb3JIZWxwZXJcIiwgWyRozY9fYSA9PiAoRXJyb3JIZWxwZXIgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2NcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N5bWJvbC5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCIuL3NhZmUtcHJvbWlzZS5qc1wiLCBbW1wiYXNzZXJ0U2FmZVByb21pc2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2FmZVByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3N0cmluZy5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTdHJpbmdcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTdHJpbmcgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0Zyb3plbixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLHZhbHVlc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBtYWtlSGVscGVyVGFibGU9KHBhc3NTdHlsZUhlbHBlcnMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEhlbHBlclRhYmxlPXtcbl9fcHJvdG9fXzpudWxsLFxuY29weUFycmF5OnVuZGVmaW5lZCxcbmNvcHlSZWNvcmQ6dW5kZWZpbmVkLFxudGFnZ2VkOnVuZGVmaW5lZCxcbmVycm9yOnVuZGVmaW5lZCxcbnJlbW90YWJsZTp1bmRlZmluZWR9O1xuXG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuY29uc3R7c3R5bGVOYW1lfT1oZWxwZXI7XG5zdHlsZU5hbWUgaW4gSGVscGVyVGFibGV8fEZhaWwgYFVucmVjb2duaXplZCBoZWxwZXI6ICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPT09dW5kZWZpbmVkfHxcbkZhaWwgYGNvbmZsaWN0aW5nIGhlbHBlcnMgZm9yICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPWhlbHBlcjtcbiB9XG5mb3IoY29uc3Qgc3R5bGVOYW1lIG9mIG93bktleXMoSGVscGVyVGFibGUpKXtcbkhlbHBlclRhYmxlW3N0eWxlTmFtZV0hPT11bmRlZmluZWR8fFxuRmFpbCBgbWlzc2luZyBoZWxwZXIgZm9yICR7cShzdHlsZU5hbWUpfWA7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKEhlbHBlclRhYmxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVBhc3NTdHlsZU9mPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuY29uc3QgSGVscGVyVGFibGU9bWFrZUhlbHBlclRhYmxlKHBhc3NTdHlsZUhlbHBlcnMpO1xuY29uc3QgcmVtb3RhYmxlSGVscGVyPUhlbHBlclRhYmxlLnJlbW90YWJsZTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcGFzc1N0eWxlTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gICAqL1xuLy9cbmNvbnN0IHBhc3NTdHlsZU9mPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGluUHJvZ3Jlc3M9bmV3IFNldCgpO1xuXG5jb25zdCBwYXNzU3R5bGVPZlJlY3VyPShpbm5lcik9PntcbmNvbnN0IGlubmVySXNPYmplY3Q9aXNPYmplY3QoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5jb25zdCBpbm5lclN0eWxlPXBhc3NTdHlsZU1lbW8uZ2V0KGlubmVyKTtcbmlmKGlubmVyU3R5bGUpe1xucmV0dXJuIGlubmVyU3R5bGU7XG4gfVxuIWluUHJvZ3Jlc3MuaGFzKGlubmVyKXx8XG5GYWlsIGBQYXNzLWJ5LWNvcHkgZGF0YSBjYW5ub3QgYmUgY3ljbGljICR7aW5uZXJ9YDtcbmluUHJvZ3Jlc3MuYWRkKGlubmVyKTtcbiB9XG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mSW50ZXJuYWwoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5wYXNzU3R5bGVNZW1vLnNldChpbm5lcixwYXNzU3R5bGUpO1xuaW5Qcm9ncmVzcy5kZWxldGUoaW5uZXIpO1xuIH1cbnJldHVybiBwYXNzU3R5bGU7XG4gfTtcblxuY29uc3QgcGFzc1N0eWxlT2ZJbnRlcm5hbD0oaW5uZXIpPT57XG5jb25zdCB0eXBlc3RyPXR5cGVvZiBpbm5lcjtcbnN3aXRjaCh0eXBlc3RyKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6e1xucmV0dXJuIHR5cGVzdHI7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmFzc2VydFBhc3NhYmxlU3RyaW5nKGlubmVyKTtcbnJldHVybidzdHJpbmcnO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChpbm5lcik7XG5yZXR1cm4nc3ltYm9sJztcbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoaW5uZXI9PT1udWxsKXtcbnJldHVybidudWxsJztcbiB9XG5pZighaXNGcm96ZW4oaW5uZXIpKXtcbmFzc2VydC5mYWlsKFxuLy9cbi8vXG5pc1R5cGVkQXJyYXkoaW5uZXIpP1xuWCBgQ2Fubm90IHBhc3MgbXV0YWJsZSB0eXBlZCBhcnJheXMgbGlrZSAke2lubmVyfS5gOlxuWCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWApO1xuXG4gfVxuaWYoaXNQcm9taXNlKGlubmVyKSl7XG5hc3NlcnRTYWZlUHJvbWlzZShpbm5lcik7XG5yZXR1cm4ncHJvbWlzZSc7XG4gfVxudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5jb25zdCBwYXNzU3R5bGVUYWc9aW5uZXJbUEFTU19TVFlMRV07XG5pZihwYXNzU3R5bGVUYWchPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihwYXNzU3R5bGVUYWcsJ3N0cmluZycpO1xuY29uc3QgaGVscGVyPUhlbHBlclRhYmxlW3Bhc3NTdHlsZVRhZ107XG5oZWxwZXIhPT11bmRlZmluZWR8fFxuRmFpbCBgVW5yZWNvZ25pemVkIFBhc3NTdHlsZTogJHtxKHBhc3NTdHlsZVRhZyl9YDtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICovcGFzc1N0eWxlVGFnKTtcbiB9XG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuaWYoaGVscGVyLmNhbkJlVmFsaWQoaW5uZXIpKXtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiBoZWxwZXIuc3R5bGVOYW1lO1xuIH1cbiB9XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5jYXNlJ2Z1bmN0aW9uJzp7XG5pc0Zyb3plbihpbm5lcil8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWA7XG50eXBlb2YgaW5uZXIudGhlbiE9PSdmdW5jdGlvbid8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLXByb21pc2UgdGhlbmFibGVzYDtcbnJlbW90YWJsZUhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybidyZW1vdGFibGUnO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoWCBgVW5yZWNvZ25pemVkIHR5cGVvZiAke3EodHlwZXN0cil9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9O1xuXG5yZXR1cm4gcGFzc1N0eWxlT2ZSZWN1cihwYXNzYWJsZSk7XG4gfTtcbnJldHVybiBoYXJkZW4ocGFzc1N0eWxlT2YpO1xuIH07XG5cbmNvbnN0ICAgICAgICBQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbD1TeW1ib2wuZm9yKCdAZW5kbyBwYXNzU3R5bGVPZicpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2woUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wpO1xuY29uc3QgICAgICAgIHBhc3NTdHlsZU9mPVxuZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpc1tQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbF18fFxubWFrZVBhc3NTdHlsZU9mKFtcbkNvcHlBcnJheUhlbHBlcixcbkNvcHlSZWNvcmRIZWxwZXIsXG5UYWdnZWRIZWxwZXIsXG5FcnJvckhlbHBlcixcblJlbW90YWJsZUhlbHBlcl0pOyRozY9fb25jZS5wYXNzU3R5bGVPZihwYXNzU3R5bGVPZik7XG5cblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlPSh2YWwpPT57XG5wYXNzU3R5bGVPZih2YWwpOy8vXG4gfTskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGUoYXNzZXJ0UGFzc2FibGUpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlPShzcGVjaW1lbik9PntcbnRyeXtcbi8vXG4vL1xucmV0dXJuIHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PXVuZGVmaW5lZDtcbiB9Y2F0Y2goXyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH07JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG5oYXJkZW4oaXNQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0obmFtZSxkZXNjKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhuYW1lLGRlc2MscGFzc1N0eWxlT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvUGFzc2FibGVFcnJvcj0oZXJyKT0+e1xuaGFyZGVuKGVycik7XG5pZihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2YpKXtcbnJldHVybiBlcnI7XG4gfVxuY29uc3R7bmFtZSxtZXNzYWdlfT1lcnI7XG5jb25zdHtjYXVzZTpjYXVzZURlc2MsZXJyb3JzOmVycm9yc0Rlc2N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlcnIpO1xubGV0IGNhdXNlO1xubGV0IGVycm9ycztcbmlmKGNhdXNlRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdjYXVzZScsY2F1c2VEZXNjKSl7XG5jYXVzZT1jYXVzZURlc2MudmFsdWU7XG4gfVxuaWYoZXJyb3JzRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdlcnJvcnMnLGVycm9yc0Rlc2MpKXtcbmVycm9ycz1lcnJvcnNEZXNjLnZhbHVlO1xuIH1cblxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvciggYCR7bmFtZX1gKXx8RXJyb3I7XG5jb25zdCBuZXdFcnJvcj1tYWtlRXJyb3IoIGAke21lc3NhZ2V9YCxlcnJDb25zdHJ1Y3Rvcix7XG4vL1xuY2F1c2UsXG5lcnJvcnN9KTtcblxuLy9cbmhhcmRlbihuZXdFcnJvcik7XG4vL1xuLy9cbi8vXG5hbm5vdGF0ZUVycm9yKG5ld0Vycm9yLFggYGNvcGllZCBmcm9tIGVycm9yICR7ZXJyfWApO1xucGFzc1N0eWxlT2YobmV3RXJyb3IpPT09J2Vycm9yJ3x8XG5GYWlsIGBFeHBlY3RlZCAke25ld0Vycm9yfSB0byBiZSBhIHBhc3NhYmxlIGVycm9yYDtcbnJldHVybiBuZXdFcnJvcjtcbiB9OyRozY9fb25jZS50b1Bhc3NhYmxlRXJyb3IodG9QYXNzYWJsZUVycm9yKTtcbmhhcmRlbih0b1Bhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9UaHJvd2FibGU9KHNwZWNpbWVuKT0+e1xuaGFyZGVuKHNwZWNpbWVuKTtcbmlmKGlzRXJyb3JMaWtlKHNwZWNpbWVuKSl7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKC8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihpc09iamVjdChzcGVjaW1lbikpe1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgZWxlbWVudHM9LyogICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyl7XG5lbGVtZW50PT09dG9UaHJvd2FibGUoZWxlbWVudCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7ZWxlbWVudH1gO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmZvcihjb25zdCB2YWwgb2YgdmFsdWVzKHJlYykpe1xudmFsPT09dG9UaHJvd2FibGUodmFsKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHt2YWx9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGc9LyogICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuY29uc3R7cGF5bG9hZH09dGc7XG5wYXlsb2FkPT09dG9UaHJvd2FibGUocGF5bG9hZCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7cGF5bG9hZH1gO1xuYnJlYWs7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXI9LyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmVyPT09dG9UaHJvd2FibGUoZXIpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VyfWA7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYEEgJHtxKHBhc3NTdHlsZSl9IGlzIG5vdCB0aHJvd2FibGU6ICR7c3BlY2ltZW59YDtcbiB9fVxuXG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbik7XG4gfTskaM2PX29uY2UudG9UaHJvd2FibGUodG9UaHJvd2FibGUpO1xuaGFyZGVuKHRvVGhyb3dhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIjpbIlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIl0sInBhc3NTdHlsZU9mIjpbInBhc3NTdHlsZU9mIl0sImFzc2VydFBhc3NhYmxlIjpbImFzc2VydFBhc3NhYmxlIl0sImlzUGFzc2FibGUiOlsiaXNQYXNzYWJsZSJdLCJ0b1Bhc3NhYmxlRXJyb3IiOlsidG9QYXNzYWJsZUVycm9yIl0sInRvVGhyb3dhYmxlIjpbInRvVGhyb3dhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFKEe3qmFwAAphcAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvcmVtb3RhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJSZW1vdGFibGVIZWxwZXIiLCJhc3NlcnRJZmFjZSIsImdldEludGVyZmFjZU9mIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxhc3NlcnRDaGVja2VyLGNhbkJlTWV0aG9kLGhhc093blByb3BlcnR5T2YsUEFTU19TVFlMRSxjaGVja1RhZ1JlY29yZCxjaGVja0Z1bmN0aW9uVGFnUmVjb3JkLGlzT2JqZWN0LGdldFRhZyxDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcImNoZWNrRnVuY3Rpb25UYWdSZWNvcmRcIiwgWyRozY9fYSA9PiAoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZSxcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tJZmFjZT0oaWZhY2UsY2hlY2spPT57XG5yZXR1cm4oXG4vL1xuKHR5cGVvZiBpZmFjZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRm9yIG5vdywgaW50ZXJmYWNlICR7aWZhY2V9IG11c3QgYmUgYSBzdHJpbmc7IHVuaW1wbGVtZW50ZWRgKSYmKFxuaWZhY2U9PT0nUmVtb3RhYmxlJ3x8XG5pZmFjZS5zdGFydHNXaXRoKCdBbGxlZ2VkOiAnKXx8XG5pZmFjZS5zdGFydHNXaXRoKCdEZWJ1Z05hbWU6ICcpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBGb3Igbm93LCBpZmFjZSAke3EoXG5pZmFjZSlcbiB9IG11c3QgYmUgXCJSZW1vdGFibGVcIiBvciBiZWdpbiB3aXRoIFwiQWxsZWdlZDogXCIgb3IgXCJEZWJ1Z05hbWU6IFwiOyB1bmltcGxlbWVudGVkYCkpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRJZmFjZT0oaWZhY2UpPT5jaGVja0lmYWNlKGlmYWNlLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRJZmFjZShhc3NlcnRJZmFjZSk7XG5oYXJkZW4oYXNzZXJ0SWZhY2UpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZVByb3RvT2Y9KG9yaWdpbmFsLGNoZWNrKT0+e1xuaXNPYmplY3Qob3JpZ2luYWwpfHxcbkZhaWwgYFJlbW90YWJsZXMgbXVzdCBiZSBvYmplY3RzIG9yIGZ1bmN0aW9uczogJHtvcmlnaW5hbH1gO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKG9yaWdpbmFsKTtcbmlmKFxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxucHJvdG89PT1udWxsfHxcbnByb3RvPT09RnVuY3Rpb24ucHJvdG90eXBlKVxue1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlbW90YWJsZXMgbXVzdCBiZSBleHBsaWNpdGx5IGRlY2xhcmVkOiAke3Eob3JpZ2luYWwpfWApO1xuXG4gfVxuXG5pZih0eXBlb2Ygb3JpZ2luYWw9PT0nb2JqZWN0Jyl7XG5jb25zdCBwcm90b1Byb3RvPWdldFByb3RvdHlwZU9mKHByb3RvKTtcbmlmKHByb3RvUHJvdG8hPT1vYmplY3RQcm90b3R5cGUmJnByb3RvUHJvdG8hPT1udWxsKXtcbi8vXG5yZXR1cm4gY2hlY2tSZW1vdGFibGUocHJvdG8sY2hlY2spO1xuIH1cbmlmKCFjaGVja1RhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9ZWxzZSBpZih0eXBlb2Ygb3JpZ2luYWw9PT0nZnVuY3Rpb24nKXtcbmlmKCFjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cblxuLy9cbmNvbnN0IHBhc3NTdHlsZUtleT0vKiAgICAgICAgICAgICAgICAgICovUEFTU19TVFlMRTtcbmNvbnN0IHRhZ0tleT0vKiAgICAgICAgICAgICAgICAgICovU3ltYm9sLnRvU3RyaW5nVGFnO1xuY29uc3R7XG4vL1xuWy8qICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZUtleV06X3Bhc3NTdHlsZURlc2MsXG5bLyogICAgICAgICAgICAgICAgICovdGFnS2V5XTp7dmFsdWU6aWZhY2V9LFxuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pO1xuXG5yZXR1cm4oXG4ob3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIHByb3BlcnRpZXMgb24gUmVtb3RhYmxlIFByb3RvICR7b3duS2V5cyhyZXN0RGVzY3MpfWApJiZcbmNoZWNrSWZhY2UoaWZhY2UsY2hlY2spKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29uZmlybWVkUmVtb3RhYmxlcz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZT0odmFsLGNoZWNrKT0+e1xuaWYoY29uZmlybWVkUmVtb3RhYmxlcy5oYXModmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighaXNGcm96ZW4odmFsKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZDWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHt2YWx9YCk7XG5cbiB9XG4vL1xuaWYoIVJlbW90YWJsZUhlbHBlci5jYW5CZVZhbGlkKHZhbCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHJlc3VsdD1jaGVja1JlbW90YWJsZVByb3RvT2YodmFsLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb25maXJtZWRSZW1vdGFibGVzLmFkZCh2YWwpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlT2Y9KHZhbCk9PntcbmlmKFxuIWlzT2JqZWN0KHZhbCl8fFxudmFsW1BBU1NfU1RZTEVdIT09J3JlbW90YWJsZSd8fFxuIWNoZWNrUmVtb3RhYmxlKHZhbCkpXG57XG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xucmV0dXJuIGdldFRhZyh2YWwpO1xuIH07JGjNj19vbmNlLmdldEludGVyZmFjZU9mKGdldEludGVyZmFjZU9mKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VPZik7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3JlbW90YWJsZScsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5jb25zdCB2YWxpZFR5cGU9XG4oaXNPYmplY3QoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tb2JqZWN0cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCkmJihcbiFpc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgYXJyYXlzIGFzIFJlbW90YWJsZSAke2NhbmRpZGF0ZX1gKTtcbmlmKCF2YWxpZFR5cGUpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYodHlwZW9mIGNhbmRpZGF0ZT09PSdvYmplY3QnKXtcbi8vXG4vL1xucmV0dXJuIG93bktleXMoZGVzY3MpLmV2ZXJ5KChrZXkpPT57XG5yZXR1cm4oXG4vL1xuKGhhc093blByb3BlcnR5T2YoZGVzY3NbLyogICAgICAgICAgICAgICAgICova2V5XSwndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggYWNjZXNzb3JzIGxpa2UgJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpbiAke2NhbmRpZGF0ZX1gKSYmKFxua2V5PT09U3ltYm9sLnRvU3RyaW5nVGFnJiZjaGVja0lmYWNlKGNhbmRpZGF0ZVtrZXldLGNoZWNrKXx8XG4oY2FuQmVNZXRob2QoY2FuZGlkYXRlW2tleV0pfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIFJlbW90YWJsZXMgd2l0aCBub24tbWV0aG9kcyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleSE9PVBBU1NfU1RZTEV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgcGFzcy1ieS1yZW1vdGUgY2Fubm90IHNoYWRvdyAke3EoUEFTU19TVFlMRSl9YCkpKTtcblxuIH0pO1xuIH1lbHNlIGlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nZnVuY3Rpb24nKXtcbi8vXG4vL1xuY29uc3R7XG5uYW1lOm5hbWVEZXNjLFxubGVuZ3RoOmxlbmd0aERlc2MsXG4vL1xuW1N5bWJvbC50b1N0cmluZ1RhZ106dG9TdHJpbmdUYWdEZXNjLFxuLi4ucmVzdERlc2NzfT1cbmRlc2NzO1xuY29uc3QgcmVzdEtleXM9b3duS2V5cyhyZXN0RGVzY3MpO1xucmV0dXJuKFxuKG5hbWVEZXNjJiZ0eXBlb2YgbmFtZURlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRmFyIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgaW4gJHtjYW5kaWRhdGV9YCkmJihcbmxlbmd0aERlc2MmJnR5cGVvZiBsZW5ndGhEZXNjLnZhbHVlPT09J251bWJlcid8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gbGVuZ3RoIG11c3QgYmUgYSBudW1iZXIsIGluICR7Y2FuZGlkYXRlfWApJiYoXG50b1N0cmluZ1RhZ0Rlc2M9PT11bmRlZmluZWR8fFxuKHR5cGVvZiB0b1N0cmluZ1RhZ0Rlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbiBAQHRvU3RyaW5nVGFnIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiZcbmNoZWNrSWZhY2UodG9TdHJpbmdUYWdEZXNjLnZhbHVlLGNoZWNrKSkmJihcbnJlc3RLZXlzLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb25zIHVuZXhwZWN0ZWQgcHJvcGVydGllcyBiZXNpZGVzIC5uYW1lIGFuZCAubGVuZ3RoICR7cmVzdEtleXN9YCkpO1xuXG4gfVxucmV0dXJuISFjaGVjayYmQ1goY2hlY2spIGB1bnJlY29nbml6ZWQgdHlwZW9mICR7Y2FuZGlkYXRlfWA7XG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSk9PmNoZWNrUmVtb3RhYmxlKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKSxcblxuZXZlcnk6KF9wYXNzYWJsZSxfZm4pPT50cnVlfSk7JGjNj19vbmNlLlJlbW90YWJsZUhlbHBlcihSZW1vdGFibGVIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0SWZhY2UiOlsiYXNzZXJ0SWZhY2UiXSwiZ2V0SW50ZXJmYWNlT2YiOlsiZ2V0SW50ZXJmYWNlT2YiXSwiUmVtb3RhYmxlSGVscGVyIjpbIlJlbW90YWJsZUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3NhZmUtcHJvbWlzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRTYWZlUHJvbWlzZSIsImlzU2FmZVByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLHEsYXNzZXJ0Q2hlY2tlcixoYXNPd25Qcm9wZXJ0eU9mLENYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtpc0Zyb3plbixnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZ309U3ltYm9sO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb21pc2VPd25LZXlzPShwcixjaGVjayk9PntcbmNvbnN0IGtleXM9b3duS2V5cyhwcik7XG5cbmlmKGtleXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB1bmtub3duS2V5cz1rZXlzLmZpbHRlcihcbihrZXkpPT50eXBlb2Yga2V5IT09J3N5bWJvbCd8fCFoYXNPd25Qcm9wZXJ0eU9mKFByb21pc2UucHJvdG90eXBlLGtleSkpO1xuXG5cbmlmKHVua25vd25LZXlzLmxlbmd0aCE9PTApe1xucmV0dXJuIENYKFxuY2hlY2spXG4gYCR7cHJ9IC0gTXVzdCBub3QgaGF2ZSBhbnkgb3duIHByb3BlcnRpZXM6ICR7cSh1bmtub3duS2V5cyl9YDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1NhZmVPd25LZXk9KGtleSk9PntcbmlmKGtleT09PXRvU3RyaW5nVGFnKXtcbi8vXG4vL1xuY29uc3QgdGFnRGVzYz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHIsdG9TdHJpbmdUYWcpO1xuYXNzZXJ0KHRhZ0Rlc2MhPT11bmRlZmluZWQpO1xucmV0dXJuKFxuKGhhc093blByb3BlcnR5T2YodGFnRGVzYywndmFsdWUnKXx8XG5DWChcbmNoZWNrKVxuIGBPd24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eSwgbm90IGFuIGFjY2Vzc29yOiAke3EodGFnRGVzYyl9YCkmJihcbnR5cGVvZiB0YWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJHtxKHRhZ0Rlc2MudmFsdWUpfWApJiYoXG4hdGFnRGVzYy5lbnVtZXJhYmxlfHxcbkNYKGNoZWNrKSBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtxKHRhZ0Rlc2MpfWApKTtcblxuIH1cbmNvbnN0IHZhbD1wcltrZXldO1xuaWYodmFsPT09dW5kZWZpbmVkfHx0eXBlb2YgdmFsPT09J251bWJlcicpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoXG50eXBlb2YgdmFsPT09J29iamVjdCcmJlxudmFsIT09bnVsbCYmXG5pc0Zyb3plbih2YWwpJiZcbmdldFByb3RvdHlwZU9mKHZhbCk9PT1PYmplY3QucHJvdG90eXBlKVxue1xuY29uc3Qgc3ViS2V5cz1vd25LZXlzKHZhbCk7XG5pZihzdWJLZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG5pZihcbnN1YktleXMubGVuZ3RoPT09MSYmXG5zdWJLZXlzWzBdPT09J2Rlc3Ryb3llZCcmJlxudmFsLmRlc3Ryb3llZD09PWZhbHNlKVxue1xucmV0dXJuIHRydWU7XG4gfVxuIH1cbnJldHVybiBDWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIE5vZGUgYXN5bmNfaG9va3MgYWRkaXRpb25zIHRvIHByb21pc2U6ICR7cHJ9LiR7cShcblN0cmluZyhrZXkpKVxuIH0gaXMgJHt2YWx9YDtcbiB9O1xuXG5yZXR1cm4ga2V5cy5ldmVyeShjaGVja1NhZmVPd25LZXkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja1NhZmVQcm9taXNlPShwcixjaGVjayk9PntcbnJldHVybihcbihpc0Zyb3plbihwcil8fENYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGJlIGZyb3plbmApJiYoXG5pc1Byb21pc2UocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBhIHByb21pc2VgKSYmKFxuZ2V0UHJvdG90eXBlT2YocHIpPT09UHJvbWlzZS5wcm90b3R5cGV8fFxuQ1goY2hlY2spIGAke3ByfSAtIE11c3QgaW5oZXJpdCBmcm9tIFByb21pc2UucHJvdG90eXBlOiAke3EoXG5nZXRQcm90b3R5cGVPZihwcikpXG4gfWApJiZcbmNoZWNrUHJvbWlzZU93bktleXMoLyogICAgICAgICAgICAgICAgICAqL3ByLGNoZWNrKSk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrU2FmZVByb21pc2UpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1NhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsKHgpPT54KTskaM2PX29uY2UuaXNTYWZlUHJvbWlzZShpc1NhZmVQcm9taXNlKTtcbmhhcmRlbihpc1NhZmVQcm9taXNlKTtcblxuY29uc3QgICAgICAgIGFzc2VydFNhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsYXNzZXJ0Q2hlY2tlcik7JGjNj19vbmNlLmFzc2VydFNhZmVQcm9taXNlKGFzc2VydFNhZmVQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzU2FmZVByb21pc2UiOlsiaXNTYWZlUHJvbWlzZSJdLCJhc3NlcnRTYWZlUHJvbWlzZSI6WyJhc3NlcnRTYWZlUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACYl18ssgcAALIHAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3N0cmluZy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8vXG5jb25zdCBoYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kPSEhU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXZWxsRm9ybWVkU3RyaW5nPWhhc1dlbGxGb3JtZWRTdHJpbmdNZXRob2Q/XG4oc3RyKT0+dHlwZW9mIHN0cj09PSdzdHJpbmcnJiZzdHIuaXNXZWxsRm9ybWVkKCk6XG4oc3RyKT0+e1xuaWYodHlwZW9mIHN0ciE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IoY29uc3QgY2ggb2Ygc3RyKXtcbi8vXG4vL1xuLy9cbmNvbnN0IGNwPS8qICAgICAgICAgICAgICAgICAqL2NoLmNvZGVQb2ludEF0KDApO1xuaWYoY3A+PTB4ZDgwMCYmY3A8PTB4ZGZmZil7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzV2VsbEZvcm1lZFN0cmluZyhpc1dlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGlzV2VsbEZvcm1lZFN0cmluZyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0V2VsbEZvcm1lZFN0cmluZz0oc3RyKT0+e1xuaXNXZWxsRm9ybWVkU3RyaW5nKHN0cil8fEZhaWwgYEV4cGVjdGVkIHdlbGwtZm9ybWVkIHVuaWNvZGUgc3RyaW5nOiAke3N0cn1gO1xuIH07JGjNj19vbmNlLmFzc2VydFdlbGxGb3JtZWRTdHJpbmcoYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5cbmNvbnN0IE9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRT1cbmdldEVudmlyb25tZW50T3B0aW9uKCdPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEUnLCdkaXNhYmxlZCcsW1xuJ2VuYWJsZWQnXSk9PT1cbidlbmFibGVkJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3RyaW5nPShzdHIpPT57XG50eXBlb2Ygc3RyPT09J3N0cmluZyd8fEZhaWwgYEV4cGVjdGVkIHN0cmluZyAke3N0cn1gO1xuIU9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRXx8YXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhzdHIpO1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlU3RyaW5nKGFzc2VydFBhc3NhYmxlU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1dlbGxGb3JtZWRTdHJpbmciOlsiaXNXZWxsRm9ybWVkU3RyaW5nIl0sImFzc2VydFdlbGxGb3JtZWRTdHJpbmciOlsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRQYXNzYWJsZVN0cmluZyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABmP1mV/AkAAPwJAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3N5bWJvbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCB3ZWxsS25vd25TeW1ib2xOYW1lcz1uZXcgTWFwKFxub3duS2V5cyhTeW1ib2wpLlxuZmlsdGVyKFxuKG5hbWUpPT50eXBlb2YgbmFtZT09PSdzdHJpbmcnJiZ0eXBlb2YgU3ltYm9sW25hbWVdPT09J3N5bWJvbCcpLlxuXG5maWx0ZXIoKG5hbWUpPT57XG4vL1xuIW5hbWUuc3RhcnRzV2l0aCgnQEAnKXx8XG5GYWlsIGBEaWQgbm90IGV4cGVjdCBTeW1ib2wgdG8gaGF2ZSBhIHN5bWJvbC12YWx1ZWQgcHJvcGVydHkgbmFtZSBzdGFydGluZyB3aXRoIFwiQEBcIiAke3EoXG5uYW1lKVxuIH1gO1xucmV0dXJuIHRydWU7XG4gfSlcbi8vXG4ubWFwKChuYW1lKT0+W1N5bWJvbFtuYW1lXSwgYEBAJHtuYW1lfWBdKSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGVTeW1ib2w9KHN5bSk9PlxudHlwZW9mIHN5bT09PSdzeW1ib2wnJiYoXG50eXBlb2YgU3ltYm9sLmtleUZvcihzeW0pPT09J3N0cmluZyd8fHdlbGxLbm93blN5bWJvbE5hbWVzLmhhcyhzeW0pKTskaM2PX29uY2UuaXNQYXNzYWJsZVN5bWJvbChpc1Bhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihpc1Bhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3ltYm9sPShzeW0pPT5cbmlzUGFzc2FibGVTeW1ib2woc3ltKXx8XG5GYWlsIGBPbmx5IHJlZ2lzdGVyZWQgc3ltYm9scyBvciB3ZWxsLWtub3duIHN5bWJvbHMgYXJlIHBhc3NhYmxlOiAke3Eoc3ltKX1gOyRozY9fb25jZS5hc3NlcnRQYXNzYWJsZVN5bWJvbChhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBuYW1lRm9yUGFzc2FibGVTeW1ib2w9KHN5bSk9PntcbmNvbnN0IG5hbWU9U3ltYm9sLmtleUZvcihzeW0pO1xuaWYobmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gd2VsbEtub3duU3ltYm9sTmFtZXMuZ2V0KHN5bSk7XG4gfVxuaWYobmFtZS5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBgQEAke25hbWV9YDtcbiB9XG5yZXR1cm4gbmFtZTtcbiB9OyRozY9fb25jZS5uYW1lRm9yUGFzc2FibGVTeW1ib2wobmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihuYW1lRm9yUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXNzYWJsZVN5bWJvbEZvck5hbWU9KG5hbWUpPT57XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY29uc3QgbWF0Y2g9QXRBdFByZWZpeFBhdHRlcm4uZXhlYyhuYW1lKTtcbmlmKG1hdGNoKXtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmlmKHN1ZmZpeC5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBTeW1ib2wuZm9yKHN1ZmZpeCk7XG4gfWVsc2V7XG5jb25zdCBzeW09U3ltYm9sW3N1ZmZpeF07XG5pZih0eXBlb2Ygc3ltPT09J3N5bWJvbCcpe1xucmV0dXJuIHN5bTtcbiB9XG5GYWlsIGBSZXNlcnZlZCBmb3Igd2VsbCBrbm93biBzeW1ib2wgJHtxKHN1ZmZpeCl9OiAke3EobmFtZSl9YDtcbiB9XG4gfVxucmV0dXJuIFN5bWJvbC5mb3IobmFtZSk7XG4gfTskaM2PX29uY2UucGFzc2FibGVTeW1ib2xGb3JOYW1lKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG5oYXJkZW4ocGFzc2FibGVTeW1ib2xGb3JOYW1lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUGFzc2FibGVTeW1ib2wiOlsiaXNQYXNzYWJsZVN5bWJvbCJdLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiOlsibmFtZUZvclBhc3NhYmxlU3ltYm9sIl0sInBhc3NhYmxlU3ltYm9sRm9yTmFtZSI6WyJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAYNVjnhQHAAAUBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy90YWdnZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIlRhZ2dlZEhlbHBlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLGFzc2VydENoZWNrZXIsY2hlY2tUYWdSZWNvcmQsUEFTU19TVFlMRSxnZXRPd25EYXRhRGVzY3JpcHRvcixjaGVja1Bhc3NTdHlsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJjaGVja1Bhc3NTdHlsZVwiLCBbJGjNj19hID0+IChjaGVja1Bhc3NTdHlsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgVGFnZ2VkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3RhZ2dlZCcsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmNoZWNrUGFzc1N0eWxlKGNhbmRpZGF0ZSxjYW5kaWRhdGVbUEFTU19TVFlMRV0sJ3RhZ2dlZCcsY2hlY2spLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja1RhZ1JlY29yZChjYW5kaWRhdGUsJ3RhZ2dlZCcsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06X2xhYmVsRGVzYyxcbnBheWxvYWQ6X3BheWxvYWREZXNjLC8vXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xub3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuRmFpbCBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIHRhZ2dlZCByZWNvcmQgJHtvd25LZXlzKHJlc3REZXNjcyl9YDtcblxuLy9cbi8vXG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdwYXlsb2FkJyx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH19KTskaM2PX29uY2UuVGFnZ2VkSGVscGVyKFRhZ2dlZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUYWdnZWRIZWxwZXIiOlsiVGFnZ2VkSGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZU9mLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0UmVjb3JkIiwiYXNzZXJ0UmVtb3RhYmxlIiwiaXNDb3B5QXJyYXkiLCJpc1JlY29yZCIsImlzUmVtb3RhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxwYXNzU3R5bGVPZjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNDb3B5QXJyYXk9KGFycik9PnBhc3NTdHlsZU9mKGFycik9PT0nY29weUFycmF5JzskaM2PX29uY2UuaXNDb3B5QXJyYXkoaXNDb3B5QXJyYXkpO1xuaGFyZGVuKGlzQ29weUFycmF5KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVjb3JkPShyZWNvcmQpPT5wYXNzU3R5bGVPZihyZWNvcmQpPT09J2NvcHlSZWNvcmQnOyRozY9fb25jZS5pc1JlY29yZChpc1JlY29yZCk7XG5oYXJkZW4oaXNSZWNvcmQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVtb3RhYmxlPShyZW1vdGFibGUpPT5wYXNzU3R5bGVPZihyZW1vdGFibGUpPT09J3JlbW90YWJsZSc7JGjNj19vbmNlLmlzUmVtb3RhYmxlKGlzUmVtb3RhYmxlKTtcbmhhcmRlbihpc1JlbW90YWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvcHlBcnJheT0oYXJyYXksb3B0TmFtZU9mQXJyYXk9J0FsbGVnZWQgYXJyYXknKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKGFycmF5KTtcbnBhc3NTdHlsZT09PSdjb3B5QXJyYXknfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZBcnJheSl9ICR7YXJyYXl9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weUFycmF5KGFzc2VydENvcHlBcnJheSk7XG5oYXJkZW4oYXNzZXJ0Q29weUFycmF5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UmVjb3JkPShyZWNvcmQsb3B0TmFtZU9mUmVjb3JkPSdBbGxlZ2VkIHJlY29yZCcpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmVjb3JkKTtcbnBhc3NTdHlsZT09PSdjb3B5UmVjb3JkJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVjb3JkKX0gJHtyZWNvcmR9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgcmVjb3JkLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlY29yZChhc3NlcnRSZWNvcmQpO1xuaGFyZGVuKGFzc2VydFJlY29yZCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlbW90YWJsZT0oXG5yZW1vdGFibGUsXG5vcHROYW1lT2ZSZW1vdGFibGU9J0FsbGVnZWQgcmVtb3RhYmxlJyk9Plxue1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlbW90YWJsZSk7XG5wYXNzU3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVtb3RhYmxlKX0gJHtyZW1vdGFibGV9IG11c3QgYmUgYSByZW1vdGFibGUsIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UmVtb3RhYmxlKGFzc2VydFJlbW90YWJsZSk7XG5oYXJkZW4oYXNzZXJ0UmVtb3RhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weUFycmF5IjpbImlzQ29weUFycmF5Il0sImlzUmVjb3JkIjpbImlzUmVjb3JkIl0sImlzUmVtb3RhYmxlIjpbImlzUmVtb3RhYmxlIl0sImFzc2VydENvcHlBcnJheSI6WyJhc3NlcnRDb3B5QXJyYXkiXSwiYXNzZXJ0UmVjb3JkIjpbImFzc2VydFJlY29yZCJdLCJhc3NlcnRSZW1vdGFibGUiOlsiYXNzZXJ0UmVtb3RhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMWHV+m3DgAAtw4AAB4AAABAZW5kby9wYXR0ZXJucy12MS40LjcvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMva2V5cy9jaGVja0tleS5qcyIsIi4vc3JjL2tleXMvY29weVNldC5qcyIsIi4vc3JjL2tleXMvY29weUJhZy5qcyIsIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiLCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiLCIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIiwiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiLCJiYWdVbmlvbiIsImJhZ1VuaW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIiwiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIiwic2V0Q29tcGFyZSIsInNldENvbXBhcmUiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2tleXMvY2hlY2tLZXkuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29weVNldC5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb3B5QmFnLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIjpbWyJpc0tleSIsImlzS2V5Il0sWyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiXSxbImFzc2VydFNjYWxhcktleSIsImFzc2VydFNjYWxhcktleSJdLFsiaXNDb3B5U2V0IiwiaXNDb3B5U2V0Il0sWyJhc3NlcnRDb3B5U2V0IiwiYXNzZXJ0Q29weVNldCJdLFsibWFrZUNvcHlTZXQiLCJtYWtlQ29weVNldCJdLFsiZ2V0Q29weVNldEtleXMiLCJnZXRDb3B5U2V0S2V5cyJdLFsiaXNDb3B5QmFnIiwiaXNDb3B5QmFnIl0sWyJhc3NlcnRDb3B5QmFnIiwiYXNzZXJ0Q29weUJhZyJdLFsibWFrZUNvcHlCYWciLCJtYWtlQ29weUJhZyJdLFsibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLFsiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5QmFnRW50cmllcyJdLFsiaXNDb3B5TWFwIiwiaXNDb3B5TWFwIl0sWyJhc3NlcnRDb3B5TWFwIiwiYXNzZXJ0Q29weU1hcCJdLFsibWFrZUNvcHlNYXAiLCJtYWtlQ29weU1hcCJdLFsiZ2V0Q29weU1hcEVudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyJdXSwiLi9zcmMva2V5cy9jb3B5U2V0LmpzIjpbWyJjb2VyY2VUb0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyJdXSwiLi9zcmMva2V5cy9jb3B5QmFnLmpzIjpbWyJjb2VyY2VUb0JhZ0VudHJpZXMiLCJjb2VyY2VUb0JhZ0VudHJpZXMiXV0sIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiOltbImJhZ0NvbXBhcmUiLCJiYWdDb21wYXJlIl0sWyJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSJdLFsiY29tcGFyZUtleXMiLCJjb21wYXJlS2V5cyJdLFsia2V5TFQiLCJrZXlMVCJdLFsia2V5TFRFIiwia2V5TFRFIl0sWyJrZXlFUSIsImtleUVRIl0sWyJrZXlHVEUiLCJrZXlHVEUiXSxbImtleUdUIiwia2V5R1QiXV0sIi4vc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyI6W1siZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNJc1N1cGVyc2V0Il0sWyJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiXSxbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzQ29tcGFyZSJdLFsiZWxlbWVudHNVbmlvbiIsImVsZW1lbnRzVW5pb24iXSxbImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLFsiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0ludGVyc2VjdGlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sWyJzZXRJc1N1cGVyc2V0Iiwic2V0SXNTdXBlcnNldCJdLFsic2V0SXNEaXNqb2ludCIsInNldElzRGlzam9pbnQiXSxbInNldFVuaW9uIiwic2V0VW5pb24iXSxbInNldERpc2pvaW50VW5pb24iLCJzZXREaXNqb2ludFVuaW9uIl0sWyJzZXRJbnRlcnNlY3Rpb24iLCJzZXRJbnRlcnNlY3Rpb24iXSxbInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFN1YnRyYWN0Il1dLCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiOltbImJhZ0lzU3VwZXJiYWciLCJiYWdJc1N1cGVyYmFnIl0sWyJiYWdVbmlvbiIsImJhZ1VuaW9uIl0sWyJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJbnRlcnNlY3Rpb24iXSxbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdEaXNqb2ludFN1YnRyYWN0Il1dLCIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiOltbIk0iLCJNIl0sWyJnZXRSYW5rQ292ZXIiLCJnZXRSYW5rQ292ZXIiXSxbImlzUGF0dGVybiIsImlzUGF0dGVybiJdLFsiYXNzZXJ0UGF0dGVybiIsImFzc2VydFBhdHRlcm4iXSxbIm1hdGNoZXMiLCJtYXRjaGVzIl0sWyJtdXN0TWF0Y2giLCJtdXN0TWF0Y2giXSxbImlzQXdhaXRBcmdHdWFyZCIsImlzQXdhaXRBcmdHdWFyZCJdLFsiYXNzZXJ0QXdhaXRBcmdHdWFyZCIsImFzc2VydEF3YWl0QXJnR3VhcmQiXSxbImlzUmF3R3VhcmQiLCJpc1Jhd0d1YXJkIl0sWyJhc3NlcnRSYXdHdWFyZCIsImFzc2VydFJhd0d1YXJkIl0sWyJhc3NlcnRNZXRob2RHdWFyZCIsImFzc2VydE1ldGhvZEd1YXJkIl0sWyJhc3NlcnRJbnRlcmZhY2VHdWFyZCIsImFzc2VydEludGVyZmFjZUd1YXJkIl0sWyJraW5kT2YiLCJraW5kT2YiXV0sIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiOltbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIiwiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiXSxbImdldE1ldGhvZEd1YXJkUGF5bG9hZCIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCJdLFsiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIiwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIl0sWyJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIiwiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyJdXSwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6W1sibGlzdERpZmZlcmVuY2UiLCJsaXN0RGlmZmVyZW5jZSJdXSwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOltbIm9iamVjdE1hcCIsIm9iamVjdE1hcCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAW6U5DDkyAAA5MgAAKgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jaGVja0tleS5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiLCJAZW5kby9lcnJvcnMiLCIuL2NvcHlTZXQuanMiLCIuL2NvcHlCYWcuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRDb3B5QmFnIiwiYXNzZXJ0Q29weU1hcCIsImFzc2VydENvcHlTZXQiLCJhc3NlcnRLZXkiLCJhc3NlcnRQcmltaXRpdmVLZXkiLCJhc3NlcnRTY2FsYXJLZXkiLCJjaGVja0NvcHlCYWciLCJjaGVja0NvcHlNYXAiLCJjaGVja0NvcHlTZXQiLCJjaGVja0tleSIsImNoZWNrU2NhbGFyS2V5IiwiY29weU1hcEtleVNldCIsImV2ZXJ5Q29weUJhZ0VudHJ5IiwiZXZlcnlDb3B5TWFwS2V5IiwiZXZlcnlDb3B5TWFwVmFsdWUiLCJldmVyeUNvcHlTZXRLZXkiLCJnZXRDb3B5QmFnRW50cmllcyIsImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJ5QXJyYXkiLCJnZXRDb3B5TWFwS2V5cyIsImdldENvcHlNYXBWYWx1ZXMiLCJnZXRDb3B5U2V0S2V5cyIsImlzQ29weUJhZyIsImlzQ29weU1hcCIsImlzQ29weVNldCIsImlzS2V5IiwiaXNQcmltaXRpdmVLZXkiLCJpc1NjYWxhcktleSIsIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiLCJtYWtlQ29weU1hcCIsIm1ha2VDb3B5U2V0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsYXNzZXJ0UGFzc2FibGUsRmFyLGdldFRhZyxpc09iamVjdCxtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLGlkZW50Q2hlY2tlcixYLHEsRmFpbCxjaGVja0VsZW1lbnRzLG1ha2VTZXRPZkVsZW1lbnRzLGNoZWNrQmFnRW50cmllcyxtYWtlQmFnT2ZFbnRyaWVzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qc1wiLCBbW1wiaWRlbnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlTZXQuanNcIiwgW1tcImNoZWNrRWxlbWVudHNcIiwgWyRozY9fYSA9PiAoY2hlY2tFbGVtZW50cyA9ICRozY9fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjNj19hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRozY9fYSldXV1dLFtcIi4vY29weUJhZy5qc1wiLCBbW1wiY2hlY2tCYWdFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGNoZWNrQmFnRW50cmllcyA9ICRozY9fYSldXSxbXCJtYWtlQmFnT2ZFbnRyaWVzXCIsIFskaM2PX2EgPT4gKG1ha2VCYWdPZkVudHJpZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJpbWl0aXZlS2V5PSh2YWwsY2hlY2spPT57XG5pZihpc09iamVjdCh2YWwpKXtcbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbmNoZWNrKGZhbHNlLFggYEEgJHtxKHR5cGVvZiB2YWwpfSBjYW5ub3QgYmUgYSBwcmltaXRpdmU6ICR7dmFsfWApKTtcblxuIH1cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUodmFsKTtcbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQcmltaXRpdmVLZXk9KHZhbCk9PmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc1ByaW1pdGl2ZUtleShpc1ByaW1pdGl2ZUtleSk7XG5oYXJkZW4oaXNQcmltaXRpdmVLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFByaW1pdGl2ZUtleT0odmFsKT0+e1xuY2hlY2tQcmltaXRpdmVLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydFByaW1pdGl2ZUtleShhc3NlcnRQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGFzc2VydFByaW1pdGl2ZUtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1NjYWxhcktleT0odmFsLGNoZWNrKT0+e1xuaWYoaXNQcmltaXRpdmVLZXkodmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbmlmKHBhc3NTdHlsZT09PSdyZW1vdGFibGUnKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgYSBzY2FsYXIga2V5OiAke3ZhbH1gKTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5jaGVja1NjYWxhcktleShjaGVja1NjYWxhcktleSk7XG5jb25zdCAgICAgICAgaXNTY2FsYXJLZXk9KHZhbCk9PmNoZWNrU2NhbGFyS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc1NjYWxhcktleShpc1NjYWxhcktleSk7XG5oYXJkZW4oaXNTY2FsYXJLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFNjYWxhcktleT0odmFsKT0+e1xuY2hlY2tTY2FsYXJLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydFNjYWxhcktleShhc3NlcnRTY2FsYXJLZXkpO1xuaGFyZGVuKGFzc2VydFNjYWxhcktleSk7XG5cbi8vXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBrZXlNZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja0tleT0odmFsLGNoZWNrKT0+e1xuaWYoIWlzT2JqZWN0KHZhbCkpe1xuLy9cbi8vXG5hc3NlcnRQYXNzYWJsZSh2YWwpO1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmlmKGtleU1lbW8uaGFzKHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja0tleUludGVybmFsKHZhbCxjaGVjayk7XG5pZihyZXN1bHQpe1xuLy9cbi8vXG4vL1xua2V5TWVtby5hZGQodmFsKTtcbiB9XG4vL1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UuY2hlY2tLZXkoY2hlY2tLZXkpO1xuaGFyZGVuKGNoZWNrS2V5KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNLZXk9KHZhbCk9PmNoZWNrS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc0tleShpc0tleSk7XG5oYXJkZW4oaXNLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEtleT0odmFsKT0+e1xuY2hlY2tLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydEtleShhc3NlcnRLZXkpO1xuaGFyZGVuKGFzc2VydEtleSk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5U2V0TWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5U2V0PShzLGNoZWNrKT0+e1xuaWYoY29weVNldE1lbW8uaGFzKHMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihzKT09PSd0YWdnZWQnJiZnZXRUYWcocyk9PT0nY29weVNldCd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weVNldDogJHtzfWApKSYmXG5jaGVja0VsZW1lbnRzKHMucGF5bG9hZCxjaGVjaykmJlxuY2hlY2tLZXkocy5wYXlsb2FkLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb3B5U2V0TWVtby5hZGQocyk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlTZXQoY2hlY2tDb3B5U2V0KTtcbmhhcmRlbihjaGVja0NvcHlTZXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9PmNoZWNrQ29weVNldChzLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuaGFyZGVuKGlzQ29weVNldCk7XG5cbi8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlTZXQ9KHMpPT57XG5jaGVja0NvcHlTZXQocyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb3B5U2V0KGFzc2VydENvcHlTZXQpO1xuaGFyZGVuKGFzc2VydENvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weVNldEtleXM9KHMpPT57XG5hc3NlcnRDb3B5U2V0KHMpO1xucmV0dXJuIHMucGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRDb3B5U2V0S2V5cyhnZXRDb3B5U2V0S2V5cyk7XG5oYXJkZW4oZ2V0Q29weVNldEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlTZXRLZXk9KHMsZm4pPT5cbmdldENvcHlTZXRLZXlzKHMpLmV2ZXJ5KChrZXksaW5kZXgpPT5mbihrZXksaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5U2V0S2V5KGV2ZXJ5Q29weVNldEtleSk7XG5oYXJkZW4oZXZlcnlDb3B5U2V0S2V5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5U2V0PShlbGVtZW50SXRlcik9PntcbmNvbnN0IHJlc3VsdD1tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50SXRlcik7XG5hc3NlcnRDb3B5U2V0KHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5U2V0KG1ha2VDb3B5U2V0KTtcbmhhcmRlbihtYWtlQ29weVNldCk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5QmFnTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5QmFnPShiLGNoZWNrKT0+e1xuaWYoY29weUJhZ01lbW8uaGFzKGIpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihiKT09PSd0YWdnZWQnJiZnZXRUYWcoYik9PT0nY29weUJhZyd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weUJhZzogJHtifWApKSYmXG5jaGVja0JhZ0VudHJpZXMoYi5wYXlsb2FkLGNoZWNrKSYmXG5jaGVja0tleShiLnBheWxvYWQsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvcHlCYWdNZW1vLmFkZChiKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrQ29weUJhZyhjaGVja0NvcHlCYWcpO1xuaGFyZGVuKGNoZWNrQ29weUJhZyk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5QmFnPShiKT0+Y2hlY2tDb3B5QmFnKGIsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNDb3B5QmFnKGlzQ29weUJhZyk7XG5oYXJkZW4oaXNDb3B5QmFnKTtcblxuLypcblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q29weUJhZz0oYik9PntcbmNoZWNrQ29weUJhZyhiLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlCYWcoYXNzZXJ0Q29weUJhZyk7XG5oYXJkZW4oYXNzZXJ0Q29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5QmFnRW50cmllcz0oYik9PntcbmFzc2VydENvcHlCYWcoYik7XG5yZXR1cm4gYi5wYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldENvcHlCYWdFbnRyaWVzKGdldENvcHlCYWdFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5QmFnRW50cmllcyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weUJhZ0VudHJ5PShiLGZuKT0+XG5nZXRDb3B5QmFnRW50cmllcyhiKS5ldmVyeSgoZW50cnksaW5kZXgpPT5mbihlbnRyeSxpbmRleCkpOyRozY9fb25jZS5ldmVyeUNvcHlCYWdFbnRyeShldmVyeUNvcHlCYWdFbnRyeSk7XG5oYXJkZW4oZXZlcnlDb3B5QmFnRW50cnkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlCYWc9KGJhZ0VudHJ5SXRlcik9PntcbmNvbnN0IHJlc3VsdD1tYWtlQmFnT2ZFbnRyaWVzKGJhZ0VudHJ5SXRlcik7XG5hc3NlcnRDb3B5QmFnKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5QmFnKG1ha2VDb3B5QmFnKTtcbmhhcmRlbihtYWtlQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weUJhZ0Zyb21FbGVtZW50cz0oZWxlbWVudEl0ZXIpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCBzb3J0ZWQ9c29ydEJ5UmFuayhlbGVtZW50SXRlcixmdWxsQ29tcGFyZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVudHJpZXM9W107XG5mb3IobGV0IGk9MDtpPHNvcnRlZC5sZW5ndGg7KXtcbmNvbnN0IGs9c29ydGVkW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoajxzb3J0ZWQubGVuZ3RoJiZmdWxsQ29tcGFyZShrLHNvcnRlZFtqXSk9PT0wKXtcbmorPTE7XG4gfVxuZW50cmllcy5wdXNoKFtrLEJpZ0ludChqLWkpXSk7XG5pPWo7XG4gfVxucmV0dXJuIG1ha2VDb3B5QmFnKGVudHJpZXMpO1xuIH07JGjNj19vbmNlLm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKG1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKTtcbmhhcmRlbihtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5TWFwTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5TWFwPShtLGNoZWNrKT0+e1xuaWYoY29weU1hcE1lbW8uaGFzKG0pKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCEocGFzc1N0eWxlT2YobSk9PT0ndGFnZ2VkJyYmZ2V0VGFnKG0pPT09J2NvcHlNYXAnKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgTm90IGEgY29weU1hcDogJHttfWApO1xuIH1cbmNvbnN0e3BheWxvYWR9PW07XG5pZihwYXNzU3R5bGVPZihwYXlsb2FkKSE9PSdjb3B5UmVjb3JkJyl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgcGF5bG9hZCBtdXN0IGJlIGEgcmVjb3JkOiAke219YCk7XG4gfVxuY29uc3R7a2V5cyx2YWx1ZXMsLi4ucmVzdH09cGF5bG9hZDtcbmNvbnN0IHJlc3VsdD1cbihvd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBvbmx5IGhhdmUgLmtleXMgYW5kIC52YWx1ZXM6ICR7bX1gKSkmJlxuXG5jaGVja0VsZW1lbnRzKGtleXMsY2hlY2spJiZcbmNoZWNrS2V5KGtleXMsY2hlY2spJiYoXG5wYXNzU3R5bGVPZih2YWx1ZXMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgLnZhbHVlcyBtdXN0IGJlIGEgY29weUFycmF5OiAke219YCkpJiYoXG5rZXlzLmxlbmd0aD09PXZhbHVlcy5sZW5ndGh8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGtleXMgYW5kIHZhbHVlczogJHttfWApKTtcblxuaWYocmVzdWx0KXtcbmNvcHlNYXBNZW1vLmFkZChtKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrQ29weU1hcChjaGVja0NvcHlNYXApO1xuaGFyZGVuKGNoZWNrQ29weU1hcCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5TWFwPShtKT0+Y2hlY2tDb3B5TWFwKG0saWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNDb3B5TWFwKGlzQ29weU1hcCk7XG5oYXJkZW4oaXNDb3B5TWFwKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5TWFwPShtKT0+e1xuY2hlY2tDb3B5TWFwKG0sYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weU1hcChhc3NlcnRDb3B5TWFwKTtcbmhhcmRlbihhc3NlcnRDb3B5TWFwKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weU1hcEtleXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC5rZXlzO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBLZXlzKGdldENvcHlNYXBLZXlzKTtcbmhhcmRlbihnZXRDb3B5TWFwS2V5cyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBWYWx1ZXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC52YWx1ZXM7XG4gfTskaM2PX29uY2UuZ2V0Q29weU1hcFZhbHVlcyhnZXRDb3B5TWFwVmFsdWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwVmFsdWVzKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyeUFycmF5PShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5yZXR1cm4gaGFyZGVuKGtleXMubWFwKChrZXksaSk9PltrZXksdmFsdWVzW2ldXSkpO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBFbnRyeUFycmF5KGdldENvcHlNYXBFbnRyeUFycmF5KTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyaWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5jb25zdHtsZW5ndGh9PS8qICAgICAgICAgICAgICAgICova2V5cztcbnJldHVybiBGYXIoJ0NvcHlNYXAgZW50cmllcyBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmF0b3InLHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoaTxsZW5ndGgpe1xucmVzdWx0PWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTpba2V5c1tpXSx2YWx1ZXNbaV1dfSk7XG5pKz0xO1xucmV0dXJuIHJlc3VsdDtcbiB9ZWxzZXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH19KTtcblxuIH19KTtcblxuIH07JGjNj19vbmNlLmdldENvcHlNYXBFbnRyaWVzKGdldENvcHlNYXBFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwS2V5PShtLGZuKT0+XG5nZXRDb3B5TWFwS2V5cyhtKS5ldmVyeSgoa2V5LGluZGV4KT0+Zm4oa2V5LGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weU1hcEtleShldmVyeUNvcHlNYXBLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcEtleSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwVmFsdWU9KG0sZm4pPT5cbmdldENvcHlNYXBWYWx1ZXMobSkuZXZlcnkoKHZhbHVlLGluZGV4KT0+Zm4odmFsdWUsaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5TWFwVmFsdWUoZXZlcnlDb3B5TWFwVmFsdWUpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY29weU1hcEtleVNldD0obSk9PlxuLy9cbm1ha2VUYWdnZWQoJ2NvcHlTZXQnLG0ucGF5bG9hZC5rZXlzKTskaM2PX29uY2UuY29weU1hcEtleVNldChjb3B5TWFwS2V5U2V0KTtcbmhhcmRlbihjb3B5TWFwS2V5U2V0KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlNYXA9KGVudHJpZXMpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHNvcnRlZEVudHJpZXM9c29ydEJ5UmFuayhlbnRyaWVzLGNvbXBhcmVBbnRpUmFuayk7XG5jb25zdCBrZXlzPXNvcnRlZEVudHJpZXMubWFwKChbayxfdl0pPT5rKTtcbmNvbnN0IHZhbHVlcz1zb3J0ZWRFbnRyaWVzLm1hcCgoW19rLHZdKT0+dik7XG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnY29weU1hcCcse2tleXMsdmFsdWVzfSk7XG5hc3NlcnRDb3B5TWFwKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5TWFwKG1ha2VDb3B5TWFwKTtcbmhhcmRlbihtYWtlQ29weU1hcCk7XG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrS2V5SW50ZXJuYWw9KHZhbCxjaGVjayk9PntcbmNvbnN0IGNoZWNrSXQ9KGNoaWxkKT0+Y2hlY2tLZXkoY2hpbGQsY2hlY2spO1xuXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xucmV0dXJuIE9iamVjdC52YWx1ZXModmFsKS5ldmVyeShjaGVja0l0KTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbnJldHVybiB2YWwuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRhZz1nZXRUYWcodmFsKTtcbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4oXG5jaGVja0NvcHlNYXAodmFsLGNoZWNrKSYmXG4vL1xuLy9cbi8vXG5ldmVyeUNvcHlNYXBWYWx1ZSh2YWwsY2hlY2tJdCkpO1xuXG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG5jaGVjayhmYWxzZSxYIGBBIHBhc3NhYmxlIHRhZ2dlZCAke3EodGFnKX0gaXMgbm90IGEga2V5OiAke3ZhbH1gKSk7XG5cbiB9fVxuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKHBhc3NTdHlsZSl9IGNhbm5vdCBiZSBhIGtleWApO1xuIH1cbmRlZmF1bHQ6e1xuLy9cbi8vXG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX06ICR7dmFsfWA7XG4gfX1cblxuIH07XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1ByaW1pdGl2ZUtleSI6WyJpc1ByaW1pdGl2ZUtleSJdLCJhc3NlcnRQcmltaXRpdmVLZXkiOlsiYXNzZXJ0UHJpbWl0aXZlS2V5Il0sImNoZWNrU2NhbGFyS2V5IjpbImNoZWNrU2NhbGFyS2V5Il0sImlzU2NhbGFyS2V5IjpbImlzU2NhbGFyS2V5Il0sImFzc2VydFNjYWxhcktleSI6WyJhc3NlcnRTY2FsYXJLZXkiXSwiY2hlY2tLZXkiOlsiY2hlY2tLZXkiXSwiaXNLZXkiOlsiaXNLZXkiXSwiYXNzZXJ0S2V5IjpbImFzc2VydEtleSJdLCJjaGVja0NvcHlTZXQiOlsiY2hlY2tDb3B5U2V0Il0sImlzQ29weVNldCI6WyJpc0NvcHlTZXQiXSwiYXNzZXJ0Q29weVNldCI6WyJhc3NlcnRDb3B5U2V0Il0sImdldENvcHlTZXRLZXlzIjpbImdldENvcHlTZXRLZXlzIl0sImV2ZXJ5Q29weVNldEtleSI6WyJldmVyeUNvcHlTZXRLZXkiXSwibWFrZUNvcHlTZXQiOlsibWFrZUNvcHlTZXQiXSwiY2hlY2tDb3B5QmFnIjpbImNoZWNrQ29weUJhZyJdLCJpc0NvcHlCYWciOlsiaXNDb3B5QmFnIl0sImFzc2VydENvcHlCYWciOlsiYXNzZXJ0Q29weUJhZyJdLCJnZXRDb3B5QmFnRW50cmllcyI6WyJnZXRDb3B5QmFnRW50cmllcyJdLCJldmVyeUNvcHlCYWdFbnRyeSI6WyJldmVyeUNvcHlCYWdFbnRyeSJdLCJtYWtlQ29weUJhZyI6WyJtYWtlQ29weUJhZyJdLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyI6WyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLCJjaGVja0NvcHlNYXAiOlsiY2hlY2tDb3B5TWFwIl0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwiYXNzZXJ0Q29weU1hcCI6WyJhc3NlcnRDb3B5TWFwIl0sImdldENvcHlNYXBLZXlzIjpbImdldENvcHlNYXBLZXlzIl0sImdldENvcHlNYXBWYWx1ZXMiOlsiZ2V0Q29weU1hcFZhbHVlcyJdLCJnZXRDb3B5TWFwRW50cnlBcnJheSI6WyJnZXRDb3B5TWFwRW50cnlBcnJheSJdLCJnZXRDb3B5TWFwRW50cmllcyI6WyJnZXRDb3B5TWFwRW50cmllcyJdLCJldmVyeUNvcHlNYXBLZXkiOlsiZXZlcnlDb3B5TWFwS2V5Il0sImV2ZXJ5Q29weU1hcFZhbHVlIjpbImV2ZXJ5Q29weU1hcFZhbHVlIl0sImNvcHlNYXBLZXlTZXQiOlsiY29weU1hcEtleVNldCJdLCJtYWtlQ29weU1hcCI6WyJtYWtlQ29weU1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACEP4sHExUAABMVAAAtAAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NoZWNrS2V5LmpzIiwiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbImJhZ0NvbXBhcmUiLCJjb21wYXJlS2V5cyIsImtleUVRIiwia2V5R1QiLCJrZXlHVEUiLCJrZXlMVCIsImtleUxURSIsInNldENvbXBhcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsZ2V0VGFnLGNvbXBhcmVSYW5rLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlcyx0cml2aWFsQ29tcGFyYXRvcixxLEZhaWwsYXNzZXJ0S2V5LGdldENvcHlCYWdFbnRyaWVzLGdldENvcHlNYXBFbnRyeUFycmF5LGdldENvcHlTZXRLZXlzLG1ha2VDb21wYXJlQ29sbGVjdGlvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiY29tcGFyZVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZVJhbmsgPSAkaM2PX2EpXV0sW1wicmVjb3JkTmFtZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkTmFtZXMgPSAkaM2PX2EpXV0sW1wicmVjb3JkVmFsdWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZFZhbHVlcyA9ICRozY9fYSldXSxbXCJ0cml2aWFsQ29tcGFyYXRvclwiLCBbJGjNj19hID0+ICh0cml2aWFsQ29tcGFyYXRvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY2hlY2tLZXkuanNcIiwgW1tcImFzc2VydEtleVwiLCBbJGjNj19hID0+IChhc3NlcnRLZXkgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weUJhZ0VudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJ5QXJyYXkgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weVNldEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaM2PX2EpXV1dXSxbXCIuL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzXCIsIFtbXCJtYWtlQ29tcGFyZUNvbGxlY3Rpb25cIiwgWyRozY9fYSA9PiAobWFrZUNvbXBhcmVDb2xsZWN0aW9uID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNldENvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbihzKT0+aGFyZGVuKGdldENvcHlTZXRLZXlzKHMpLm1hcCgoa2V5KT0+W2tleSwxXSkpLFxuXG4wLFxudHJpdmlhbENvbXBhcmF0b3IpOyRozY9fb25jZS5zZXRDb21wYXJlKHNldENvbXBhcmUpO1xuXG5oYXJkZW4oc2V0Q29tcGFyZSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBiYWdDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbmdldENvcHlCYWdFbnRyaWVzLFxuMG4sXG50cml2aWFsQ29tcGFyYXRvcik7JGjNj19vbmNlLmJhZ0NvbXBhcmUoYmFnQ29tcGFyZSk7XG5cbmhhcmRlbihiYWdDb21wYXJlKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCBBQlNFTlQ9U3ltYm9sKCdhYnNlbnQnKTtcbi8qXG5cblxuXG5cblxuXG4gKi9cbi8vXG5jb25zdCBfbWFwQ29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG5nZXRDb3B5TWFwRW50cnlBcnJheSxcbkFCU0VOVCxcbihsZWZ0VmFsdWUscmlnaHRWYWx1ZSk9PntcbmlmKGxlZnRWYWx1ZT09PUFCU0VOVCYmcmlnaHRWYWx1ZT09PUFCU0VOVCl7XG50aHJvdyBGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBhYnNlbnQgZW50cnkgcGFpcmA7XG4gfWVsc2UgaWYobGVmdFZhbHVlPT09QUJTRU5UKXtcbnJldHVybi0xO1xuIH1lbHNlIGlmKHJpZ2h0VmFsdWU9PT1BQlNFTlQpe1xucmV0dXJuIDE7XG4gfWVsc2V7XG4vL1xucmV0dXJuIGNvbXBhcmVLZXlzKGxlZnRWYWx1ZSxyaWdodFZhbHVlKTtcbiB9XG4gfSk7XG5cbmhhcmRlbihfbWFwQ29tcGFyZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb21wYXJlS2V5cz0obGVmdCxyaWdodCk9PntcbmFzc2VydEtleShsZWZ0KTtcbmFzc2VydEtleShyaWdodCk7XG5jb25zdCBsZWZ0U3R5bGU9cGFzc1N0eWxlT2YobGVmdCk7XG5jb25zdCByaWdodFN0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0KTtcbmlmKGxlZnRTdHlsZSE9PXJpZ2h0U3R5bGUpe1xuLy9cbnJldHVybiBOYU47XG4gfVxuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzpcbmNhc2UnYmlnaW50JzpcbmNhc2Unc3RyaW5nJzpcbmNhc2Unc3ltYm9sJzp7XG4vL1xucmV0dXJuIGNvbXBhcmVSYW5rKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnbnVtYmVyJzp7XG5jb25zdCByYW5rQ29tcD1jb21wYXJlUmFuayhsZWZ0LHJpZ2h0KTtcbmlmKHJhbmtDb21wPT09MCl7XG5yZXR1cm4gMDtcbiB9XG5pZihOdW1iZXIuaXNOYU4obGVmdCl8fE51bWJlci5pc05hTihyaWdodCkpe1xuLy9cbmFzc2VydCghTnVtYmVyLmlzTmFOKGxlZnQpfHwhTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gTmFOO1xuIH1cbi8vXG4vL1xucmV0dXJuIHJhbmtDb21wO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5pZihsZWZ0PT09cmlnaHQpe1xucmV0dXJuIDA7XG4gfVxuLy9cbi8vXG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlbj1NYXRoLm1pbihsZWZ0Lmxlbmd0aCxyaWdodC5sZW5ndGgpO1xuZm9yKGxldCBpPTA7aTxsZW47aSs9MSl7XG4vL1xuY29uc3QgcmVzdWx0PWNvbXBhcmVLZXlzKGxlZnRbaV0scmlnaHRbaV0pO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG4vL1xuLy9cbi8vXG5yZXR1cm4gY29tcGFyZVJhbmsobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuY29uc3QgbGVmdE5hbWVzPXJlY29yZE5hbWVzKGxlZnQpO1xuLy9cbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG4vL1xuaWYoIWtleUVRKGxlZnROYW1lcyxyaWdodE5hbWVzKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBOYU47XG4gfVxuLy9cbmNvbnN0IGxlZnRWYWx1ZXM9cmVjb3JkVmFsdWVzKGxlZnQsbGVmdE5hbWVzKTtcbi8vXG5jb25zdCByaWdodFZhbHVlcz1yZWNvcmRWYWx1ZXMocmlnaHQscmlnaHROYW1lcyk7XG4vL1xuLy9cbmxldCByZXN1bHQ9MDtcbmZvcihsZXQgaT0wO2k8bGVmdFZhbHVlcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBjb21wPWNvbXBhcmVLZXlzKGxlZnRWYWx1ZXNbaV0scmlnaHRWYWx1ZXNbaV0pO1xuaWYoTnVtYmVyLmlzTmFOKGNvbXApKXtcbnJldHVybiBOYU47XG4gfVxuaWYocmVzdWx0IT09Y29tcCYmY29tcCE9PTApe1xuaWYocmVzdWx0PT09MCl7XG5yZXN1bHQ9Y29tcDtcbiB9ZWxzZXtcbmFzc2VydChcbnJlc3VsdD09PS0xJiZjb21wPT09MXx8cmVzdWx0PT09MSYmY29tcD09PS0xKTtcblxucmV0dXJuIE5hTjtcbiB9XG4gfVxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNhc2UndGFnZ2VkJzp7XG4vL1xuY29uc3QgbGVmdFRhZz1nZXRUYWcobGVmdCk7XG4vL1xuY29uc3QgcmlnaHRUYWc9Z2V0VGFnKHJpZ2h0KTtcbmlmKGxlZnRUYWchPT1yaWdodFRhZyl7XG4vL1xucmV0dXJuIE5hTjtcbiB9XG5zd2l0Y2gobGVmdFRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbi8vXG5yZXR1cm4gc2V0Q29tcGFyZShsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbi8vXG5yZXR1cm4gYmFnQ29tcGFyZShsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbi8vXG4vL1xudGhyb3cgRmFpbCBgTWFwIGNvbXBhcmlzb24gbm90IHlldCBpbXBsZW1lbnRlZDogJHtsZWZ0fSB2cyAke3JpZ2h0fWA7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHRhZyAke3EobGVmdFRhZyl9OiAke2xlZnR9YDtcbiB9fVxuXG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHBhc3NTdHlsZSAke3EobGVmdFN0eWxlKX06ICR7bGVmdH1gO1xuIH19XG5cbiB9OyRozY9fb25jZS5jb21wYXJlS2V5cyhjb21wYXJlS2V5cyk7XG5oYXJkZW4oY29tcGFyZUtleXMpO1xuXG5jb25zdCAgICAgICAga2V5TFQ9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KTwwOyRozY9fb25jZS5rZXlMVChrZXlMVCk7XG5oYXJkZW4oa2V5TFQpO1xuXG5jb25zdCAgICAgICAga2V5TFRFPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk8PTA7JGjNj19vbmNlLmtleUxURShrZXlMVEUpO1xuaGFyZGVuKGtleUxURSk7XG5cbmNvbnN0ICAgICAgICBrZXlFUT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPT09MDskaM2PX29uY2Uua2V5RVEoa2V5RVEpO1xuaGFyZGVuKGtleUVRKTtcblxuY29uc3QgICAgICAgIGtleUdURT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPj0wOyRozY9fb25jZS5rZXlHVEUoa2V5R1RFKTtcbmhhcmRlbihrZXlHVEUpO1xuXG5jb25zdCAgICAgICAga2V5R1Q9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KT4wOyRozY9fb25jZS5rZXlHVChrZXlHVCk7XG5oYXJkZW4oa2V5R1QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0Q29tcGFyZSI6WyJzZXRDb21wYXJlIl0sImJhZ0NvbXBhcmUiOlsiYmFnQ29tcGFyZSJdLCJjb21wYXJlS2V5cyI6WyJjb21wYXJlS2V5cyJdLCJrZXlMVCI6WyJrZXlMVCJdLCJrZXlMVEUiOlsia2V5TFRFIl0sImtleUVRIjpbImtleUVRIl0sImtleUdURSI6WyJrZXlHVEUiXSwia2V5R1QiOlsia2V5R1QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAATJtmFscNAADHDQAAKQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jb3B5QmFnLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRCYWdFbnRyaWVzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIiwiY2hlY2tCYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIiwibWFrZUJhZ09mRW50cmllcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsY29tcGFyZUFudGlSYW5rLGlzUmFua1NvcnRlZCxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLFg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wiaXNSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGlzUmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tOb0R1cGxpY2F0ZUtleXM9KGJhZ0VudHJpZXMsZnVsbENvbXBhcmUsY2hlY2spPT57XG4vL1xuLy9cbi8vXG4vL1xuZnVsbENvbXBhcmU9ZnVsbENvbXBhcmV8fG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbi8vXG4vL1xuLy9cbmJhZ0VudHJpZXM9c29ydEJ5UmFuayhiYWdFbnRyaWVzLGZ1bGxDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09YmFnRW50cmllcztcbmZvcihsZXQgaT0xO2k8bGVuZ3RoO2krPTEpe1xuY29uc3QgazA9YmFnRW50cmllc1tpLTFdWzBdO1xuY29uc3QgazE9YmFnRW50cmllc1tpXVswXTtcbmlmKGZ1bGxDb21wYXJlKGswLGsxKT09PTApe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYHZhbHVlIGhhcyBkdXBsaWNhdGUga2V5czogJHtrMH1gKTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzPShiYWdFbnRyaWVzLGZ1bGxDb21wYXJlPXVuZGVmaW5lZCk9PntcbmNoZWNrTm9EdXBsaWNhdGVLZXlzKGJhZ0VudHJpZXMsZnVsbENvbXBhcmUsYXNzZXJ0Q2hlY2tlcik7XG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5hc3NlcnROb0R1cGxpY2F0ZUtleXMoYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKTtcbmNvbnN0ICAgICAgICBjaGVja0JhZ0VudHJpZXM9KGJhZ0VudHJpZXMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihiYWdFbnRyaWVzKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGVudHJpZXMgb2YgYSBjb3B5QmFnIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmlmKCFpc1JhbmtTb3J0ZWQoYmFnRW50cmllcyxjb21wYXJlQW50aVJhbmspKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGVudHJpZXMgb2YgYSBjb3B5QmFnIG11c3QgYmUgc29ydGVkIGluIHJldmVyc2UgcmFuayBvcmRlcjogJHtiYWdFbnRyaWVzfWApO1xuXG4gfVxuZm9yKGNvbnN0IGVudHJ5IG9mIGJhZ0VudHJpZXMpe1xuaWYoXG5wYXNzU3R5bGVPZihlbnRyeSkhPT0nY29weUFycmF5J3x8XG5lbnRyeS5sZW5ndGghPT0yfHxcbnR5cGVvZiBlbnRyeVsxXSE9PSdiaWdpbnQnKVxue1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGJlIHBhaXIgb2YgYSBrZXkgYW5kIGEgYmlnaW50IHJlcHJlc2VudGluZyBhIGNvdW50OiAke2VudHJ5fWApO1xuXG4gfVxuaWYoZW50cnlbMV08MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEVhY2ggZW50cnkgb2YgYSBjb3B5QmFnIG11c3QgaGF2ZSBhIHBvc2l0aXZlIGNvdW50OiAke2VudHJ5fWApO1xuXG4gfVxuIH1cbi8vXG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZUtleXMoYmFnRW50cmllcyx1bmRlZmluZWQsY2hlY2spO1xuIH07JGjNj19vbmNlLmNoZWNrQmFnRW50cmllcyhjaGVja0JhZ0VudHJpZXMpO1xuaGFyZGVuKGNoZWNrQmFnRW50cmllcyk7XG5cbi8vXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEJhZ0VudHJpZXM9KGJhZ0VudHJpZXMpPT57XG5jaGVja0JhZ0VudHJpZXMoYmFnRW50cmllcyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRCYWdFbnRyaWVzKGFzc2VydEJhZ0VudHJpZXMpO1xuaGFyZGVuKGFzc2VydEJhZ0VudHJpZXMpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZVRvQmFnRW50cmllcz0oYmFnRW50cmllc0xpc3QpPT57XG5jb25zdCBiYWdFbnRyaWVzPXNvcnRCeVJhbmsoYmFnRW50cmllc0xpc3QsY29tcGFyZUFudGlSYW5rKTtcbmFzc2VydEJhZ0VudHJpZXMoYmFnRW50cmllcyk7XG5yZXR1cm4gYmFnRW50cmllcztcbiB9OyRozY9fb25jZS5jb2VyY2VUb0JhZ0VudHJpZXMoY29lcmNlVG9CYWdFbnRyaWVzKTtcbmhhcmRlbihjb2VyY2VUb0JhZ0VudHJpZXMpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUJhZ09mRW50cmllcz0oYmFnRW50cnlJdGVyKT0+XG5tYWtlVGFnZ2VkKCdjb3B5QmFnJyxjb2VyY2VUb0JhZ0VudHJpZXMoYmFnRW50cnlJdGVyKSk7JGjNj19vbmNlLm1ha2VCYWdPZkVudHJpZXMobWFrZUJhZ09mRW50cmllcyk7XG5oYXJkZW4obWFrZUJhZ09mRW50cmllcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3NlcnROb0R1cGxpY2F0ZUtleXMiOlsiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIl0sImNoZWNrQmFnRW50cmllcyI6WyJjaGVja0JhZ0VudHJpZXMiXSwiYXNzZXJ0QmFnRW50cmllcyI6WyJhc3NlcnRCYWdFbnRyaWVzIl0sImNvZXJjZVRvQmFnRW50cmllcyI6WyJjb2VyY2VUb0JhZ0VudHJpZXMiXSwibWFrZUJhZ09mRW50cmllcyI6WyJtYWtlQmFnT2ZFbnRyaWVzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACmeZ2zOCwAAzgsAACkAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weVNldC5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0RWxlbWVudHMiLCJhc3NlcnROb0R1cGxpY2F0ZXMiLCJjaGVja0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyIsIm1ha2VTZXRPZkVsZW1lbnRzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixjb21wYXJlQW50aVJhbmssaXNSYW5rU29ydGVkLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJpc1JhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoaXNSYW5rU29ydGVkID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja05vRHVwbGljYXRlcz0oZWxlbWVudHMsZnVsbENvbXBhcmUsY2hlY2spPT57XG4vL1xuLy9cbi8vXG4vL1xuZnVsbENvbXBhcmU9ZnVsbENvbXBhcmV8fG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmVsZW1lbnRzPXNvcnRCeVJhbmsoZWxlbWVudHMsZnVsbENvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbGVtZW50cztcbmZvcihsZXQgaT0xO2k8bGVuZ3RoO2krPTEpe1xuY29uc3QgazA9ZWxlbWVudHNbaS0xXTtcbmNvbnN0IGsxPWVsZW1lbnRzW2ldO1xuaWYoZnVsbENvbXBhcmUoazAsazEpPT09MCl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgdmFsdWUgaGFzIGR1cGxpY2F0ZSBrZXlzOiAke2swfWApO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZXM9KGVsZW1lbnRzLGZ1bGxDb21wYXJlPXVuZGVmaW5lZCk9PntcbmNoZWNrTm9EdXBsaWNhdGVzKGVsZW1lbnRzLGZ1bGxDb21wYXJlLGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVzKGFzc2VydE5vRHVwbGljYXRlcyk7XG5jb25zdCAgICAgICAgY2hlY2tFbGVtZW50cz0oZWxlbWVudHMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihlbGVtZW50cykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBrZXlzIG9mIGEgY29weVNldCBvciBjb3B5TWFwIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGVsZW1lbnRzLGNvbXBhcmVBbnRpUmFuaykpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBUaGUga2V5cyBvZiBhIGNvcHlTZXQgb3IgY29weU1hcCBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZXMoZWxlbWVudHMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRozY9fb25jZS5jaGVja0VsZW1lbnRzKGNoZWNrRWxlbWVudHMpO1xuaGFyZGVuKGNoZWNrRWxlbWVudHMpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0RWxlbWVudHM9KGVsZW1lbnRzKT0+e1xuY2hlY2tFbGVtZW50cyhlbGVtZW50cyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRFbGVtZW50cyhhc3NlcnRFbGVtZW50cyk7XG5oYXJkZW4oYXNzZXJ0RWxlbWVudHMpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZVRvRWxlbWVudHM9KGVsZW1lbnRzTGlzdCk9PntcbmNvbnN0IGVsZW1lbnRzPXNvcnRCeVJhbmsoZWxlbWVudHNMaXN0LGNvbXBhcmVBbnRpUmFuayk7XG5hc3NlcnRFbGVtZW50cyhlbGVtZW50cyk7XG5yZXR1cm4gZWxlbWVudHM7XG4gfTskaM2PX29uY2UuY29lcmNlVG9FbGVtZW50cyhjb2VyY2VUb0VsZW1lbnRzKTtcbmhhcmRlbihjb2VyY2VUb0VsZW1lbnRzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXRPZkVsZW1lbnRzPShlbGVtZW50SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weVNldCcsY29lcmNlVG9FbGVtZW50cyhlbGVtZW50SXRlcikpOyRozY9fb25jZS5tYWtlU2V0T2ZFbGVtZW50cyhtYWtlU2V0T2ZFbGVtZW50cyk7XG5oYXJkZW4obWFrZVNldE9mRWxlbWVudHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVzIjpbImFzc2VydE5vRHVwbGljYXRlcyJdLCJjaGVja0VsZW1lbnRzIjpbImNoZWNrRWxlbWVudHMiXSwiYXNzZXJ0RWxlbWVudHMiOlsiYXNzZXJ0RWxlbWVudHMiXSwiY29lcmNlVG9FbGVtZW50cyI6WyJjb2VyY2VUb0VsZW1lbnRzIl0sIm1ha2VTZXRPZkVsZW1lbnRzIjpbIm1ha2VTZXRPZkVsZW1lbnRzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAE2RIifgEgAA4BIAADkAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIiwiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyIsIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLG1ha2VJdGVyYXRvcixtYWtlQXJyYXlJdGVyYXRvcixxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUl0ZXJhdG9yXCIsIFskaM2PX2EgPT4gKG1ha2VJdGVyYXRvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlQXJyYXlJdGVyYXRvclwiLCBbJGjNj19hID0+IChtYWtlQXJyYXlJdGVyYXRvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXM9KGVudHJpZXMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG4vL1xuYXNzZXJ0UmFua1NvcnRlZChlbnRyaWVzLHJhbmtDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZW50cmllcztcbmxldCBpPTA7XG5sZXQgc2FtZVJhbmtJdGVyYXRvcjtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9PntcbmlmKHNhbWVSYW5rSXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PXNhbWVSYW5rSXRlcmF0b3IubmV4dCgpO1xuaWYoIXJlc3VsdC5kb25lKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuc2FtZVJhbmtJdGVyYXRvcj11bmRlZmluZWQ7XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgZW50cnk9ZW50cmllc1tpXTtcbi8vXG5sZXQgaj1pKzE7XG53aGlsZShqPGxlbmd0aCYmcmFua0NvbXBhcmUoZW50cnlbMF0sZW50cmllc1tqXVswXSk9PT0wKXtcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG4vL1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTplbnRyeX0pO1xuIH1cbmNvbnN0IHRpZXM9ZW50cmllcy5zbGljZShpLGopO1xuaT1qO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBzb3J0ZWRUaWVzPXNvcnRCeVJhbmsodGllcyxmdWxsQ29tcGFyZSk7XG5mb3IobGV0IGs9MTtrPHNvcnRlZFRpZXMubGVuZ3RoO2srPTEpe1xuLy9cbmNvbnN0W2tleTBdPXNvcnRlZFRpZXNbay0xXTtcbmNvbnN0W2tleTFdPXNvcnRlZFRpZXNba107XG5NYXRoLnNpZ24oZnVsbENvbXBhcmUoa2V5MCxrZXkxKSl8fFxuRmFpbCBgRHVwbGljYXRlIGVudHJ5IGtleTogJHtrZXkwfWA7XG4gfVxuc2FtZVJhbmtJdGVyYXRvcj1tYWtlQXJyYXlJdGVyYXRvcihzb3J0ZWRUaWVzKTtcbnJldHVybiBzYW1lUmFua0l0ZXJhdG9yLm5leHQoKTtcbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfSk7XG4gfTtcbmhhcmRlbihnZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzPShcbmMxLFxuYzIsXG5nZXRFbnRyaWVzLFxuYWJzZW50VmFsdWUpPT5cbntcbmNvbnN0IGUxPWdldEVudHJpZXMoYzEpO1xuY29uc3QgZTI9Z2V0RW50cmllcyhjMik7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCB4PWdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMoZTEsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHk9Z2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyhlMixjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuXG4vL1xuLy9cbmxldCB4RG9uZTtcbmxldCB4S2V5O1xubGV0IHhWYWx1ZTtcbmxldCB5RG9uZTtcbmxldCB5S2V5O1xubGV0IHlWYWx1ZTtcbmNvbnN0IG5vbkVudHJ5PVt1bmRlZmluZWQsdW5kZWZpbmVkXTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBtdXN0IG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbmNvbnN0IHJlc3VsdD14VmFsdWU7XG4oe2RvbmU6eERvbmUsdmFsdWU6W3hLZXkseFZhbHVlXT1ub25FbnRyeX09eC5uZXh0KCkpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xubmV4dFgoKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBtdXN0IG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbmNvbnN0IHJlc3VsdD15VmFsdWU7XG4oe2RvbmU6eURvbmUsdmFsdWU6W3lLZXkseVZhbHVlXT1ub25FbnRyeX09eS5uZXh0KCkpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xubmV4dFkoKTtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9PntcbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xudmFsdWU9W3VuZGVmaW5lZCxhYnNlbnRWYWx1ZSxhYnNlbnRWYWx1ZV07XG4gfWVsc2UgaWYoeERvbmUpe1xudmFsdWU9W3lLZXksYWJzZW50VmFsdWUsbmV4dFkoKV07XG4gfWVsc2UgaWYoeURvbmUpe1xudmFsdWU9W3hLZXksbmV4dFgoKSxhYnNlbnRWYWx1ZV07XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeEtleSx5S2V5KTtcbmlmKGNvbXA9PT0wKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksbmV4dFkoKV07XG4gfWVsc2UgaWYoY29tcDwwKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksYWJzZW50VmFsdWVdO1xuIH1lbHNlIGlmKGNvbXA+MCl7XG52YWx1ZT1beUtleSxhYnNlbnRWYWx1ZSxuZXh0WSgpXTtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYFVuZXhwZWN0ZWQga2V5IGNvbXBhcmlzb24gJHtxKGNvbXApfSBmb3IgJHt4S2V5fSB2cyAke3lLZXl9YDtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH0pO1xuIH07JGjNj19vbmNlLmdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKTtcbmhhcmRlbihnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvbXBhcmVDb2xsZWN0aW9uPShnZXRFbnRyaWVzLGFic2VudFZhbHVlLGNvbXBhcmVWYWx1ZXMpPT5cbmhhcmRlbigobGVmdCxyaWdodCk9PntcbmNvbnN0IG1lcmdlZD1nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhcbmxlZnQsXG5yaWdodCxcbmdldEVudHJpZXMsXG5hYnNlbnRWYWx1ZSk7XG5cbmxldCBsZWZ0SXNCaWdnZXI9ZmFsc2U7XG5sZXQgcmlnaHRJc0JpZ2dlcj1mYWxzZTtcbmZvcihjb25zdFtfa2V5LGxlZnRWYWx1ZSxyaWdodFZhbHVlXW9mIG1lcmdlZCl7XG5jb25zdCBjb21wPWNvbXBhcmVWYWx1ZXMobGVmdFZhbHVlLHJpZ2h0VmFsdWUpO1xuaWYoY29tcD09PTApe1xuLy9cbmNvbnRpbnVlO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG4vL1xucmlnaHRJc0JpZ2dlcj10cnVlO1xuIH1lbHNlIGlmKGNvbXA+MCl7XG4vL1xubGVmdElzQmlnZ2VyPXRydWU7XG4gfWVsc2V7XG5OdW1iZXIuaXNOYU4oY29tcCl8fFxuLy9cbkZhaWwgYFVuZXhwZWN0ZWQgdmFsdWUgY29tcGFyaXNvbiAke3EoY29tcCl9IGZvciAke2xlZnRWYWx1ZX0gdnMgJHtyaWdodFZhbHVlfWA7XG5yZXR1cm4gTmFOO1xuIH1cbmlmKGxlZnRJc0JpZ2dlciYmcmlnaHRJc0JpZ2dlcil7XG5yZXR1cm4gTmFOO1xuIH1cbiB9XG4vL1xucmV0dXJuIGxlZnRJc0JpZ2dlcj8xOnJpZ2h0SXNCaWdnZXI/LTE6MDtcbiB9KTskaM2PX29uY2UubWFrZUNvbXBhcmVDb2xsZWN0aW9uKG1ha2VDb21wYXJlQ29sbGVjdGlvbik7XG5oYXJkZW4obWFrZUNvbXBhcmVDb2xsZWN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzIjpbImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzIl0sIm1ha2VDb21wYXJlQ29sbGVjdGlvbiI6WyJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWzrVy1IWAABSFgAANQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NvcHlCYWcuanMiXSwiZXhwb3J0cyI6WyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSXNEaXNqb2ludCIsImJhZ0lzU3VwZXJiYWciLCJiYWdVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLHEsRmFpbCxhc3NlcnROb0R1cGxpY2F0ZUtleXMsbWFrZUJhZ09mRW50cmllczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY29weUJhZy5qc1wiLCBbW1wiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzXCIsIFskaM2PX2EgPT4gKGFzc2VydE5vRHVwbGljYXRlS2V5cyA9ICRozY9fYSldXSxbXCJtYWtlQmFnT2ZFbnRyaWVzXCIsIFskaM2PX2EgPT4gKG1ha2VCYWdPZkVudHJpZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZ1dpbmRvd1Jlc29ydD0oYmFnRW50cmllcyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoYmFnRW50cmllcyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWJhZ0VudHJpZXM7XG5sZXQgaT0wO1xubGV0IG9wdElubmVySXRlcmF0b3I7XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT5cbmhhcmRlbih7XG5uZXh0OigpPT57XG5pZihvcHRJbm5lckl0ZXJhdG9yKXtcbmNvbnN0IHJlc3VsdD1vcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbmlmKHJlc3VsdC5kb25lKXtcbm9wdElubmVySXRlcmF0b3I9dW5kZWZpbmVkO1xuLy9cbiB9ZWxzZXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbmlmKGk8bGVuZ3RoKXtcbmNvbnN0IGVudHJ5PWJhZ0VudHJpZXNbaV07XG5sZXQgaj1pKzE7XG53aGlsZShcbmo8bGVuZ3RoJiZcbnJhbmtDb21wYXJlKGVudHJ5WzBdLGJhZ0VudHJpZXNbal1bMF0pPT09MClcbntcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlOmVudHJ5fSk7XG4gfVxuY29uc3Qgc2ltaWxhclJ1bj1iYWdFbnRyaWVzLnNsaWNlKGksaik7XG5pPWo7XG5jb25zdCByZXNvcnRlZD1zb3J0QnlSYW5rKHNpbWlsYXJSdW4sZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKHJlc29ydGVkLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbi8vXG4vL1xub3B0SW5uZXJJdGVyYXRvcj1yZXNvcnRlZFtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gb3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6W251bGwsMG5dfSk7XG4gfVxuIH19KX0pO1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWVyZ2U9KHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKT0+e1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG5jb25zdCB4cz1iYWdXaW5kb3dSZXNvcnQoeGJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHlzPWJhZ1dpbmRvd1Jlc29ydCh5YmFnRW50cmllcyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAqL1xubGV0IHg7XG5sZXQgeGM7XG5sZXQgeERvbmU7XG4vKiAgICAgICAgICAgICovXG5sZXQgeTtcbmxldCB5YztcbmxldCB5RG9uZTtcblxuY29uc3QgeGk9eHNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe1xuZG9uZTp4RG9uZSxcbnZhbHVlOlt4LHhjXX09XG54aS5uZXh0KCkpO1xuIH07XG5uZXh0WCgpO1xuXG5jb25zdCB5aT15c1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5jb25zdCBuZXh0WT0oKT0+e1xuIXlEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbih7XG5kb25lOnlEb25lLFxudmFsdWU6W3kseWNdfT1cbnlpLm5leHQoKSk7XG4gfTtcbm5leHRZKCk7XG5cbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbi8vXG52YWx1ZT1bbnVsbCwwbiwwbl07XG4gfWVsc2UgaWYoeERvbmUpe1xuLy9cbnZhbHVlPVt5LDBuLHljXTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoeURvbmUpe1xuLy9cbnZhbHVlPVt4LHhjLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHgseSk7XG5pZihjb21wPT09MCl7XG4vL1xudmFsdWU9W3gseGMseWNdO1xubmV4dFgoKTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG52YWx1ZT1beCx4Yywwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuLy9cbmNvbXA+MHx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY29tcCAke3EoY29tcCl9YDtcbnZhbHVlPVt5LDBuLHljXTtcbm5leHRZKCk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9O1xuaGFyZGVuKG1lcmdlKTtcblxuLy9cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySXNTdXBlcmJhZz0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yzx5Yyl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vL1xuLy9cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJJc0Rpc2pvaW50PSh4eWkpPT57XG5mb3IoY29uc3RbX20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0xbiYmeWM+PTFuKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJVbmlvbj0oeHlpKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xucmVzdWx0LnB1c2goW20seGMreWNdKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJJbnRlcnNlY3Rpb249KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmNvbnN0IG1jPXhjPD15Yz94Yzp5YztcbnJlc3VsdC5wdXNoKFttLG1jXSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVyRGlzam9pbnRTdWJ0cmFjdD0oeHlpKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuY29uc3QgbWM9eGMteWM7XG5tYz49MG58fEZhaWwgYHJpZ2h0IGVsZW1lbnQgJHttfSB3YXMgbm90IGluIGxlZnRgO1xuaWYobWM+PTFuKXtcbi8vXG5yZXN1bHQucHVzaChbbSxtY10pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbmNvbnN0IG1lcmdlaWZ5PShiYWdJdGVyT3ApPT4oeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpPT5cbmJhZ0l0ZXJPcChtZXJnZSh4YmFnRW50cmllcyx5YmFnRW50cmllcykpO1xuXG5jb25zdCBiYWdFbnRyaWVzSXNTdXBlcmJhZz1tZXJnZWlmeShiYWdJdGVySXNTdXBlcmJhZyk7XG5jb25zdCBiYWdFbnRyaWVzSXNEaXNqb2ludD1tZXJnZWlmeShiYWdJdGVySXNEaXNqb2ludCk7XG5jb25zdCBiYWdFbnRyaWVzVW5pb249bWVyZ2VpZnkoYmFnSXRlclVuaW9uKTtcbmNvbnN0IGJhZ0VudHJpZXNJbnRlcnNlY3Rpb249bWVyZ2VpZnkoYmFnSXRlckludGVyc2VjdGlvbik7XG5jb25zdCBiYWdFbnRyaWVzRGlzam9pbnRTdWJ0cmFjdD1tZXJnZWlmeShiYWdJdGVyRGlzam9pbnRTdWJ0cmFjdCk7XG5cbmNvbnN0IHJhd0JhZ2lmeT0oYmFnRW50cmllc09wKT0+KHhiYWcseWJhZyk9PlxuYmFnRW50cmllc09wKHhiYWcucGF5bG9hZCx5YmFnLnBheWxvYWQpO1xuXG5jb25zdCBiYWdpZnk9KGJhZ0VudHJpZXNPcCk9Pih4YmFnLHliYWcpPT5cbm1ha2VCYWdPZkVudHJpZXMoYmFnRW50cmllc09wKHhiYWcucGF5bG9hZCx5YmFnLnBheWxvYWQpKTtcblxuY29uc3QgICAgICAgIGJhZ0lzU3VwZXJiYWc9cmF3QmFnaWZ5KGJhZ0VudHJpZXNJc1N1cGVyYmFnKTskaM2PX29uY2UuYmFnSXNTdXBlcmJhZyhiYWdJc1N1cGVyYmFnKTtcbmNvbnN0ICAgICAgICBiYWdJc0Rpc2pvaW50PXJhd0JhZ2lmeShiYWdFbnRyaWVzSXNEaXNqb2ludCk7JGjNj19vbmNlLmJhZ0lzRGlzam9pbnQoYmFnSXNEaXNqb2ludCk7XG5jb25zdCAgICAgICAgYmFnVW5pb249YmFnaWZ5KGJhZ0VudHJpZXNVbmlvbik7JGjNj19vbmNlLmJhZ1VuaW9uKGJhZ1VuaW9uKTtcbmNvbnN0ICAgICAgICBiYWdJbnRlcnNlY3Rpb249YmFnaWZ5KGJhZ0VudHJpZXNJbnRlcnNlY3Rpb24pOyRozY9fb25jZS5iYWdJbnRlcnNlY3Rpb24oYmFnSW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBiYWdEaXNqb2ludFN1YnRyYWN0PWJhZ2lmeShiYWdFbnRyaWVzRGlzam9pbnRTdWJ0cmFjdCk7JGjNj19vbmNlLmJhZ0Rpc2pvaW50U3VidHJhY3QoYmFnRGlzam9pbnRTdWJ0cmFjdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJiYWdJc1N1cGVyYmFnIjpbImJhZ0lzU3VwZXJiYWciXSwiYmFnSXNEaXNqb2ludCI6WyJiYWdJc0Rpc2pvaW50Il0sImJhZ1VuaW9uIjpbImJhZ1VuaW9uIl0sImJhZ0ludGVyc2VjdGlvbiI6WyJiYWdJbnRlcnNlY3Rpb24iXSwiYmFnRGlzam9pbnRTdWJ0cmFjdCI6WyJiYWdEaXNqb2ludFN1YnRyYWN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAH1gizOLHAAAixwAADUAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5U2V0LmpzIl0sImV4cG9ydHMiOlsiZWxlbWVudHNDb21wYXJlIiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFVuaW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzU3VwZXJzZXQiLCJlbGVtZW50c1VuaW9uIiwic2V0RGlzam9pbnRTdWJ0cmFjdCIsInNldERpc2pvaW50VW5pb24iLCJzZXRJbnRlcnNlY3Rpb24iLCJzZXRJc0Rpc2pvaW50Iiwic2V0SXNTdXBlcnNldCIsInNldFVuaW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydFJhbmtTb3J0ZWQsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmsscSxGYWlsLGFzc2VydE5vRHVwbGljYXRlcyxtYWtlU2V0T2ZFbGVtZW50czskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY29weVNldC5qc1wiLCBbW1wiYXNzZXJ0Tm9EdXBsaWNhdGVzXCIsIFskaM2PX2EgPT4gKGFzc2VydE5vRHVwbGljYXRlcyA9ICRozY9fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjNj19hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCB3aW5kb3dSZXNvcnQ9KGVsZW1lbnRzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChlbGVtZW50cyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWVsZW1lbnRzO1xubGV0IGk9MDtcbmxldCBvcHRJbm5lckl0ZXJhdG9yO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+XG5oYXJkZW4oe1xubmV4dDooKT0+e1xuaWYob3B0SW5uZXJJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9b3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG5pZihyZXN1bHQuZG9uZSl7XG5vcHRJbm5lckl0ZXJhdG9yPXVuZGVmaW5lZDtcbi8vXG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCB2YWx1ZT1lbGVtZW50c1tpXTtcbmxldCBqPWkrMTtcbndoaWxlKGo8bGVuZ3RoJiZyYW5rQ29tcGFyZSh2YWx1ZSxlbGVtZW50c1tqXSk9PT0wKXtcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuY29uc3Qgc2ltaWxhclJ1bj1lbGVtZW50cy5zbGljZShpLGopO1xuaT1qO1xuY29uc3QgcmVzb3J0ZWQ9c29ydEJ5UmFuayhzaW1pbGFyUnVuLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbmFzc2VydE5vRHVwbGljYXRlcyhyZXNvcnRlZCxmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbm9wdElubmVySXRlcmF0b3I9cmVzb3J0ZWRbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIG9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOm51bGx9KTtcbiB9XG4gfX0pfSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtZXJnZT0oeGVsZW1lbnRzLHllbGVtZW50cyk9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuY29uc3QgeHM9d2luZG93UmVzb3J0KHhlbGVtZW50cyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuY29uc3QgeXM9d2luZG93UmVzb3J0KHllbGVtZW50cyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAqL1xubGV0IHg7XG5sZXQgeERvbmU7XG4vKiAgICAgICAgICAgICovXG5sZXQgeTtcbmxldCB5RG9uZTtcblxuY29uc3QgeGk9eHNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe2RvbmU6eERvbmUsdmFsdWU6eH09eGkubmV4dCgpKTtcbiB9O1xubmV4dFgoKTtcblxuY29uc3QgeWk9eXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe2RvbmU6eURvbmUsdmFsdWU6eX09eWkubmV4dCgpKTtcbiB9O1xubmV4dFkoKTtcblxucmV0dXJuIGhhcmRlbih7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xuLy9cbnZhbHVlPVtudWxsLDBuLDBuXTtcbiB9ZWxzZSBpZih4RG9uZSl7XG4vL1xudmFsdWU9W3ksMG4sMW5dO1xubmV4dFkoKTtcbiB9ZWxzZSBpZih5RG9uZSl7XG4vL1xudmFsdWU9W3gsMW4sMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeCx5KTtcbmlmKGNvbXA9PT0wKXtcbi8vXG52YWx1ZT1beCwxbiwxbl07XG5uZXh0WCgpO1xubmV4dFkoKTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnZhbHVlPVt4LDFuLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG4vL1xuY29tcD4wfHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb21wICR7cShjb21wKX1gO1xudmFsdWU9W3ksMG4sMW5dO1xubmV4dFkoKTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH19KTtcblxuIH19KTtcblxuIH07XG5oYXJkZW4obWVyZ2UpO1xuXG5jb25zdCBpdGVySXNTdXBlcnNldD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLF95Y11vZiB4eWkpe1xuaWYoeGM9PT0wbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVySXNEaXNqb2ludD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyQ29tcGFyZT0oeHlpKT0+e1xubGV0IGxvbmVZPWZhbHNlO1xubGV0IGxvbmVYPWZhbHNlO1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz09PTBuKXtcbi8vXG5sb25lWT10cnVlO1xuIH1cbmlmKHljPT09MG4pe1xuLy9cbmxvbmVYPXRydWU7XG4gfVxuaWYobG9uZVgmJmxvbmVZKXtcbnJldHVybiBOYU47XG4gfVxuIH1cbmlmKGxvbmVYKXtcbnJldHVybiAxO1xuIH1lbHNlIGlmKGxvbmVZKXtcbnJldHVybi0xO1xuIH1lbHNle1xuIWxvbmVYJiYhbG9uZVl8fFxuRmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgbG9uZSBwYWlyICR7cShbbG9uZVgsbG9uZVldKX1gO1xucmV0dXJuIDA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJVbmlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0wbil7XG5yZXN1bHQucHVzaChtKTtcbiB9ZWxzZXtcbnljPj0wbnx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY291bnQgJHtxKHljKX1gO1xuLy9cbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyRGlzam9pbnRVbmlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnhjPT09MG58fHljPT09MG58fEZhaWwgYFNldHMgbXVzdCBub3QgaGF2ZSBjb21tb24gZWxlbWVudHM6ICR7bX1gO1xuaWYoeGM+PTFuKXtcbnJlc3VsdC5wdXNoKG0pO1xuIH1lbHNle1xueWM+PTFufHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb3VudCAke3EoeWMpfWA7XG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVySW50ZXJzZWN0aW9uPSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJEaXNqb2ludFN1YnRyYWN0PSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xueGM+PTFufHxGYWlsIGByaWdodCBlbGVtZW50ICR7bX0gd2FzIG5vdCBpbiBsZWZ0YDtcbmlmKHljPT09MG4pe1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbmNvbnN0IG1lcmdlaWZ5PShpdGVyT3ApPT4oeGVsZW1lbnRzLHllbGVtZW50cyk9PlxuaXRlck9wKG1lcmdlKHhlbGVtZW50cyx5ZWxlbWVudHMpKTtcblxuY29uc3QgICAgICAgIGVsZW1lbnRzSXNTdXBlcnNldD1tZXJnZWlmeShpdGVySXNTdXBlcnNldCk7JGjNj19vbmNlLmVsZW1lbnRzSXNTdXBlcnNldChlbGVtZW50c0lzU3VwZXJzZXQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzSXNEaXNqb2ludD1tZXJnZWlmeShpdGVySXNEaXNqb2ludCk7JGjNj19vbmNlLmVsZW1lbnRzSXNEaXNqb2ludChlbGVtZW50c0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzQ29tcGFyZT1tZXJnZWlmeShpdGVyQ29tcGFyZSk7JGjNj19vbmNlLmVsZW1lbnRzQ29tcGFyZShlbGVtZW50c0NvbXBhcmUpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzVW5pb249bWVyZ2VpZnkoaXRlclVuaW9uKTskaM2PX29uY2UuZWxlbWVudHNVbmlvbihlbGVtZW50c1VuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50VW5pb249bWVyZ2VpZnkoaXRlckRpc2pvaW50VW5pb24pOyRozY9fb25jZS5lbGVtZW50c0Rpc2pvaW50VW5pb24oZWxlbWVudHNEaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0ludGVyc2VjdGlvbj1tZXJnZWlmeShpdGVySW50ZXJzZWN0aW9uKTskaM2PX29uY2UuZWxlbWVudHNJbnRlcnNlY3Rpb24oZWxlbWVudHNJbnRlcnNlY3Rpb24pO1xuY29uc3QgICAgICAgIGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdD1tZXJnZWlmeShpdGVyRGlzam9pbnRTdWJ0cmFjdCk7JGjNj19vbmNlLmVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdChlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdTZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5lbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpO1xuXG5jb25zdCBzZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpKTtcblxuY29uc3QgICAgICAgIHNldElzU3VwZXJzZXQ9cmF3U2V0aWZ5KGVsZW1lbnRzSXNTdXBlcnNldCk7JGjNj19vbmNlLnNldElzU3VwZXJzZXQoc2V0SXNTdXBlcnNldCk7XG5jb25zdCAgICAgICAgc2V0SXNEaXNqb2ludD1yYXdTZXRpZnkoZWxlbWVudHNJc0Rpc2pvaW50KTskaM2PX29uY2Uuc2V0SXNEaXNqb2ludChzZXRJc0Rpc2pvaW50KTtcbmNvbnN0ICAgICAgICBzZXRVbmlvbj1zZXRpZnkoZWxlbWVudHNVbmlvbik7JGjNj19vbmNlLnNldFVuaW9uKHNldFVuaW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFVuaW9uPXNldGlmeShlbGVtZW50c0Rpc2pvaW50VW5pb24pOyRozY9fb25jZS5zZXREaXNqb2ludFVuaW9uKHNldERpc2pvaW50VW5pb24pO1xuY29uc3QgICAgICAgIHNldEludGVyc2VjdGlvbj1zZXRpZnkoZWxlbWVudHNJbnRlcnNlY3Rpb24pOyRozY9fb25jZS5zZXRJbnRlcnNlY3Rpb24oc2V0SW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFN1YnRyYWN0PXNldGlmeShlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5zZXREaXNqb2ludFN1YnRyYWN0KHNldERpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZWxlbWVudHNJc1N1cGVyc2V0IjpbImVsZW1lbnRzSXNTdXBlcnNldCJdLCJlbGVtZW50c0lzRGlzam9pbnQiOlsiZWxlbWVudHNJc0Rpc2pvaW50Il0sImVsZW1lbnRzQ29tcGFyZSI6WyJlbGVtZW50c0NvbXBhcmUiXSwiZWxlbWVudHNVbmlvbiI6WyJlbGVtZW50c1VuaW9uIl0sImVsZW1lbnRzRGlzam9pbnRVbmlvbiI6WyJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSwiZWxlbWVudHNJbnRlcnNlY3Rpb24iOlsiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IjpbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLCJzZXRJc1N1cGVyc2V0IjpbInNldElzU3VwZXJzZXQiXSwic2V0SXNEaXNqb2ludCI6WyJzZXRJc0Rpc2pvaW50Il0sInNldFVuaW9uIjpbInNldFVuaW9uIl0sInNldERpc2pvaW50VW5pb24iOlsic2V0RGlzam9pbnRVbmlvbiJdLCJzZXRJbnRlcnNlY3Rpb24iOlsic2V0SW50ZXJzZWN0aW9uIl0sInNldERpc2pvaW50U3VidHJhY3QiOlsic2V0RGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACkQyco7RgAAO0YAAA2AAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiLi9wYXR0ZXJuTWF0Y2hlcnMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIl0sImV4cG9ydHMiOlsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG9iamVjdE1hcCxBcmdHdWFyZExpc3RTaGFwZSxBd2FpdEFyZ0d1YXJkU2hhcGUsSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUsSW50ZXJmYWNlR3VhcmRTaGFwZSxNLE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLE1ldGhvZEd1YXJkU2hhcGUsUmF3R3VhcmRTaGFwZSxTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxTeW5jVmFsdWVHdWFyZFNoYXBlLGFzc2VydEF3YWl0QXJnR3VhcmQsbWF0Y2hlcyxtdXN0TWF0Y2gsZ2V0Q29weU1hcEtleXMsbWFrZUNvcHlNYXA7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIi4vcGF0dGVybk1hdGNoZXJzLmpzXCIsIFtbXCJBcmdHdWFyZExpc3RTaGFwZVwiLCBbJGjNj19hID0+IChBcmdHdWFyZExpc3RTaGFwZSA9ICRozY9fYSldXSxbXCJBd2FpdEFyZ0d1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoQXdhaXRBcmdHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlXCIsIFskaM2PX2EgPT4gKEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlID0gJGjNj19hKV1dLFtcIkludGVyZmFjZUd1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoSW50ZXJmYWNlR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGVcIiwgWyRozY9fYSA9PiAoTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUgPSAkaM2PX2EpXV0sW1wiTWV0aG9kR3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChNZXRob2RHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcIlJhd0d1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoUmF3R3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJTeW5jVmFsdWVHdWFyZExpc3RTaGFwZVwiLCBbJGjNj19hID0+IChTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSA9ICRozY9fYSldXSxbXCJTeW5jVmFsdWVHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKFN5bmNWYWx1ZUd1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0QXdhaXRBcmdHdWFyZFwiLCBbJGjNj19hID0+IChhc3NlcnRBd2FpdEFyZ0d1YXJkID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jaGVja0tleS5qc1wiLCBbW1wiZ2V0Q29weU1hcEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEtleXMgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGU9aGFyZGVuKHtcbmtsYXNzOidhd2FpdEFyZycsXG5hcmdHdWFyZDpNLnBhdHRlcm4oKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZD0oYXdhaXRBcmdHdWFyZCk9PntcbmlmKG1hdGNoZXMoYXdhaXRBcmdHdWFyZCxMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUpKXtcbi8vXG5jb25zdHtrbGFzczpfLC4uLnBheWxvYWR9PWF3YWl0QXJnR3VhcmQ7XG4vL1xucmV0dXJuIHBheWxvYWQ7XG4gfVxuYXNzZXJ0QXdhaXRBcmdHdWFyZChhd2FpdEFyZ0d1YXJkKTtcbnJldHVybiBhd2FpdEFyZ0d1YXJkLnBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5U3luY01ldGhvZEd1YXJkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmtsYXNzOidtZXRob2RHdWFyZCcsXG5jYWxsS2luZDonc3luYycsXG5hcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSxcblxue1xub3B0aW9uYWxBcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5yZXN0QXJnR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXJnR3VhcmRTaGFwZT1NLm9yKFxuUmF3R3VhcmRTaGFwZSxcbkF3YWl0QXJnR3VhcmRTaGFwZSxcbkxlZ2FjeUF3YWl0QXJnR3VhcmRTaGFwZSxcbk0ucGF0dGVybigpKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXJnR3VhcmRMaXN0U2hhcGU9TS5hcnJheU9mKExlZ2FjeUFyZ0d1YXJkU2hhcGUpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBc3luY01ldGhvZEd1YXJkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmtsYXNzOidtZXRob2RHdWFyZCcsXG5jYWxsS2luZDonYXN5bmMnLFxuYXJnR3VhcmRzOkxlZ2FjeUFyZ0d1YXJkTGlzdFNoYXBlLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0sXG5cbntcbm9wdGlvbmFsQXJnR3VhcmRzOkFyZ0d1YXJkTGlzdFNoYXBlLFxucmVzdEFyZ0d1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeU1ldGhvZEd1YXJkU2hhcGU9TS5vcihcbkxlZ2FjeVN5bmNNZXRob2RHdWFyZFNoYXBlLFxuTGVnYWN5QXN5bmNNZXRob2RHdWFyZFNoYXBlKTtcblxuXG5jb25zdCBhZGFwdExlZ2FjeUFyZ0d1YXJkPShhcmdHdWFyZCk9PlxubWF0Y2hlcyhhcmdHdWFyZCxMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUpP1xuTS5hd2FpdChnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChhcmdHdWFyZCkuYXJnR3VhcmQpOlxuYXJnR3VhcmQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kR3VhcmRQYXlsb2FkPShtZXRob2RHdWFyZCk9PntcbmlmKG1hdGNoZXMobWV0aG9kR3VhcmQsTWV0aG9kR3VhcmRTaGFwZSkpe1xucmV0dXJuIG1ldGhvZEd1YXJkLnBheWxvYWQ7XG4gfVxubXVzdE1hdGNoKG1ldGhvZEd1YXJkLExlZ2FjeU1ldGhvZEd1YXJkU2hhcGUsJ2xlZ2FjeU1ldGhvZEd1YXJkJyk7XG5jb25zdHtcbi8vXG5rbGFzczpfLFxuLy9cbmNhbGxLaW5kLFxuLy9cbnJldHVybkd1YXJkLFxuLy9cbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZDtcbmxldHtcbi8vXG5hcmdHdWFyZHMsXG4vL1xub3B0aW9uYWxBcmdHdWFyZHN9PVxubWV0aG9kR3VhcmQ7XG5pZihjYWxsS2luZD09PSdhc3luYycpe1xuYXJnR3VhcmRzPWFyZ0d1YXJkcy5tYXAoYWRhcHRMZWdhY3lBcmdHdWFyZCk7XG5vcHRpb25hbEFyZ0d1YXJkcz1cbm9wdGlvbmFsQXJnR3VhcmRzJiZvcHRpb25hbEFyZ0d1YXJkcy5tYXAoYWRhcHRMZWdhY3lBcmdHdWFyZCk7XG4gfVxuY29uc3QgcGF5bG9hZD1oYXJkZW4oe1xuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcyxcbnJlc3RBcmdHdWFyZCxcbnJldHVybkd1YXJkfSk7XG5cbi8vXG5tdXN0TWF0Y2gocGF5bG9hZCxNZXRob2RHdWFyZFBheWxvYWRTaGFwZSwnaW50ZXJuYWxNZXRob2RHdWFyZEFkYXB0b3InKTtcbnJldHVybiBwYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldE1ldGhvZEd1YXJkUGF5bG9hZChnZXRNZXRob2RHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldE1ldGhvZEd1YXJkUGF5bG9hZCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUludGVyZmFjZUd1YXJkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmtsYXNzOidJbnRlcmZhY2UnLFxuaW50ZXJmYWNlTmFtZTpNLnN0cmluZygpLFxubWV0aG9kR3VhcmRzOk0ucmVjb3JkT2YoXG5NLnN0cmluZygpLFxuTS5vcihNZXRob2RHdWFyZFNoYXBlLExlZ2FjeU1ldGhvZEd1YXJkU2hhcGUpKX0sXG5cblxue1xuZGVmYXVsdEd1YXJkczpNLm9yKE0udW5kZWZpbmVkKCksJ3Bhc3NhYmxlJywncmF3JyksXG5zbG9wcHk6TS5ib29sZWFuKCksXG4vL1xuLy9cbi8vXG5zeW1ib2xNZXRob2RHdWFyZHM6TS5tYXBPZihNLnN5bWJvbCgpLE1ldGhvZEd1YXJkU2hhcGUpfSk7XG5cblxuXG5jb25zdCBhZGFwdE1ldGhvZEd1YXJkPShtZXRob2RHdWFyZCk9PntcbmlmKG1hdGNoZXMobWV0aG9kR3VhcmQsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSkpe1xuY29uc3R7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkPU0uYW55KCksXG5yZXR1cm5HdWFyZH09XG5nZXRNZXRob2RHdWFyZFBheWxvYWQobWV0aG9kR3VhcmQpO1xuY29uc3QgbUNhbGw9Y2FsbEtpbmQ9PT0nc3luYyc/TS5jYWxsOk0uY2FsbFdoZW47XG5yZXR1cm4gbUNhbGwoLi4uYXJnR3VhcmRzKS5cbm9wdGlvbmFsKC4uLm9wdGlvbmFsQXJnR3VhcmRzKS5cbnJlc3QocmVzdEFyZ0d1YXJkKS5cbnJldHVybnMocmV0dXJuR3VhcmQpO1xuIH1cbnJldHVybiBtZXRob2RHdWFyZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkPShpbnRlcmZhY2VHdWFyZCk9PntcbmlmKG1hdGNoZXMoaW50ZXJmYWNlR3VhcmQsSW50ZXJmYWNlR3VhcmRTaGFwZSkpe1xucmV0dXJuIGludGVyZmFjZUd1YXJkLnBheWxvYWQ7XG4gfVxubXVzdE1hdGNoKGludGVyZmFjZUd1YXJkLExlZ2FjeUludGVyZmFjZUd1YXJkU2hhcGUsJ2xlZ2FjeUludGVyZmFjZUd1YXJkJyk7XG4vL1xuLy9cbmxldHtrbGFzczpfLGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLC4uLnJlc3R9PWludGVyZmFjZUd1YXJkO1xubWV0aG9kR3VhcmRzPW9iamVjdE1hcChtZXRob2RHdWFyZHMsYWRhcHRNZXRob2RHdWFyZCk7XG5jb25zdCBwYXlsb2FkPWhhcmRlbih7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzLFxuLi4ucmVzdH0pO1xuXG5tdXN0TWF0Y2goXG5wYXlsb2FkLFxuSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUsXG4naW50ZXJuYWxJbnRlcmZhY2VHdWFyZEFkYXB0b3InKTtcblxucmV0dXJuIHBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKTtcblxuY29uc3QgZW1wdHlDb3B5TWFwPW1ha2VDb3B5TWFwKFtdKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VNZXRob2RLZXlzPShpbnRlcmZhY2VHdWFyZCk9PntcbmNvbnN0e21ldGhvZEd1YXJkcyxzeW1ib2xNZXRob2RHdWFyZHM9ZW1wdHlDb3B5TWFwfT1cbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChpbnRlcmZhY2VHdWFyZCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oW1xuLi4uUmVmbGVjdC5vd25LZXlzKG1ldGhvZEd1YXJkcyksXG4uLi5nZXRDb3B5TWFwS2V5cyhzeW1ib2xNZXRob2RHdWFyZHMpXSk7XG5cbiB9OyRozY9fb25jZS5nZXRJbnRlcmZhY2VNZXRob2RLZXlzKGdldEludGVyZmFjZU1ldGhvZEtleXMpO1xuaGFyZGVuKGdldEludGVyZmFjZU1ldGhvZEtleXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiOlsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiXSwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIjpbImdldE1ldGhvZEd1YXJkUGF5bG9hZCJdLCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiOlsiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIl0sImdldEludGVyZmFjZU1ldGhvZEtleXMiOlsiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAdOAyUyK0AAMitAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIiwiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIiwiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiLCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi4va2V5cy9jb21wYXJlS2V5cy5qcyIsIi4uL2tleXMvY2hlY2tLZXkuanMiLCIuLi9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIl0sImV4cG9ydHMiOlsiQXJnR3VhcmRMaXN0U2hhcGUiLCJBd2FpdEFyZ0d1YXJkU2hhcGUiLCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSIsIkludGVyZmFjZUd1YXJkU2hhcGUiLCJNIiwiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiLCJNZXRob2RHdWFyZFNoYXBlIiwiUmF3R3VhcmRTaGFwZSIsIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIiwiU3luY1ZhbHVlR3VhcmRTaGFwZSIsImFzc2VydEF3YWl0QXJnR3VhcmQiLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCIsImFzc2VydE1ldGhvZEd1YXJkIiwiYXNzZXJ0UGF0dGVybiIsImFzc2VydFJhd0d1YXJkIiwiY2hlY2tNYXRjaGVzIiwiZGVmYXVsdExpbWl0cyIsImdldFJhbmtDb3ZlciIsImlzQXdhaXRBcmdHdWFyZCIsImlzUGF0dGVybiIsImlzUmF3R3VhcmQiLCJraW5kT2YiLCJtYXRjaGVzIiwibXVzdE1hdGNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsRmFyLGdldFRhZyxtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGhhc093blByb3BlcnR5T2YsbmFtZUZvclBhc3NhYmxlU3ltYm9sLGNvbXBhcmVSYW5rLGdldFBhc3NTdHlsZUNvdmVyLGludGVyc2VjdFJhbmtDb3ZlcnMsdW5pb25SYW5rQ292ZXJzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlcyxpZGVudENoZWNrZXIsYXBwbHlMYWJlbGluZ0Vycm9yLGZyb21VbmlxdWVFbnRyaWVzLGxpc3REaWZmZXJlbmNlLHEsYixYLEZhaWwsbWFrZUVycm9yLGFubm90YXRlRXJyb3Isa2V5RVEsa2V5R1Qsa2V5R1RFLGtleUxULGtleUxURSxhc3NlcnRLZXksY2hlY2tLZXksaXNLZXksY2hlY2tTY2FsYXJLZXksY2hlY2tDb3B5U2V0LGNoZWNrQ29weU1hcCxjb3B5TWFwS2V5U2V0LGNoZWNrQ29weUJhZyxnZXRDb3B5TWFwRW50cnlBcnJheSxtYWtlQ29weU1hcCxnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJuYW1lRm9yUGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAobmFtZUZvclBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dLFtcImdldFBhc3NTdHlsZUNvdmVyXCIsIFskaM2PX2EgPT4gKGdldFBhc3NTdHlsZUNvdmVyID0gJGjNj19hKV1dLFtcImludGVyc2VjdFJhbmtDb3ZlcnNcIiwgWyRozY9fYSA9PiAoaW50ZXJzZWN0UmFua0NvdmVycyA9ICRozY9fYSldXSxbXCJ1bmlvblJhbmtDb3ZlcnNcIiwgWyRozY9fYSA9PiAodW5pb25SYW5rQ292ZXJzID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qc1wiLCBbW1wiaWRlbnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qc1wiLCBbW1wiYXBwbHlMYWJlbGluZ0Vycm9yXCIsIFskaM2PX2EgPT4gKGFwcGx5TGFiZWxpbmdFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtbXCJmcm9tVW5pcXVlRW50cmllc1wiLCBbJGjNj19hID0+IChmcm9tVW5pcXVlRW50cmllcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW1tcImxpc3REaWZmZXJlbmNlXCIsIFskaM2PX2EgPT4gKGxpc3REaWZmZXJlbmNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiYlwiLCBbJGjNj19hID0+IChiID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2NvbXBhcmVLZXlzLmpzXCIsIFtbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXSxbXCJrZXlHVFwiLCBbJGjNj19hID0+IChrZXlHVCA9ICRozY9fYSldXSxbXCJrZXlHVEVcIiwgWyRozY9fYSA9PiAoa2V5R1RFID0gJGjNj19hKV1dLFtcImtleUxUXCIsIFskaM2PX2EgPT4gKGtleUxUID0gJGjNj19hKV1dLFtcImtleUxURVwiLCBbJGjNj19hID0+IChrZXlMVEUgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2NoZWNrS2V5LmpzXCIsIFtbXCJhc3NlcnRLZXlcIiwgWyRozY9fYSA9PiAoYXNzZXJ0S2V5ID0gJGjNj19hKV1dLFtcImNoZWNrS2V5XCIsIFskaM2PX2EgPT4gKGNoZWNrS2V5ID0gJGjNj19hKV1dLFtcImlzS2V5XCIsIFskaM2PX2EgPT4gKGlzS2V5ID0gJGjNj19hKV1dLFtcImNoZWNrU2NhbGFyS2V5XCIsIFskaM2PX2EgPT4gKGNoZWNrU2NhbGFyS2V5ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weVNldFwiLCBbJGjNj19hID0+IChjaGVja0NvcHlTZXQgPSAkaM2PX2EpXV0sW1wiY2hlY2tDb3B5TWFwXCIsIFskaM2PX2EgPT4gKGNoZWNrQ29weU1hcCA9ICRozY9fYSldXSxbXCJjb3B5TWFwS2V5U2V0XCIsIFskaM2PX2EgPT4gKGNvcHlNYXBLZXlTZXQgPSAkaM2PX2EpXV0sW1wiY2hlY2tDb3B5QmFnXCIsIFskaM2PX2EgPT4gKGNoZWNrQ29weUJhZyA9ICRozY9fYSldXSxbXCJnZXRDb3B5TWFwRW50cnlBcnJheVwiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwRW50cnlBcnJheSA9ICRozY9fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjNj19hID0+IChtYWtlQ29weU1hcCA9ICRozY9fYSldXV1dLFtcIi4uL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNcIiwgW1tcImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLHZhbHVlc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF0dGVybk1lbW89bmV3IFdlYWtTZXQoKTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgTU07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmYXVsdExpbWl0cz1oYXJkZW4oe1xuZGVjaW1hbERpZ2l0c0xpbWl0OjEwMCxcbnN0cmluZ0xlbmd0aExpbWl0OjEwMF8wMDAsXG5zeW1ib2xOYW1lTGVuZ3RoTGltaXQ6MTAwLFxubnVtUHJvcGVydGllc0xpbWl0OjgwLFxucHJvcGVydHlOYW1lTGVuZ3RoTGltaXQ6MTAwLFxuYXJyYXlMZW5ndGhMaW1pdDoxMF8wMDAsXG5udW1TZXRFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQ6MTBfMDAwLFxubnVtTWFwRW50cmllc0xpbWl0OjUwMDB9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZmF1bHRMaW1pdHMoZGVmYXVsdExpbWl0cyk7XG5jb25zdCBsaW1pdD0obGltaXRzPXt9KT0+XG4vKiAgICAgICAgICAgICAgICAgICAgKi9oYXJkZW4oe19fcHJvdG9fXzpkZWZhdWx0TGltaXRzLC4uLmxpbWl0c30pO1xuXG5jb25zdCBjaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdD0oXG5wYXlsb2FkLFxubWFpblBheWxvYWRTaGFwZSxcbmNoZWNrLFxubGFiZWwpPT5cbntcbmFzc2VydChBcnJheS5pc0FycmF5KG1haW5QYXlsb2FkU2hhcGUpKTtcbmlmKCFBcnJheS5pc0FycmF5KHBheWxvYWQpKXtcbnJldHVybiBjaGVjayhmYWxzZSxYIGAke3EobGFiZWwpfSBwYXlsb2FkIG11c3QgYmUgYW4gYXJyYXk6ICR7cGF5bG9hZH1gKTtcbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBtYWluTGVuZ3RoPW1haW5QYXlsb2FkU2hhcGUubGVuZ3RoO1xuaWYoIShwYXlsb2FkLmxlbmd0aD09PW1haW5MZW5ndGh8fHBheWxvYWQubGVuZ3RoPT09bWFpbkxlbmd0aCsxKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtxKGxhYmVsKX0gcGF5bG9hZCB1bmV4cGVjdGVkIHNpemU6ICR7cGF5bG9hZH1gKTtcbiB9XG5jb25zdCBsaW1pdHM9cGF5bG9hZFttYWluTGVuZ3RoXTtcbnBheWxvYWQ9aGFyZGVuKHBheWxvYWQuc2xpY2UoMCxtYWluTGVuZ3RoKSk7XG4vL1xuaWYoIWNoZWNrTWF0Y2hlcyhwYXlsb2FkLG1haW5QYXlsb2FkU2hhcGUsY2hlY2ssbGFiZWwpKXtcbnJldHVybiBmYWxzZTtcbiB9XG5pZihsaW1pdHM9PT11bmRlZmluZWQpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuKFxuKHBhc3NTdHlsZU9mKGxpbWl0cyk9PT0nY29weVJlY29yZCd8fFxuY2hlY2soZmFsc2UsWCBgTGltaXRzIG11c3QgYmUgYSByZWNvcmQ6ICR7cShsaW1pdHMpfWApKSYmXG5lbnRyaWVzKGxpbWl0cykuZXZlcnkoXG4oW2tleSx2YWx1ZV0pPT5cbnBhc3NTdHlsZU9mKHZhbHVlKT09PSdudW1iZXInfHxcbmNoZWNrKGZhbHNlLFggYFZhbHVlIG9mIGxpbWl0ICR7cShrZXkpfSBidXQgYmUgYSBudW1iZXI6ICR7cSh2YWx1ZSl9YCkpKTtcblxuXG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tEZWNpbWFsRGlnaXRzTGltaXQ9KHNwZWNpbWVuLGRlY2ltYWxEaWdpdHNMaW1pdCxjaGVjayk9PntcbmlmKFxuTWF0aC5mbG9vcihNYXRoLmxvZzEwKE1hdGguYWJzKE51bWJlcihzcGVjaW1lbikpKSkrMTw9XG5kZWNpbWFsRGlnaXRzTGltaXQpXG57XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYGJpZ2ludCAke3NwZWNpbWVufSBtdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke2RlY2ltYWxEaWdpdHNMaW1pdH0gZGlnaXRzYCk7XG5cbiB9O1xuXG4vKlxuXG4gKi9cbmNvbnN0IG1ha2VQYXR0ZXJuS2l0PSgpPT57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZU1hdGNoSGVscGVyPSh0YWcpPT5cbi8vXG5IZWxwZXJzQnlNYXRjaFRhZ1t0YWddO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlUGF5bG9hZFNoYXBlPSh0YWcpPT5cbi8vXG5HdWFyZFBheWxvYWRTaGFwZXNbdGFnXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaW5nbGV0b25LaW5kcz1uZXcgTWFwKFtcblsnbnVsbCcsbnVsbF0sXG5bJ3VuZGVmaW5lZCcsdW5kZWZpbmVkXV0pO1xuXG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgdGFnTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tUYWdnZWQ9KHRhZ2dlZCx0YWcsY2hlY2spPT57XG5jb25zdCBtYXRjaEhlbHBlcj1tYXliZU1hdGNoSGVscGVyKHRhZyk7XG5pZihtYXRjaEhlbHBlcil7XG4vL1xuLy9cbnJldHVybiBtYXRjaEhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCh0YWdnZWQucGF5bG9hZCxjaGVjayk7XG4gfWVsc2V7XG5jb25zdCBwYXlsb2FkU2hhcGU9bWF5YmVQYXlsb2FkU2hhcGUodGFnKTtcbmlmKHBheWxvYWRTaGFwZSE9PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIGNoZWNrTWF0Y2hlcyh0YWdnZWQucGF5bG9hZCxwYXlsb2FkU2hhcGUsY2hlY2ssdGFnKTtcbiB9XG4gfVxuc3dpdGNoKHRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbnJldHVybiBjaGVja0NvcHlTZXQodGFnZ2VkLGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbnJldHVybiBjaGVja0NvcHlCYWcodGFnZ2VkLGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbnJldHVybiBjaGVja0NvcHlNYXAodGFnZ2VkLGNoZWNrKTtcbiB9XG5kZWZhdWx0OntcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgY2Fubm90IGNoZWNrIHVucmVjb2duaXplZCB0YWcgJHtxKHRhZyl9OiAke3RhZ2dlZH1gKTtcblxuIH19XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qga2luZE9mPShzcGVjaW1lbixjaGVjaz1pZGVudENoZWNrZXIpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuaWYocGFzc1N0eWxlIT09J3RhZ2dlZCcpe1xucmV0dXJuIHBhc3NTdHlsZTtcbiB9XG4vL1xuLy9cbi8vXG5pZih0YWdNZW1vLmhhcyhzcGVjaW1lbikpe1xucmV0dXJuIHRhZ01lbW8uZ2V0KHNwZWNpbWVuKTtcbiB9XG5jb25zdCB0YWc9Z2V0VGFnKHNwZWNpbWVuKTtcbmlmKGNoZWNrVGFnZ2VkKHNwZWNpbWVuLHRhZyxjaGVjaykpe1xudGFnTWVtby5zZXQoc3BlY2ltZW4sdGFnKTtcbnJldHVybiB0YWc7XG4gfVxuaWYoY2hlY2shPT1pZGVudENoZWNrZXIpe1xuY2hlY2soZmFsc2UsWCBgY2Fubm90IGNoZWNrIHVucmVjb2duaXplZCB0YWcgJHtxKHRhZyl9YCk7XG4gfVxucmV0dXJuIHVuZGVmaW5lZDtcbiB9O1xuaGFyZGVuKGtpbmRPZik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja0tpbmQ9KHNwZWNpbWVuLGtpbmQsY2hlY2spPT57XG4vL1xuaWYoc2luZ2xldG9uS2luZHMuaGFzKGtpbmQpKXtcbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4sc2luZ2xldG9uS2luZHMuZ2V0KGtpbmQpLGNoZWNrKTtcbiB9XG5cbmNvbnN0IHJlYWxLaW5kPWtpbmRPZihzcGVjaW1lbixjaGVjayk7XG5pZihraW5kPT09cmVhbEtpbmQpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoY2hlY2shPT1pZGVudENoZWNrZXIpe1xuLy9cbi8vXG5jaGVjayhmYWxzZSxYIGAke2IocmVhbEtpbmQpfSAke3NwZWNpbWVufSAtIE11c3QgYmUgYSAke2Ioa2luZCl9YCk7XG4gfVxucmV0dXJuIGZhbHNlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgaXNLaW5kPShzcGVjaW1lbixraW5kKT0+Y2hlY2tLaW5kKHNwZWNpbWVuLGtpbmQsaWRlbnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrQXNLZXlQYXR0PShzcGVjaW1lbixrZXlBc1BhdHRlcm4sY2hlY2spPT57XG5pZihpc0tleShzcGVjaW1lbikmJmtleUVRKHNwZWNpbWVuLGtleUFzUGF0dGVybikpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuKFxuY2hlY2shPT1pZGVudENoZWNrZXImJlxuLy9cbi8vXG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmU6ICR7a2V5QXNQYXR0ZXJufWApKTtcblxuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2hlY2tQYXR0ZXJuPShwYXR0LGNoZWNrKT0+e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiB0cnVlO1xuIH1cbmlmKHBhdHRlcm5NZW1vLmhhcyhwYXR0KSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4vL1xuY29uc3QgcmVzdWx0PWNoZWNrUGF0dGVybkludGVybmFsKHBhdHQsY2hlY2spO1xuaWYocmVzdWx0KXtcbnBhdHRlcm5NZW1vLmFkZChwYXR0KTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1BhdHRlcm5JbnRlcm5hbD0ocGF0dCxjaGVjayk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGNoZWNrSXQ9KGNoaWxkKT0+Y2hlY2tQYXR0ZXJuKGNoaWxkLGNoZWNrKTtcblxuY29uc3Qga2luZD1raW5kT2YocGF0dCxjaGVjayk7XG5zd2l0Y2goa2luZCl7XG5jYXNlIHVuZGVmaW5lZDp7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbnJldHVybiB2YWx1ZXMocGF0dCkuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG4vL1xucmV0dXJuIHBhdHQuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tQYXR0ZXJuKHBhdHQudmFsdWVzLGNoZWNrKTtcbiB9XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKGtpbmQpfSBjYW5ub3QgYmUgYSBwYXR0ZXJuYCk7XG4gfVxuZGVmYXVsdDp7XG5pZihtYXliZU1hdGNoSGVscGVyKGtpbmQpIT09dW5kZWZpbmVkKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgQSBwYXNzYWJsZSBvZiBraW5kICR7cShraW5kKX0gaXMgbm90IGEgcGF0dGVybjogJHtwYXR0fWApO1xuXG4gfX1cblxuIH07XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGlzUGF0dGVybj0ocGF0dCk9PmNoZWNrUGF0dGVybihwYXR0LGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cbiAgICovXG5jb25zdCBhc3NlcnRQYXR0ZXJuPShwYXR0KT0+e1xuY2hlY2tQYXR0ZXJuKHBhdHQsYXNzZXJ0Q2hlY2tlcik7XG4gfTtcblxuLy9cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tNYXRjaGVzPShzcGVjaW1lbixwYXR0ZXJuLGNoZWNrLGxhYmVsPXVuZGVmaW5lZCk9PlxuLy9cbmFwcGx5TGFiZWxpbmdFcnJvcihjaGVja01hdGNoZXNJbnRlcm5hbCxbc3BlY2ltZW4scGF0dGVybixjaGVja10sbGFiZWwpO1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tNYXRjaGVzSW50ZXJuYWw9KHNwZWNpbWVuLHBhdHQsY2hlY2spPT57XG4vL1xuY29uc3QgcGF0dGVybktpbmQ9a2luZE9mKHBhdHQsY2hlY2spO1xuY29uc3Qgc3BlY2ltZW5LaW5kPWtpbmRPZihzcGVjaW1lbik7Ly9cbnN3aXRjaChwYXR0ZXJuS2luZCl7XG5jYXNlIHVuZGVmaW5lZDp7XG5yZXR1cm4gRmFpbCBgcGF0dGVybiBleHBlY3RlZDogJHtwYXR0fWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5yZXR1cm4gRmFpbCBgcHJvbWlzZXMgY2Fubm90IGJlIHBhdHRlcm5zOiAke3BhdHR9YDtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5yZXR1cm4gRmFpbCBgZXJyb3JzIGNhbm5vdCBiZSBwYXR0ZXJuczogJHtwYXR0fWA7XG4gfVxuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ3N5bWJvbCc6XG5jYXNlJ2NvcHlTZXQnOlxuY2FzZSdjb3B5QmFnJzpcbmNhc2UncmVtb3RhYmxlJzp7XG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHBhdHQsY2hlY2spO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBhIGNvcHlBcnJheSB0byBtYXRjaCBhIGNvcHlBcnJheSBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbmNvbnN0e2xlbmd0aH09cGF0dDtcbmlmKHNwZWNpbWVuLmxlbmd0aCE9PWxlbmd0aCl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEFycmF5ICR7c3BlY2ltZW59IC0gTXVzdCBiZSBhcyBsb25nIGFzIGNvcHlBcnJheSBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbnJldHVybiBwYXR0LmV2ZXJ5KChwLGkpPT5jaGVja01hdGNoZXMoc3BlY2ltZW5baV0scCxjaGVjayxpKSk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weVJlY29yZCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5UmVjb3JkIHRvIG1hdGNoIGEgY29weVJlY29yZCBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3Qgc3BlY2ltZW5OYW1lcz1yZWNvcmROYW1lcyhzcGVjaW1lbik7XG5jb25zdCBwYXR0TmFtZXM9cmVjb3JkTmFtZXMocGF0dCk7XG5jb25zdCBtaXNzaW5nPWxpc3REaWZmZXJlbmNlKHBhdHROYW1lcyxzcGVjaW1lbk5hbWVzKTtcbmlmKG1pc3NpbmcubGVuZ3RoPj0xKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGhhdmUgbWlzc2luZyBwcm9wZXJ0aWVzICR7cShtaXNzaW5nKX1gKTtcblxuIH1cbmNvbnN0IHVuZXhwZWN0ZWQ9bGlzdERpZmZlcmVuY2Uoc3BlY2ltZW5OYW1lcyxwYXR0TmFtZXMpO1xuaWYodW5leHBlY3RlZC5sZW5ndGg+PTEpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3Qgbm90IGhhdmUgdW5leHBlY3RlZCBwcm9wZXJ0aWVzOiAke3EoXG51bmV4cGVjdGVkKVxuIH1gKTtcblxuIH1cbmNvbnN0IHNwZWNpbWVuVmFsdWVzPXJlY29yZFZhbHVlcyhzcGVjaW1lbixzcGVjaW1lbk5hbWVzKTtcbmNvbnN0IHBhdHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHBhdHQscGF0dE5hbWVzKTtcbnJldHVybiBwYXR0TmFtZXMuZXZlcnkoKGxhYmVsLGkpPT5cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lblZhbHVlc1tpXSxwYXR0VmFsdWVzW2ldLGNoZWNrLGxhYmVsKSk7XG5cbiB9XG5jYXNlJ2NvcHlNYXAnOntcbmlmKGlzS2V5KHBhdHQpKXtcbi8vXG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHBhdHQsY2hlY2spO1xuIH1cbmlmKHNwZWNpbWVuS2luZCE9PSdjb3B5TWFwJyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBhIGNvcHlNYXAgdG8gbWF0Y2ggYSBjb3B5TWFwIHBhdHRlcm46ICR7cShcbnBhdHQpXG4gfWApO1xuXG4gfVxuLy9cbmNvbnN0IHBhdHRLZXlTZXQ9Y29weU1hcEtleVNldChwYXR0KTtcbmNvbnN0IHNwZWNpbWVuS2V5U2V0PWNvcHlNYXBLZXlTZXQoc3BlY2ltZW4pO1xuaWYoIWNoZWNrTWF0Y2hlcyhzcGVjaW1lbktleVNldCxwYXR0S2V5U2V0LGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbi8vXG4vL1xuY29uc3QgcGF0dFZhbHVlcz1bXTtcbmNvbnN0IHNwZWNpbWVuVmFsdWVzPVtdO1xuY29uc3QgZW50cnlQYWlycz1nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhcbnBhdHQsXG5zcGVjaW1lbixcbmdldENvcHlNYXBFbnRyeUFycmF5LFxudW5kZWZpbmVkKTtcblxuZm9yKGNvbnN0W19rZXkscGF0dFZhbHVlLHNwZWNpbWVuVmFsdWVdb2YgZW50cnlQYWlycyl7XG5wYXR0VmFsdWVzLnB1c2gocGF0dFZhbHVlKTtcbnNwZWNpbWVuVmFsdWVzLnB1c2goc3BlY2ltZW5WYWx1ZSk7XG4gfVxucmV0dXJuIGNoZWNrTWF0Y2hlcyhoYXJkZW4oc3BlY2ltZW5WYWx1ZXMpLGhhcmRlbihwYXR0VmFsdWVzKSxjaGVjayk7XG4gfVxuZGVmYXVsdDp7XG5jb25zdCBtYXRjaEhlbHBlcj1tYXliZU1hdGNoSGVscGVyKHBhdHRlcm5LaW5kKTtcbmlmKG1hdGNoSGVscGVyKXtcbnJldHVybiBtYXRjaEhlbHBlci5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dC5wYXlsb2FkLGNoZWNrKTtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogc2hvdWxkIGhhdmUgcmVjb2duaXplZCAke3EocGF0dGVybktpbmQpfSBgO1xuIH19XG5cbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IG1hdGNoZXM9KHNwZWNpbWVuLHBhdHQpPT5cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbXVzdE1hdGNoPShzcGVjaW1lbixwYXR0LGxhYmVsPXVuZGVmaW5lZCk9PntcbmxldCBpbm5lckVycm9yO1xudHJ5e1xuaWYoY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsaWRlbnRDaGVja2VyLHVuZGVmaW5lZCkpe1xucmV0dXJuO1xuIH1cbiB9Y2F0Y2goZXIpe1xuaW5uZXJFcnJvcj1lcjtcbiB9XG4vL1xuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsYXNzZXJ0Q2hlY2tlcixsYWJlbCk7XG5jb25zdCBvdXRlckVycm9yPW1ha2VFcnJvcihcblggYGludGVybmFsOiAke2xhYmVsfTogaW5jb25zaXN0ZW50IHBhdHRlcm4gbWF0Y2g6ICR7cShwYXR0KX1gKTtcblxuaWYoaW5uZXJFcnJvciE9PXVuZGVmaW5lZCl7XG5hbm5vdGF0ZUVycm9yKG91dGVyRXJyb3IsWCBgY2F1c2VkIGJ5ICR7aW5uZXJFcnJvcn1gKTtcbiB9XG50aHJvdyBvdXRlckVycm9yO1xuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0UmFua0NvdmVyPShwYXR0LGVuY29kZVBhc3NhYmxlKT0+e1xuaWYoaXNLZXkocGF0dCkpe1xuY29uc3QgZW5jb2RlZD1lbmNvZGVQYXNzYWJsZShwYXR0KTtcbmlmKGVuY29kZWQhPT11bmRlZmluZWQpe1xucmV0dXJuW2VuY29kZWQsIGAke2VuY29kZWR9fmBdO1xuIH1cbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocGF0dCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyZWFrO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdCB0YWc9Z2V0VGFnKHBhdHQpO1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcih0YWcpO1xuaWYobWF0Y2hIZWxwZXIpe1xuLy9cbi8vXG5yZXR1cm4gbWF0Y2hIZWxwZXIuZ2V0UmFua0NvdmVyKHBhdHQucGF5bG9hZCxlbmNvZGVQYXNzYWJsZSk7XG4gfVxuc3dpdGNoKHRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG5icmVhazsvL1xuIH19XG5cbmJyZWFrOy8vXG4gfVxuZGVmYXVsdDp7XG5icmVhazsvL1xuIH19XG5cbnJldHVybiBnZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGUpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGFycmF5RXZlcnlNYXRjaFBhdHRlcm49KGFycmF5LHBhdHQsY2hlY2ssbGFiZWxQcmVmaXg9JycpPT57XG5pZihpc0tpbmQocGF0dCwnbWF0Y2g6YW55Jykpe1xuLy9cbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBhcnJheS5ldmVyeSgoZWwsaSk9PlxuY2hlY2tNYXRjaGVzKGVsLHBhdHQsY2hlY2ssIGAke2xhYmVsUHJlZml4fVske2l9XWApKTtcblxuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFueUhlbHBlcj1GYXIoJ21hdGNoOmFueSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooX3NwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxfY2hlY2spPT50cnVlLFxuXG5jaGVja0lzV2VsbEZvcm1lZDoobWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbm1hdGNoZXJQYXlsb2FkPT09dW5kZWZpbmVkfHxcbmNoZWNrKGZhbHNlLFggYG1hdGNoOmFueSBwYXlsb2FkOiAke21hdGNoZXJQYXlsb2FkfSAtIE11c3QgYmUgdW5kZWZpbmVkYCksXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJycsJ3snXX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFuZEhlbHBlcj1GYXIoJ21hdGNoOmFuZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scGF0dHMsY2hlY2spPT57XG5yZXR1cm4gcGF0dHMuZXZlcnkoKHBhdHQpPT5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dCxjaGVjaykpO1xuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkUGF0dHMsY2hlY2spPT57XG5jb25zdCBjaGVja0l0PShwYXR0KT0+Y2hlY2tQYXR0ZXJuKHBhdHQsY2hlY2spO1xucmV0dXJuKFxuKHBhc3NTdHlsZU9mKGFsbGVnZWRQYXR0cyk9PT0nY29weUFycmF5J3x8XG5jaGVjayhmYWxzZSxYIGBOZWVkcyBhcnJheSBvZiBzdWItcGF0dGVybnM6ICR7cShhbGxlZ2VkUGF0dHMpfWApKSYmXG5hbGxlZ2VkUGF0dHMuZXZlcnkoY2hlY2tJdCkpO1xuXG4gfSxcblxuZ2V0UmFua0NvdmVyOihwYXR0cyxlbmNvZGVQYXNzYWJsZSk9PlxuaW50ZXJzZWN0UmFua0NvdmVycyhcbmNvbXBhcmVSYW5rLFxucGF0dHMubWFwKChwKT0+Z2V0UmFua0NvdmVyKHAsZW5jb2RlUGFzc2FibGUpKSl9KTtcblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaE9ySGVscGVyPUZhcignbWF0Y2g6b3IgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHRzLGNoZWNrKT0+e1xuY29uc3R7bGVuZ3RofT1wYXR0cztcbmlmKGxlbmd0aD09PTApe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIG5vIHBhdHRlcm4gZGlzanVuY3RzIHRvIG1hdGNoOiAke3EocGF0dHMpfWApO1xuXG4gfVxuaWYoXG5wYXR0cy5sZW5ndGg9PT0yJiZcbiFtYXRjaGVzKHNwZWNpbWVuLHBhdHRzWzBdKSYmXG5pc0tpbmQocGF0dHNbMF0sJ21hdGNoOmtpbmQnKSYmXG5wYXR0c1swXS5wYXlsb2FkPT09J3VuZGVmaW5lZCcpXG57XG4vL1xuLy9cbnJldHVybiBjaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dHNbMV0sY2hlY2spO1xuIH1cbmlmKHBhdHRzLnNvbWUoKHBhdHQpPT5tYXRjaGVzKHNwZWNpbWVuLHBhdHQpKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IG1hdGNoIG9uZSBvZiAke3EocGF0dHMpfWApO1xuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOm1hdGNoQW5kSGVscGVyLmNoZWNrSXNXZWxsRm9ybWVkLFxuXG5nZXRSYW5rQ292ZXI6KHBhdHRzLGVuY29kZVBhc3NhYmxlKT0+XG51bmlvblJhbmtDb3ZlcnMoXG5jb21wYXJlUmFuayxcbnBhdHRzLm1hcCgocCk9PmdldFJhbmtDb3ZlcihwLGVuY29kZVBhc3NhYmxlKSkpfSk7XG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hOb3RIZWxwZXI9RmFyKCdtYXRjaDpub3QgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHQsY2hlY2spPT57XG5pZihtYXRjaGVzKHNwZWNpbWVuLHBhdHQpKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGZhaWwgbmVnYXRlZCBwYXR0ZXJuOiAke3EocGF0dCl9YCk7XG5cbiB9ZWxzZXtcbnJldHVybiB0cnVlO1xuIH1cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja1BhdHRlcm4sXG5cbmdldFJhbmtDb3ZlcjooX3BhdHQsX2VuY29kZVBhc3NhYmxlKT0+WycnLCd7J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTY2FsYXJIZWxwZXI9RmFyKCdtYXRjaDpzY2FsYXIgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tTY2FsYXJLZXkoc3BlY2ltZW4sY2hlY2spLFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFueUhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlsnYScsJ3p+J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hLZXlIZWxwZXI9RmFyKCdtYXRjaDprZXkgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tLZXkoc3BlY2ltZW4sY2hlY2spLFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFueUhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlsnYScsJ3p+J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hQYXR0ZXJuSGVscGVyPUZhcignbWF0Y2g6cGF0dGVybiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sX21hdGNoZXJQYXlsb2FkLGNoZWNrKT0+XG5jaGVja1BhdHRlcm4oc3BlY2ltZW4sY2hlY2spLFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFueUhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlsnYScsJ3p+J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hLaW5kSGVscGVyPUZhcignbWF0Y2g6a2luZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczpjaGVja0tpbmQsXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkS2V5S2luZCxjaGVjayk9PlxudHlwZW9mIGFsbGVnZWRLZXlLaW5kPT09J3N0cmluZyd8fFxuY2hlY2soXG5mYWxzZSxcblggYG1hdGNoOmtpbmQ6IHBheWxvYWQ6ICR7YWxsZWdlZEtleUtpbmR9IC0gQSBraW5kIG5hbWUgbXVzdCBiZSBhIHN0cmluZ2ApLFxuXG5cbmdldFJhbmtDb3Zlcjooa2luZCxfZW5jb2RlUGFzc2FibGUpPT57XG5sZXQgc3R5bGU7XG5zd2l0Y2goa2luZCl7XG5jYXNlJ2NvcHlTZXQnOlxuY2FzZSdjb3B5TWFwJzp7XG5zdHlsZT0ndGFnZ2VkJztcbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuc3R5bGU9a2luZDtcbmJyZWFrO1xuIH19XG5cbnJldHVybiBnZXRQYXNzU3R5bGVDb3ZlcihzdHlsZSk7XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFRhZ2dlZEhlbHBlcj1GYXIoJ21hdGNoOnRhZ2dlZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW3RhZ1BhdHQscGF5bG9hZFBhdHRdLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2Yoc3BlY2ltZW4pIT09J3RhZ2dlZCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFeHBlY3RlZCB0YWdnZWQgb2JqZWN0LCBub3QgJHtxKFxucGFzc1N0eWxlT2Yoc3BlY2ltZW4pKVxuIH06ICR7c3BlY2ltZW59YCk7XG5cbiB9XG5yZXR1cm4oXG5jaGVja01hdGNoZXMoZ2V0VGFnKHNwZWNpbWVuKSx0YWdQYXR0LGNoZWNrLCd0YWcnKSYmXG5jaGVja01hdGNoZXMoc3BlY2ltZW4ucGF5bG9hZCxwYXlsb2FkUGF0dCxjaGVjaywncGF5bG9hZCcpKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja01hdGNoZXMoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDp0YWdnZWQgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX2tpbmQsX2VuY29kZVBhc3NhYmxlKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQmlnaW50SGVscGVyPUZhcignbWF0Y2g6YmlnaW50IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtkZWNpbWFsRGlnaXRzTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2JpZ2ludCcsY2hlY2spJiZcbmNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0KHNwZWNpbWVuLGRlY2ltYWxEaWdpdHNMaW1pdCxjaGVjaykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpiaWdpbnQgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdiaWdpbnQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaE5hdEhlbHBlcj1GYXIoJ21hdGNoOm5hdCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7ZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdiaWdpbnQnLGNoZWNrKSYmXG5jaGVjayhcbi8qICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuPj0wbixcblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBub24tbmVnYXRpdmVgKSYmXG5cbmNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0KHNwZWNpbWVuLGRlY2ltYWxEaWdpdHNMaW1pdCxjaGVjaykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpuYXQgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbi8vXG5nZXRQYXNzU3R5bGVDb3ZlcignYmlnaW50Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTdHJpbmdIZWxwZXI9RmFyKCdtYXRjaDpzdHJpbmcgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e3N0cmluZ0xlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xuLy9cbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnc3RyaW5nJyxjaGVjaykmJihcbi8vXG4vKiAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5sZW5ndGg8PXN0cmluZ0xlbmd0aExpbWl0fHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBzdHJpbmcgJHtzcGVjaW1lbn0gbXVzdCBub3QgYmUgYmlnZ2VyIHRoYW4gJHtzdHJpbmdMZW5ndGhMaW1pdH1gKSkpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtdKSxcbmNoZWNrLFxuJ21hdGNoOnN0cmluZyBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ3N0cmluZycpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3ltYm9sSGVscGVyPUZhcignbWF0Y2g6c3ltYm9sIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtzeW1ib2xOYW1lTGVuZ3RoTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdzeW1ib2wnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3Qgc3ltYm9sTmFtZT1uYW1lRm9yUGFzc2FibGVTeW1ib2woc3BlY2ltZW4pO1xuXG5pZih0eXBlb2Ygc3ltYm9sTmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludGVybmFsOiBQYXNzYWJsZSBzeW1ib2wgJHtzcGVjaW1lbn0gbXVzdCBoYXZlIGEgcGFzc2FibGUgbmFtZWA7XG4gfVxucmV0dXJuIGNoZWNrKFxuc3ltYm9sTmFtZS5sZW5ndGg8PXN5bWJvbE5hbWVMZW5ndGhMaW1pdCxcblggYFN5bWJvbCBuYW1lICR7cShcbnN5bWJvbE5hbWUpXG4gfSBtdXN0IG5vdCBiZSBiaWdnZXIgdGhhbiAke3N5bWJvbE5hbWVMZW5ndGhMaW1pdH1gKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6c3ltYm9sIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3Zlcignc3ltYm9sJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hSZW1vdGFibGVIZWxwZXI9RmFyKCdtYXRjaDpyZW1vdGFibGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJlbW90YWJsZURlc2MsY2hlY2spPT57XG5pZihpc0tpbmQoc3BlY2ltZW4sJ3JlbW90YWJsZScpKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNoZWNrPT09aWRlbnRDaGVja2VyKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtsYWJlbH09cmVtb3RhYmxlRGVzYztcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5jb25zdCBraW5kRGV0YWlscz1cbnBhc3NTdHlsZSE9PSd0YWdnZWQnP1xuLy9cbmIocGFzc1N0eWxlKTpcbi8vXG4vL1xucShnZXRUYWcoc3BlY2ltZW4pKTtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuLy9cbi8vXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSByZW1vdGFibGUgJHtiKGxhYmVsKX0sIG5vdCAke2tpbmREZXRhaWxzfWApO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KGFsbGVnZWRSZW1vdGFibGVEZXNjLGNoZWNrKT0+XG5jaGVja01hdGNoZXMoXG5hbGxlZ2VkUmVtb3RhYmxlRGVzYyxcbmhhcmRlbih7bGFiZWw6TU0uc3RyaW5nKCl9KSxcbmNoZWNrLFxuJ21hdGNoOnJlbW90YWJsZSBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfcmVtb3RhYmxlRGVzYyxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdyZW1vdGFibGUnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaExURUhlbHBlcj1GYXIoJ21hdGNoOmx0ZSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scmlnaHRPcGVyYW5kLGNoZWNrKT0+XG5rZXlMVEUoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPD0gJHtyaWdodE9wZXJhbmR9YCksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrS2V5LFxuXG5nZXRSYW5rQ292ZXI6KHJpZ2h0T3BlcmFuZCxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihyaWdodE9wZXJhbmQpO1xuLy9cbi8vXG4vL1xubGV0W2xlZnRCb3VuZCxyaWdodEJvdW5kXT1nZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGUpO1xuY29uc3QgbmV3UmlnaHRCb3VuZD0gYCR7ZW5jb2RlUGFzc2FibGUocmlnaHRPcGVyYW5kKX1+YDtcbmlmKG5ld1JpZ2h0Qm91bmQhPT11bmRlZmluZWQpe1xucmlnaHRCb3VuZD1uZXdSaWdodEJvdW5kO1xuIH1cbnJldHVybltsZWZ0Qm91bmQscmlnaHRCb3VuZF07XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaExUSGVscGVyPUZhcignbWF0Y2g6bHQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5TFQoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPCAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjptYXRjaExURUhlbHBlci5nZXRSYW5rQ292ZXJ9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hHVEVIZWxwZXI9RmFyKCdtYXRjaDpndGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5R1RFKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlID49ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOihyaWdodE9wZXJhbmQsZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmlnaHRPcGVyYW5kKTtcbi8vXG4vL1xuLy9cbmxldFtsZWZ0Qm91bmQscmlnaHRCb3VuZF09Z2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbmNvbnN0IG5ld0xlZnRCb3VuZD1lbmNvZGVQYXNzYWJsZShyaWdodE9wZXJhbmQpO1xuaWYobmV3TGVmdEJvdW5kIT09dW5kZWZpbmVkKXtcbmxlZnRCb3VuZD1uZXdMZWZ0Qm91bmQ7XG4gfVxucmV0dXJuW2xlZnRCb3VuZCxyaWdodEJvdW5kXTtcbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoR1RIZWxwZXI9RmFyKCdtYXRjaDpndCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scmlnaHRPcGVyYW5kLGNoZWNrKT0+XG5rZXlHVChzcGVjaW1lbixyaWdodE9wZXJhbmQpfHxcbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSA+ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOm1hdGNoR1RFSGVscGVyLmdldFJhbmtDb3Zlcn0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFJlY29yZE9mSGVscGVyPUZhcignbWF0Y2g6cmVjb3JkT2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5ba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sXG5jaGVjayk9Plxue1xuY29uc3R7bnVtUHJvcGVydGllc0xpbWl0LHByb3BlcnR5TmFtZUxlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5UmVjb3JkJyxjaGVjaykmJlxuY2hlY2soXG5vd25LZXlzKHNwZWNpbWVuKS5sZW5ndGg8PW51bVByb3BlcnRpZXNMaW1pdCxcblggYE11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICR7cShcbm51bVByb3BlcnRpZXNMaW1pdClcbiB9IHByb3BlcnRpZXM6ICR7c3BlY2ltZW59YCkmJlxuXG5lbnRyaWVzKHNwZWNpbWVuKS5ldmVyeShcbihba2V5LHZhbHVlXSk9PlxuYXBwbHlMYWJlbGluZ0Vycm9yKFxuY2hlY2ssXG5bXG5rZXkubGVuZ3RoPD1wcm9wZXJ0eU5hbWVMZW5ndGhMaW1pdCxcblggYFByb3BlcnR5IG5hbWUgbXVzdCBub3QgYmUgbG9uZ2VyIHRoYW4gJHtxKFxucHJvcGVydHlOYW1lTGVuZ3RoTGltaXQpXG4gfWBdLFxuXG5rZXkpJiZcblxuY2hlY2tNYXRjaGVzKFxuaGFyZGVuKFtrZXksdmFsdWVdKSxcbmhhcmRlbihba2V5UGF0dCx2YWx1ZVBhdHRdKSxcbmNoZWNrLFxua2V5KSkpO1xuXG5cblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKSxNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOnJlY29yZE9mIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9lbnRyeVBhdHQpPT5nZXRQYXNzU3R5bGVDb3ZlcignY29weVJlY29yZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQXJyYXlPZkhlbHBlcj1GYXIoJ21hdGNoOmFycmF5T2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtzdWJQYXR0LGxpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7YXJyYXlMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbi8vXG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlBcnJheScsY2hlY2spJiYoXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLmxlbmd0aDw9YXJyYXlMZW5ndGhMaW1pdHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgQXJyYXkgbGVuZ3RoICR7c3BlY2ltZW4ubGVuZ3RofSBtdXN0IGJlIDw9IGxpbWl0ICR7YXJyYXlMZW5ndGhMaW1pdH1gKSkmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKHNwZWNpbWVuLHN1YlBhdHQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6YXJyYXlPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcignY29weUFycmF5Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTZXRPZkhlbHBlcj1GYXIoJ21hdGNoOnNldE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixba2V5UGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e251bVNldEVsZW1lbnRzTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlTZXQnLGNoZWNrKSYmXG5jaGVjayhcbi8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4ucGF5bG9hZC5sZW5ndGg8bnVtU2V0RWxlbWVudHNMaW1pdCxcblggYFNldCBtdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke3EobnVtU2V0RWxlbWVudHNMaW1pdCl9IGVsZW1lbnRzOiAke1xuc3BlY2ltZW4ucGF5bG9hZC5sZW5ndGhcbiB9YCkmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKHNwZWNpbWVuLnBheWxvYWQsa2V5UGF0dCxjaGVjaywnc2V0IGVsZW1lbnRzJykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpzZXRPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcigndGFnZ2VkJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hCYWdPZkhlbHBlcj1GYXIoJ21hdGNoOmJhZ09mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsY291bnRQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQsZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QmFnJyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQubGVuZ3RoPD1cbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQsXG5YIGBCYWcgbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtxKFxubnVtVW5pcXVlQmFnRWxlbWVudHNMaW1pdClcbiB9IHVuaXF1ZSBlbGVtZW50czogJHtzcGVjaW1lbn1gKSYmXG5cbnNwZWNpbWVuLnBheWxvYWQuZXZlcnkoXG4oW2tleSxjb3VudF0saSk9PlxuY2hlY2tNYXRjaGVzKGtleSxrZXlQYXR0LGNoZWNrLCBgYmFnIGtleXNbJHtpfV1gKSYmXG5hcHBseUxhYmVsaW5nRXJyb3IoXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdCxcbltjb3VudCxkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2tdLFxuIGBiYWcgY291bnRzWyR7aX1dYCkmJlxuXG5jaGVja01hdGNoZXMoY291bnQsY291bnRQYXR0LGNoZWNrLCBgYmFnIGNvdW50c1ske2l9XWApKSk7XG5cblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKSxNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOmJhZ09mIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KCk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaE1hcE9mSGVscGVyPUZhcignbWF0Y2g6bWFwT2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5ba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sXG5jaGVjayk9Plxue1xuY29uc3R7bnVtTWFwRW50cmllc0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5TWFwJyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQua2V5cy5sZW5ndGg8PVxubnVtTWFwRW50cmllc0xpbWl0LFxuWCBgQ29weU1hcCBtdXN0IGhhdmUgbm8gbW9yZSB0aGFuICR7cShcbm51bU1hcEVudHJpZXNMaW1pdClcbiB9IGVudHJpZXM6ICR7c3BlY2ltZW59YCkmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKFxuc3BlY2ltZW4ucGF5bG9hZC5rZXlzLFxua2V5UGF0dCxcbmNoZWNrLFxuJ21hcCBrZXlzJykmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKFxuc3BlY2ltZW4ucGF5bG9hZC52YWx1ZXMsXG52YWx1ZVBhdHQsXG5jaGVjayxcbidtYXAgdmFsdWVzJykpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDptYXBPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfZW50cnlQYXR0KT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgc3BsaXRBcnJheVBhcnRzPShzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KT0+e1xuY29uc3QgbnVtUmVxdWlyZWQ9cmVxdWlyZWRQYXR0Lmxlbmd0aDtcbmNvbnN0IG51bU9wdGlvbmFsPW9wdGlvbmFsUGF0dC5sZW5ndGg7XG5jb25zdCByZXF1aXJlZFNwZWNpbWVuPXNwZWNpbWVuLnNsaWNlKDAsbnVtUmVxdWlyZWQpO1xuY29uc3Qgb3B0aW9uYWxTcGVjaW1lbj1zcGVjaW1lbi5zbGljZShcbm51bVJlcXVpcmVkLFxubnVtUmVxdWlyZWQrbnVtT3B0aW9uYWwpO1xuXG5jb25zdCByZXN0U3BlY2ltZW49c3BlY2ltZW4uc2xpY2UobnVtUmVxdWlyZWQrbnVtT3B0aW9uYWwpO1xucmV0dXJuIGhhcmRlbih7cmVxdWlyZWRTcGVjaW1lbixvcHRpb25hbFNwZWNpbWVuLHJlc3RTcGVjaW1lbn0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGFwdEFycmF5UGF0dGVybj0ob3B0aW9uYWxQYXR0LGxlbmd0aCk9PlxuaGFyZGVuKG9wdGlvbmFsUGF0dC5zbGljZSgwLGxlbmd0aCkubWFwKChwYXR0KT0+TU0ub3B0KHBhdHQpKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFNwbGl0QXJyYXlIZWxwZXI9RmFyKCdtYXRjaDpzcGxpdEFycmF5IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9W10scmVzdFBhdHQ9TU0uYW55KCldLFxuY2hlY2spPT5cbntcbmlmKCFjaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlBcnJheScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtyZXF1aXJlZFNwZWNpbWVuLG9wdGlvbmFsU3BlY2ltZW4scmVzdFNwZWNpbWVufT1cbnNwbGl0QXJyYXlQYXJ0cyhzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KTtcbmNvbnN0IHBhcnRpYWxQYXR0PWFkYXB0QXJyYXlQYXR0ZXJuKFxub3B0aW9uYWxQYXR0LFxub3B0aW9uYWxTcGVjaW1lbi5sZW5ndGgpO1xuXG5sZXQgYXJnTnVtPTA7XG5yZXR1cm4oXG4ocmVxdWlyZWRTcGVjaW1lbi5sZW5ndGg9PT1yZXF1aXJlZFBhdHQubGVuZ3RofHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBFeHBlY3RlZCBhdCBsZWFzdCAke3EoXG5yZXF1aXJlZFBhdHQubGVuZ3RoKVxuIH0gYXJndW1lbnRzOiAke3NwZWNpbWVufWApKSYmXG5cbnJlcXVpcmVkUGF0dC5ldmVyeSgocCxpKT0+XG4vL1xuY2hlY2tNYXRjaGVzKHJlcXVpcmVkU3BlY2ltZW5baV0scCxjaGVjaywgYGFyZyAke2FyZ051bSsrfWApKSYmXG5cbnBhcnRpYWxQYXR0LmV2ZXJ5KChwLGkpPT5cbi8vXG5jaGVja01hdGNoZXMob3B0aW9uYWxTcGVjaW1lbltpXSxwLGNoZWNrLCBgYXJnICR7YXJnTnVtKyt9P2ApKSYmXG5cbmNoZWNrTWF0Y2hlcyhyZXN0U3BlY2ltZW4scmVzdFBhdHQsY2hlY2ssJy4uLnJlc3QnKSk7XG5cbiB9LFxuXG4vKlxuXG5cbiAgICAgKi9cbmNoZWNrSXNXZWxsRm9ybWVkOihzcGxpdEFycmF5LGNoZWNrKT0+e1xuaWYoXG5wYXNzU3R5bGVPZihzcGxpdEFycmF5KT09PSdjb3B5QXJyYXknJiYoXG5zcGxpdEFycmF5Lmxlbmd0aD49MXx8c3BsaXRBcnJheS5sZW5ndGg8PTMpKVxue1xuY29uc3RbcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD11bmRlZmluZWQscmVzdFBhdHQ9dW5kZWZpbmVkXT1cbnNwbGl0QXJyYXk7XG5pZihcbmlzUGF0dGVybihyZXF1aXJlZFBhdHQpJiZcbnBhc3NTdHlsZU9mKHJlcXVpcmVkUGF0dCk9PT0nY29weUFycmF5JyYmKFxub3B0aW9uYWxQYXR0PT09dW5kZWZpbmVkfHxcbmlzUGF0dGVybihvcHRpb25hbFBhdHQpJiZcbnBhc3NTdHlsZU9mKG9wdGlvbmFsUGF0dCk9PT0nY29weUFycmF5JykmJihcbnJlc3RQYXR0PT09dW5kZWZpbmVkfHxpc1BhdHRlcm4ocmVzdFBhdHQpKSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYE11c3QgYmUgYW4gYXJyYXkgb2YgYSByZXF1aXJlZFBhdHQgYXJyYXksIGFuIG9wdGlvbmFsIG9wdGlvbmFsUGF0dCBhcnJheSwgYW5kIGFuIG9wdGlvbmFsIHJlc3RQYXR0OiAke3EoXG5zcGxpdEFycmF5KVxuIH1gKTtcblxuIH0sXG5cbmdldFJhbmtDb3ZlcjooW1xuX3JlcXVpcmVkUGF0dCxcbl9vcHRpb25hbFBhdHQ9dW5kZWZpbmVkLFxuX3Jlc3RQYXR0PXVuZGVmaW5lZF0pPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdjb3B5QXJyYXknKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHNwbGl0UmVjb3JkUGFydHM9KHNwZWNpbWVuLHJlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQpPT57XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlcXVpcmVkRW50cmllcz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBvcHRpb25hbEVudHJpZXM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdEVudHJpZXM9W107XG5mb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiBlbnRyaWVzKHNwZWNpbWVuKSl7XG5pZihoYXNPd25Qcm9wZXJ0eU9mKHJlcXVpcmVkUGF0dCxuYW1lKSl7XG5yZXF1aXJlZEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1lbHNlIGlmKGhhc093blByb3BlcnR5T2Yob3B0aW9uYWxQYXR0LG5hbWUpKXtcbm9wdGlvbmFsRW50cmllcy5wdXNoKFtuYW1lLHZhbHVlXSk7XG4gfWVsc2V7XG5yZXN0RW50cmllcy5wdXNoKFtuYW1lLHZhbHVlXSk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe1xucmVxdWlyZWRTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhyZXF1aXJlZEVudHJpZXMpLFxub3B0aW9uYWxTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhvcHRpb25hbEVudHJpZXMpLFxucmVzdFNwZWNpbWVuOmZyb21VbmlxdWVFbnRyaWVzKHJlc3RFbnRyaWVzKX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGFkYXB0UmVjb3JkUGF0dGVybj0ob3B0aW9uYWxQYXR0LG5hbWVzKT0+XG5mcm9tVW5pcXVlRW50cmllcyhuYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxNTS5vcHQob3B0aW9uYWxQYXR0W25hbWVdKV0pKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3BsaXRSZWNvcmRIZWxwZXI9RmFyKCdtYXRjaDpzcGxpdFJlY29yZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0PXt9LHJlc3RQYXR0PU1NLmFueSgpXSxcbmNoZWNrKT0+XG57XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5UmVjb3JkJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0e3JlcXVpcmVkU3BlY2ltZW4sb3B0aW9uYWxTcGVjaW1lbixyZXN0U3BlY2ltZW59PVxuc3BsaXRSZWNvcmRQYXJ0cyhzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KTtcblxuY29uc3QgcGFydGlhbE5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhvcHRpb25hbFNwZWNpbWVuKTtcbmNvbnN0IHBhcnRpYWxQYXR0PWFkYXB0UmVjb3JkUGF0dGVybihvcHRpb25hbFBhdHQscGFydGlhbE5hbWVzKTtcbnJldHVybihcbmNoZWNrTWF0Y2hlcyhyZXF1aXJlZFNwZWNpbWVuLHJlcXVpcmVkUGF0dCxjaGVjaykmJlxucGFydGlhbE5hbWVzLmV2ZXJ5KChuYW1lKT0+XG5jaGVja01hdGNoZXMoXG5vcHRpb25hbFNwZWNpbWVuW25hbWVdLFxucGFydGlhbFBhdHRbbmFtZV0sXG5jaGVjayxcbiBgJHtuYW1lfT9gKSkmJlxuXG5cbmNoZWNrTWF0Y2hlcyhyZXN0U3BlY2ltZW4scmVzdFBhdHQsY2hlY2ssJy4uLnJlc3QnKSk7XG5cbiB9LFxuXG4vKlxuXG5cbiAgICAgKi9cbmNoZWNrSXNXZWxsRm9ybWVkOihzcGxpdEFycmF5LGNoZWNrKT0+e1xuaWYoXG5wYXNzU3R5bGVPZihzcGxpdEFycmF5KT09PSdjb3B5QXJyYXknJiYoXG5zcGxpdEFycmF5Lmxlbmd0aD49MXx8c3BsaXRBcnJheS5sZW5ndGg8PTMpKVxue1xuY29uc3RbcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD11bmRlZmluZWQscmVzdFBhdHQ9dW5kZWZpbmVkXT1cbnNwbGl0QXJyYXk7XG5pZihcbmlzUGF0dGVybihyZXF1aXJlZFBhdHQpJiZcbnBhc3NTdHlsZU9mKHJlcXVpcmVkUGF0dCk9PT0nY29weVJlY29yZCcmJihcbm9wdGlvbmFsUGF0dD09PXVuZGVmaW5lZHx8XG5pc1BhdHRlcm4ob3B0aW9uYWxQYXR0KSYmXG5wYXNzU3R5bGVPZihvcHRpb25hbFBhdHQpPT09J2NvcHlSZWNvcmQnKSYmKFxucmVzdFBhdHQ9PT11bmRlZmluZWR8fGlzUGF0dGVybihyZXN0UGF0dCkpKVxue1xucmV0dXJuIHRydWU7XG4gfVxuIH1cbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgTXVzdCBiZSBhbiBhcnJheSBvZiBhIHJlcXVpcmVkUGF0dCByZWNvcmQsIGFuIG9wdGlvbmFsIG9wdGlvbmFsUGF0dCByZWNvcmQsIGFuZCBhbiBvcHRpb25hbCByZXN0UGF0dDogJHtxKFxuc3BsaXRBcnJheSlcbiB9YCk7XG5cbiB9LFxuXG5nZXRSYW5rQ292ZXI6KFtcbnJlcXVpcmVkUGF0dCxcbl9vcHRpb25hbFBhdHQ9dW5kZWZpbmVkLFxuX3Jlc3RQYXR0PXVuZGVmaW5lZF0pPT5cbmdldFBhc3NTdHlsZUNvdmVyKHBhc3NTdHlsZU9mKHJlcXVpcmVkUGF0dCkpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBIZWxwZXJzQnlNYXRjaFRhZz1oYXJkZW4oe1xuJ21hdGNoOmFueSc6bWF0Y2hBbnlIZWxwZXIsXG4nbWF0Y2g6YW5kJzptYXRjaEFuZEhlbHBlcixcbidtYXRjaDpvcic6bWF0Y2hPckhlbHBlcixcbidtYXRjaDpub3QnOm1hdGNoTm90SGVscGVyLFxuXG4nbWF0Y2g6c2NhbGFyJzptYXRjaFNjYWxhckhlbHBlcixcbidtYXRjaDprZXknOm1hdGNoS2V5SGVscGVyLFxuJ21hdGNoOnBhdHRlcm4nOm1hdGNoUGF0dGVybkhlbHBlcixcbidtYXRjaDpraW5kJzptYXRjaEtpbmRIZWxwZXIsXG4nbWF0Y2g6dGFnZ2VkJzptYXRjaFRhZ2dlZEhlbHBlcixcbidtYXRjaDpiaWdpbnQnOm1hdGNoQmlnaW50SGVscGVyLFxuJ21hdGNoOm5hdCc6bWF0Y2hOYXRIZWxwZXIsXG4nbWF0Y2g6c3RyaW5nJzptYXRjaFN0cmluZ0hlbHBlcixcbidtYXRjaDpzeW1ib2wnOm1hdGNoU3ltYm9sSGVscGVyLFxuJ21hdGNoOnJlbW90YWJsZSc6bWF0Y2hSZW1vdGFibGVIZWxwZXIsXG5cbidtYXRjaDpsdCc6bWF0Y2hMVEhlbHBlcixcbidtYXRjaDpsdGUnOm1hdGNoTFRFSGVscGVyLFxuJ21hdGNoOmd0ZSc6bWF0Y2hHVEVIZWxwZXIsXG4nbWF0Y2g6Z3QnOm1hdGNoR1RIZWxwZXIsXG5cbidtYXRjaDphcnJheU9mJzptYXRjaEFycmF5T2ZIZWxwZXIsXG4nbWF0Y2g6cmVjb3JkT2YnOm1hdGNoUmVjb3JkT2ZIZWxwZXIsXG4nbWF0Y2g6c2V0T2YnOm1hdGNoU2V0T2ZIZWxwZXIsXG4nbWF0Y2g6YmFnT2YnOm1hdGNoQmFnT2ZIZWxwZXIsXG4nbWF0Y2g6bWFwT2YnOm1hdGNoTWFwT2ZIZWxwZXIsXG4nbWF0Y2g6c3BsaXRBcnJheSc6bWF0Y2hTcGxpdEFycmF5SGVscGVyLFxuJ21hdGNoOnNwbGl0UmVjb3JkJzptYXRjaFNwbGl0UmVjb3JkSGVscGVyfSk7XG5cblxuY29uc3QgbWFrZU1hdGNoZXI9KHRhZyxwYXlsb2FkKT0+e1xuY29uc3QgbWF0Y2hlcj1tYWtlVGFnZ2VkKHRhZyxwYXlsb2FkKTtcbmFzc2VydFBhdHRlcm4obWF0Y2hlcik7XG5yZXR1cm4gbWF0Y2hlcjtcbiB9O1xuXG5jb25zdCBtYWtlS2luZE1hdGNoZXI9KGtpbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6a2luZCcsa2luZCk7XG5cbmNvbnN0IEFueVNoYXBlPW1ha2VNYXRjaGVyKCdtYXRjaDphbnknLHVuZGVmaW5lZCk7XG5jb25zdCBTY2FsYXJTaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6c2NhbGFyJyx1bmRlZmluZWQpO1xuY29uc3QgS2V5U2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOmtleScsdW5kZWZpbmVkKTtcbmNvbnN0IFBhdHRlcm5TaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6cGF0dGVybicsdW5kZWZpbmVkKTtcbmNvbnN0IEJvb2xlYW5TaGFwZT1tYWtlS2luZE1hdGNoZXIoJ2Jvb2xlYW4nKTtcbmNvbnN0IE51bWJlclNoYXBlPW1ha2VLaW5kTWF0Y2hlcignbnVtYmVyJyk7XG5jb25zdCBCaWdJbnRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpiaWdpbnQnLFtdKTtcbmNvbnN0IE5hdFNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOm5hdCcsW10pO1xuY29uc3QgU3RyaW5nU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c3RyaW5nJyxbXSk7XG5jb25zdCBTeW1ib2xTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpzeW1ib2wnLFtdKTtcbmNvbnN0IFJlY29yZFNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOnJlY29yZE9mJyxbQW55U2hhcGUsQW55U2hhcGVdKTtcbmNvbnN0IEFycmF5U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YXJyYXlPZicsW0FueVNoYXBlXSk7XG5jb25zdCBTZXRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpzZXRPZicsW0FueVNoYXBlXSk7XG5jb25zdCBCYWdTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpiYWdPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBNYXBTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDptYXBPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBSZW1vdGFibGVTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ3JlbW90YWJsZScpO1xuY29uc3QgRXJyb3JTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ2Vycm9yJyk7XG5jb25zdCBQcm9taXNlU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdwcm9taXNlJyk7XG5jb25zdCBVbmRlZmluZWRTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ3VuZGVmaW5lZCcpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VMaW1pdHNNYXRjaGVyPSh0YWcscGF5bG9hZCk9PntcbmlmKHBheWxvYWRbcGF5bG9hZC5sZW5ndGgtMV09PT11bmRlZmluZWQpe1xucGF5bG9hZD1oYXJkZW4ocGF5bG9hZC5zbGljZSgwLHBheWxvYWQubGVuZ3RoLTEpKTtcbiB9XG5yZXR1cm4gbWFrZU1hdGNoZXIodGFnLHBheWxvYWQpO1xuIH07XG5cbmNvbnN0IG1ha2VSZW1vdGFibGVNYXRjaGVyPShsYWJlbD11bmRlZmluZWQpPT5cbmxhYmVsPT09dW5kZWZpbmVkP1xuUmVtb3RhYmxlU2hhcGU6XG5tYWtlTWF0Y2hlcignbWF0Y2g6cmVtb3RhYmxlJyxoYXJkZW4oe2xhYmVsfSkpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VTcGxpdFBheWxvYWQ9KFxuZW1wdHksXG5iYXNlLFxub3B0aW9uYWw9dW5kZWZpbmVkLFxucmVzdD11bmRlZmluZWQpPT5cbntcbmlmKHJlc3Qpe1xucmV0dXJuW2Jhc2Usb3B0aW9uYWx8fGVtcHR5LHJlc3RdO1xuIH1cbmlmKG9wdGlvbmFsKXtcbnJldHVybltiYXNlLG9wdGlvbmFsXTtcbiB9XG5yZXR1cm5bYmFzZV07XG4gfTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgTT1oYXJkZW4oe1xuYW55OigpPT5BbnlTaGFwZSxcbmFuZDooLi4ucGF0dHMpPT5tYWtlTWF0Y2hlcignbWF0Y2g6YW5kJyxwYXR0cyksXG5vcjooLi4ucGF0dHMpPT5tYWtlTWF0Y2hlcignbWF0Y2g6b3InLHBhdHRzKSxcbm5vdDooc3ViUGF0dCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpub3QnLHN1YlBhdHQpLFxuXG5zY2FsYXI6KCk9PlNjYWxhclNoYXBlLFxua2V5OigpPT5LZXlTaGFwZSxcbnBhdHRlcm46KCk9PlBhdHRlcm5TaGFwZSxcbmtpbmQ6bWFrZUtpbmRNYXRjaGVyLFxudGFnZ2VkOih0YWdQYXR0PU0uc3RyaW5nKCkscGF5bG9hZFBhdHQ9TS5hbnkoKSk9PlxubWFrZU1hdGNoZXIoJ21hdGNoOnRhZ2dlZCcsaGFyZGVuKFt0YWdQYXR0LHBheWxvYWRQYXR0XSkpLFxuYm9vbGVhbjooKT0+Qm9vbGVhblNoYXBlLFxubnVtYmVyOigpPT5OdW1iZXJTaGFwZSxcbmJpZ2ludDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpiaWdpbnQnLFtsaW1pdHNdKTpCaWdJbnRTaGFwZSxcbm5hdDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpuYXQnLFtsaW1pdHNdKTpOYXRTaGFwZSxcbnN0cmluZzoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpzdHJpbmcnLFtsaW1pdHNdKTpTdHJpbmdTaGFwZSxcbnN5bWJvbDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpzeW1ib2wnLFtsaW1pdHNdKTpTeW1ib2xTaGFwZSxcbnJlY29yZDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP00ucmVjb3JkT2YoTS5hbnkoKSxNLmFueSgpLGxpbWl0cyk6UmVjb3JkU2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYXJyYXk6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLmFycmF5T2YoTS5hbnkoKSxsaW1pdHMpOkFycmF5U2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5zZXQ6KGxpbWl0cz11bmRlZmluZWQpPT5saW1pdHM/TS5zZXRPZihNLmFueSgpLGxpbWl0cyk6U2V0U2hhcGUsXG5iYWc6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLmJhZ09mKE0uYW55KCksTS5hbnkoKSxsaW1pdHMpOkJhZ1NoYXBlLFxubWFwOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5tYXBPZihNLmFueSgpLE0uYW55KCksbGltaXRzKTpNYXBTaGFwZSxcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZW1vdGFibGU6bWFrZVJlbW90YWJsZU1hdGNoZXIsXG5lcnJvcjooKT0+RXJyb3JTaGFwZSxcbnByb21pc2U6KCk9PlByb21pc2VTaGFwZSxcbnVuZGVmaW5lZDooKT0+VW5kZWZpbmVkU2hhcGUsXG5udWxsOigpPT5udWxsLFxuXG5sdDoocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmx0JyxyaWdodE9wZXJhbmQpLFxubHRlOihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6bHRlJyxyaWdodE9wZXJhbmQpLFxuZXE6KGtleSk9PntcbmFzc2VydEtleShrZXkpO1xucmV0dXJuIGtleT09PXVuZGVmaW5lZD9NLnVuZGVmaW5lZCgpOmtleTtcbiB9LFxubmVxOihrZXkpPT5NLm5vdChNLmVxKGtleSkpLFxuZ3RlOihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6Z3RlJyxyaWdodE9wZXJhbmQpLFxuZ3Q6KHJpZ2h0T3BlcmFuZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpndCcscmlnaHRPcGVyYW5kKSxcblxucmVjb3JkT2Y6KGtleVBhdHQ9TS5hbnkoKSx2YWx1ZVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6cmVjb3JkT2YnLFtrZXlQYXR0LHZhbHVlUGF0dCxsaW1pdHNdKSxcbmFycmF5T2Y6KHN1YlBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YXJyYXlPZicsW3N1YlBhdHQsbGltaXRzXSksXG5zZXRPZjooa2V5UGF0dD1NLmFueSgpLGxpbWl0cz11bmRlZmluZWQpPT5cbm1ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpzZXRPZicsW2tleVBhdHQsbGltaXRzXSksXG5iYWdPZjooa2V5UGF0dD1NLmFueSgpLGNvdW50UGF0dD1NLmFueSgpLGxpbWl0cz11bmRlZmluZWQpPT5cbm1ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpiYWdPZicsW2tleVBhdHQsY291bnRQYXR0LGxpbWl0c10pLFxubWFwT2Y6KGtleVBhdHQ9TS5hbnkoKSx2YWx1ZVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6bWFwT2YnLFtrZXlQYXR0LHZhbHVlUGF0dCxsaW1pdHNdKSxcbnNwbGl0QXJyYXk6KGJhc2Usb3B0aW9uYWw9dW5kZWZpbmVkLHJlc3Q9dW5kZWZpbmVkKT0+XG5tYWtlTWF0Y2hlcihcbidtYXRjaDpzcGxpdEFycmF5Jyxcbm1ha2VTcGxpdFBheWxvYWQoW10sYmFzZSxvcHRpb25hbCxyZXN0KSksXG5cbnNwbGl0UmVjb3JkOihiYXNlLG9wdGlvbmFsPXVuZGVmaW5lZCxyZXN0PXVuZGVmaW5lZCk9PlxubWFrZU1hdGNoZXIoXG4nbWF0Y2g6c3BsaXRSZWNvcmQnLFxubWFrZVNwbGl0UGF5bG9hZCh7fSxiYXNlLG9wdGlvbmFsLHJlc3QpKSxcblxuc3BsaXQ6KGJhc2UscmVzdD11bmRlZmluZWQpPT57XG5pZihwYXNzU3R5bGVPZihoYXJkZW4oYmFzZSkpPT09J2NvcHlBcnJheScpe1xuLy9cbi8vXG5yZXR1cm4gTS5zcGxpdEFycmF5KGJhc2UscmVzdCYmW10scmVzdCk7XG4gfWVsc2V7XG5yZXR1cm4gTS5zcGxpdFJlY29yZChiYXNlLHJlc3QmJnt9LHJlc3QpO1xuIH1cbiB9LFxucGFydGlhbDooYmFzZSxyZXN0PXVuZGVmaW5lZCk9PntcbmlmKHBhc3NTdHlsZU9mKGhhcmRlbihiYXNlKSk9PT0nY29weUFycmF5Jyl7XG4vL1xuLy9cbnJldHVybiBNLnNwbGl0QXJyYXkoW10sYmFzZSxyZXN0KTtcbiB9ZWxzZXtcbnJldHVybiBNLnNwbGl0UmVjb3JkKHt9LGJhc2UscmVzdCk7XG4gfVxuIH0sXG5cbmVyZWY6KHQpPT5NLm9yKHQsTS5wcm9taXNlKCkpLFxub3B0Oih0KT0+TS5vcihNLnVuZGVmaW5lZCgpLHQpLFxuXG5pbnRlcmZhY2U6KGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLG9wdGlvbnMpPT5cbi8vXG5tYWtlSW50ZXJmYWNlR3VhcmQoaW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsb3B0aW9ucyksXG5jYWxsOiguLi5hcmdQYXR0ZXJucyk9PlxuLy9cbm1ha2VNZXRob2RHdWFyZE1ha2VyKCdzeW5jJyxhcmdQYXR0ZXJucyksXG5jYWxsV2hlbjooLi4uYXJnR3VhcmRzKT0+XG4vL1xubWFrZU1ldGhvZEd1YXJkTWFrZXIoJ2FzeW5jJyxhcmdHdWFyZHMpLFxuXG5hd2FpdDooYXJnUGF0dGVybik9PlxuLy9cbm1ha2VBd2FpdEFyZ0d1YXJkKGFyZ1BhdHRlcm4pLFxucmF3OigpPT5cbi8vXG5tYWtlUmF3R3VhcmQoKX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuY2hlY2tNYXRjaGVzLFxubWF0Y2hlcyxcbm11c3RNYXRjaCxcbmFzc2VydFBhdHRlcm4sXG5pc1BhdHRlcm4sXG5nZXRSYW5rQ292ZXIsXG5NLFxua2luZE9mfSk7XG5cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCAgICAgICB7XG5jaGVja01hdGNoZXMsXG5tYXRjaGVzLFxubXVzdE1hdGNoLFxuYXNzZXJ0UGF0dGVybixcbmlzUGF0dGVybixcbmdldFJhbmtDb3Zlcixcbk0sXG5raW5kT2Z9PVxubWFrZVBhdHRlcm5LaXQoKTskaM2PX29uY2UuY2hlY2tNYXRjaGVzKGNoZWNrTWF0Y2hlcyk7JGjNj19vbmNlLm1hdGNoZXMobWF0Y2hlcyk7JGjNj19vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpOyRozY9fb25jZS5hc3NlcnRQYXR0ZXJuKGFzc2VydFBhdHRlcm4pOyRozY9fb25jZS5pc1BhdHRlcm4oaXNQYXR0ZXJuKTskaM2PX29uY2UuZ2V0UmFua0NvdmVyKGdldFJhbmtDb3Zlcik7JGjNj19vbmNlLk0oTSk7JGjNj19vbmNlLmtpbmRPZihraW5kT2YpO1xuXG5NTT1NO1xuXG4vL1xuXG4vL1xuY29uc3QgQXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuYXJnR3VhcmQ6TS5wYXR0ZXJuKCl9KTtcblxuXG5jb25zdCAgICAgICAgQXdhaXRBcmdHdWFyZFNoYXBlPU0ua2luZCgnZ3VhcmQ6YXdhaXRBcmdHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5Bd2FpdEFyZ0d1YXJkU2hhcGUoQXdhaXRBcmdHdWFyZFNoYXBlKTtcbmNvbnN0ICAgICAgICBpc0F3YWl0QXJnR3VhcmQ9KHNwZWNpbWVuKT0+XG5tYXRjaGVzKHNwZWNpbWVuLEF3YWl0QXJnR3VhcmRTaGFwZSk7JGjNj19vbmNlLmlzQXdhaXRBcmdHdWFyZChpc0F3YWl0QXJnR3VhcmQpO1xuaGFyZGVuKGlzQXdhaXRBcmdHdWFyZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0QXdhaXRBcmdHdWFyZD0oc3BlY2ltZW4pPT57XG5tdXN0TWF0Y2goc3BlY2ltZW4sQXdhaXRBcmdHdWFyZFNoYXBlLCdhd2FpdEFyZ0d1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0QXdhaXRBcmdHdWFyZChhc3NlcnRBd2FpdEFyZ0d1YXJkKTtcbmhhcmRlbihhc3NlcnRBd2FpdEFyZ0d1YXJkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VBd2FpdEFyZ0d1YXJkPShhcmdQYXR0ZXJuKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnLHtcbmFyZ0d1YXJkOmFyZ1BhdHRlcm59KTtcblxuYXNzZXJ0QXdhaXRBcmdHdWFyZChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vL1xuXG5jb25zdCBSYXdHdWFyZFBheWxvYWRTaGFwZT1NLnJlY29yZCgpO1xuXG5jb25zdCAgICAgICAgUmF3R3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOnJhd0d1YXJkJyk7JGjNj19vbmNlLlJhd0d1YXJkU2hhcGUoUmF3R3VhcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBpc1Jhd0d1YXJkPShzcGVjaW1lbik9Pm1hdGNoZXMoc3BlY2ltZW4sUmF3R3VhcmRTaGFwZSk7JGjNj19vbmNlLmlzUmF3R3VhcmQoaXNSYXdHdWFyZCk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRSYXdHdWFyZD0oc3BlY2ltZW4pPT5cbm11c3RNYXRjaChzcGVjaW1lbixSYXdHdWFyZFNoYXBlLCdyYXdHdWFyZCcpO1xuXG4vKlxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0UmF3R3VhcmQoYXNzZXJ0UmF3R3VhcmQpO1xuY29uc3QgbWFrZVJhd0d1YXJkPSgpPT5tYWtlVGFnZ2VkKCdndWFyZDpyYXdHdWFyZCcse30pO1xuXG4vL1xuLy9cblxuY29uc3QgICAgICAgIFN5bmNWYWx1ZUd1YXJkU2hhcGU9TS5vcihSYXdHdWFyZFNoYXBlLE0ucGF0dGVybigpKTskaM2PX29uY2UuU3luY1ZhbHVlR3VhcmRTaGFwZShTeW5jVmFsdWVHdWFyZFNoYXBlKTtcblxuY29uc3QgICAgICAgIFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihTeW5jVmFsdWVHdWFyZFNoYXBlKTskaM2PX29uY2UuU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUoU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUpO1xuXG5jb25zdCBBcmdHdWFyZFNoYXBlPU0ub3IoUmF3R3VhcmRTaGFwZSxBd2FpdEFyZ0d1YXJkU2hhcGUsTS5wYXR0ZXJuKCkpO1xuY29uc3QgICAgICAgIEFyZ0d1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihBcmdHdWFyZFNoYXBlKTskaM2PX29uY2UuQXJnR3VhcmRMaXN0U2hhcGUoQXJnR3VhcmRMaXN0U2hhcGUpO1xuXG5jb25zdCBTeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmNhbGxLaW5kOidzeW5jJyxcbmFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCBBc3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonYXN5bmMnLFxuYXJnR3VhcmRzOkFyZ0d1YXJkTGlzdFNoYXBlLFxub3B0aW9uYWxBcmdHdWFyZHM6TS5vcHQoQXJnR3VhcmRMaXN0U2hhcGUpLFxucmVzdEFyZ0d1YXJkOk0ub3B0KFN5bmNWYWx1ZUd1YXJkU2hhcGUpLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cbmNvbnN0ICAgICAgICBNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1NLm9yKFxuU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7JGjNj19vbmNlLk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlKE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgTWV0aG9kR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOm1ldGhvZEd1YXJkJyk7XG5cbi8qXG5cblxuICovJGjNj19vbmNlLk1ldGhvZEd1YXJkU2hhcGUoTWV0aG9kR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgYXNzZXJ0TWV0aG9kR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLE1ldGhvZEd1YXJkU2hhcGUsJ21ldGhvZEd1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0TWV0aG9kR3VhcmQoYXNzZXJ0TWV0aG9kR3VhcmQpO1xuaGFyZGVuKGFzc2VydE1ldGhvZEd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VNZXRob2RHdWFyZE1ha2VyPShcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkPXVuZGVmaW5lZCk9PlxuXG5oYXJkZW4oe1xub3B0aW9uYWw6KC4uLm9wdEFyZ0d1YXJkcyk9Pntcbm9wdGlvbmFsQXJnR3VhcmRzPT09dW5kZWZpbmVkfHxcbkZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHNldCBvZiBvcHRpb25hbCBndWFyZHNgO1xucmVzdEFyZ0d1YXJkPT09dW5kZWZpbmVkfHxcbkZhaWwgYG9wdGlvbmFsIGFyZyBndWFyZHMgbXVzdCBjb21lIGJlZm9yZSByZXN0IGFyZ2A7XG5yZXR1cm4gbWFrZU1ldGhvZEd1YXJkTWFrZXIoY2FsbEtpbmQsYXJnR3VhcmRzLG9wdEFyZ0d1YXJkcyk7XG4gfSxcbnJlc3Q6KHJBcmdHdWFyZCk9PntcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8RmFpbCBgQ2FuIG9ubHkgaGF2ZSBvbmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKFxuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcyxcbnJBcmdHdWFyZCk7XG5cbiB9LFxucmV0dXJuczoocmV0dXJuR3VhcmQ9TS51bmRlZmluZWQoKSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnZ3VhcmQ6bWV0aG9kR3VhcmQnLHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yZXN0QXJnR3VhcmQsXG5yZXR1cm5HdWFyZH0pO1xuXG5hc3NlcnRNZXRob2RHdWFyZChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9fSk7XG5cblxuY29uc3QgICAgICAgIEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5pbnRlcmZhY2VOYW1lOk0uc3RyaW5nKCksXG5tZXRob2RHdWFyZHM6TS5yZWNvcmRPZihNLnN0cmluZygpLE1ldGhvZEd1YXJkU2hhcGUpfSxcblxue1xuZGVmYXVsdEd1YXJkczpNLm9yKE0udW5kZWZpbmVkKCksJ3Bhc3NhYmxlJywncmF3JyksXG5zbG9wcHk6TS5ib29sZWFuKCksXG5zeW1ib2xNZXRob2RHdWFyZHM6TS5tYXBPZihNLnN5bWJvbCgpLE1ldGhvZEd1YXJkU2hhcGUpfSk7JGjNj19vbmNlLkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlKEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlKTtcblxuXG5cbmNvbnN0ICAgICAgICBJbnRlcmZhY2VHdWFyZFNoYXBlPU0ua2luZCgnZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnKTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuSW50ZXJmYWNlR3VhcmRTaGFwZShJbnRlcmZhY2VHdWFyZFNoYXBlKTtcbmNvbnN0ICAgICAgICBhc3NlcnRJbnRlcmZhY2VHdWFyZD0oc3BlY2ltZW4pPT57XG5tdXN0TWF0Y2goc3BlY2ltZW4sSW50ZXJmYWNlR3VhcmRTaGFwZSwnaW50ZXJmYWNlR3VhcmQnKTtcbiB9OyRozY9fb25jZS5hc3NlcnRJbnRlcmZhY2VHdWFyZChhc3NlcnRJbnRlcmZhY2VHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUludGVyZmFjZUd1YXJkPShpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zPXt9KT0+e1xuY29uc3R7c2xvcHB5PWZhbHNlLGRlZmF1bHRHdWFyZHM9c2xvcHB5PydwYXNzYWJsZSc6dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0cmluZ01ldGhvZEd1YXJkcz17fTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN5bWJvbE1ldGhvZEd1YXJkc0VudHJpZXM9W107XG5mb3IoY29uc3Qga2V5IG9mIG93bktleXMobWV0aG9kR3VhcmRzKSl7XG5jb25zdCB2YWx1ZT1tZXRob2RHdWFyZHNbLyogICAgICAgICAgICAgICAgICova2V5XTtcbmlmKHR5cGVvZiBrZXk9PT0nc3ltYm9sJyl7XG5zeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLnB1c2goW2tleSx2YWx1ZV0pO1xuIH1lbHNle1xuc3RyaW5nTWV0aG9kR3VhcmRzW2tleV09dmFsdWU7XG4gfVxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnLHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHM6c3RyaW5nTWV0aG9kR3VhcmRzLFxuLi4uKHN5bWJvbE1ldGhvZEd1YXJkc0VudHJpZXMubGVuZ3RoP1xue3N5bWJvbE1ldGhvZEd1YXJkczptYWtlQ29weU1hcChzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzKX06XG57fSksXG5kZWZhdWx0R3VhcmRzfSk7XG5cbmFzc2VydEludGVyZmFjZUd1YXJkKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5jb25zdCBHdWFyZFBheWxvYWRTaGFwZXM9aGFyZGVuKHtcbidndWFyZDphd2FpdEFyZ0d1YXJkJzpBd2FpdEFyZ0d1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOnJhd0d1YXJkJzpSYXdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDptZXRob2RHdWFyZCc6TWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnOkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlfSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0TGltaXRzIjpbImRlZmF1bHRMaW1pdHMiXSwiY2hlY2tNYXRjaGVzIjpbImNoZWNrTWF0Y2hlcyJdLCJtYXRjaGVzIjpbIm1hdGNoZXMiXSwibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdLCJhc3NlcnRQYXR0ZXJuIjpbImFzc2VydFBhdHRlcm4iXSwiaXNQYXR0ZXJuIjpbImlzUGF0dGVybiJdLCJnZXRSYW5rQ292ZXIiOlsiZ2V0UmFua0NvdmVyIl0sIk0iOlsiTSJdLCJraW5kT2YiOlsia2luZE9mIl0sIkF3YWl0QXJnR3VhcmRTaGFwZSI6WyJBd2FpdEFyZ0d1YXJkU2hhcGUiXSwiaXNBd2FpdEFyZ0d1YXJkIjpbImlzQXdhaXRBcmdHdWFyZCJdLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIjpbImFzc2VydEF3YWl0QXJnR3VhcmQiXSwiUmF3R3VhcmRTaGFwZSI6WyJSYXdHdWFyZFNoYXBlIl0sImlzUmF3R3VhcmQiOlsiaXNSYXdHdWFyZCJdLCJhc3NlcnRSYXdHdWFyZCI6WyJhc3NlcnRSYXdHdWFyZCJdLCJTeW5jVmFsdWVHdWFyZFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkU2hhcGUiXSwiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiOlsiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiXSwiQXJnR3VhcmRMaXN0U2hhcGUiOlsiQXJnR3VhcmRMaXN0U2hhcGUiXSwiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiOlsiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiXSwiTWV0aG9kR3VhcmRTaGFwZSI6WyJNZXRob2RHdWFyZFNoYXBlIl0sImFzc2VydE1ldGhvZEd1YXJkIjpbImFzc2VydE1ldGhvZEd1YXJkIl0sIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIl0sIkludGVyZmFjZUd1YXJkU2hhcGUiOlsiSW50ZXJmYWNlR3VhcmRTaGFwZSJdLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCI6WyJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAiAAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0gGixEIGAABCBgAAJAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMS9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsIi4vc3JjL21lbW8tcmFjZS5qcyIsIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VQcm9taXNlS2l0IiwicmFjZVByb21pc2VzIl0sInJlZXhwb3J0cyI6WyIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0LG1lbW9SYWNlOyRozY9faW1wb3J0cyhbW1wiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNcIiwgW1tcIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9tZW1vLXJhY2UuanNcIiwgW1tcIm1lbW9SYWNlXCIsIFskaM2PX2EgPT4gKG1lbW9SYWNlID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvaXMtcHJvbWlzZS5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VQcm9taXNlS2l0LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlUHJvbWlzZUtpdFwifSk7JGjNj19vbmNlLm1ha2VQcm9taXNlS2l0KG1ha2VQcm9taXNlS2l0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmFjZVByb21pc2VzLCAnbmFtZScsIHt2YWx1ZTogXCJyYWNlUHJvbWlzZXNcIn0pOyRozY9fb25jZS5yYWNlUHJvbWlzZXMocmFjZVByb21pc2VzKTsgICBcblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEJlc3RQaXBlbGluYWJsZVByb21pc2U9Z2xvYmFsVGhpcy5IYW5kbGVkUHJvbWlzZXx8UHJvbWlzZTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIG1ha2VQcm9taXNlS2l0KCl7XG5jb25zdHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn09bWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KCk7XG5cbmNvbnN0IHByb21pc2U9bmV3IEJlc3RQaXBlbGluYWJsZVByb21pc2UoZXhlY3V0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtwcm9taXNlLHJlc29sdmUscmVqZWN0fSk7XG4gfVxuaGFyZGVuKG1ha2VQcm9taXNlS2l0KTtcblxuLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgcmFjZVByb21pc2VzKHZhbHVlcyl7XG5yZXR1cm4gaGFyZGVuKG1lbW9SYWNlLmNhbGwoQmVzdFBpcGVsaW5hYmxlUHJvbWlzZSx2YWx1ZXMpKTtcbiB9XG5oYXJkZW4ocmFjZVByb21pc2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQcm9taXNlS2l0IjpbIm1ha2VQcm9taXNlS2l0Il0sInJhY2VQcm9taXNlcyI6WyJyYWNlUHJvbWlzZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAs11bRlUCAABVAgAALQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMS9zcmMvaXMtcHJvbWlzZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaXNQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNQcm9taXNlLCAnbmFtZScsIHt2YWx1ZTogXCJpc1Byb21pc2VcIn0pOyRozY9fb25jZS5pc1Byb21pc2UoaXNQcm9taXNlKTsgICAvKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBpc1Byb21pc2UobWF5YmVQcm9taXNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKT09PW1heWJlUHJvbWlzZTtcbiB9XG5oYXJkZW4oaXNQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUHJvbWlzZSI6WyJpc1Byb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+mbwkZwHAACcBwAALAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMS9zcmMvbWVtby1yYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtZW1vUmFjZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiovXG5cbmNvbnN0IGlzT2JqZWN0PSh2YWx1ZSk9Pk9iamVjdCh2YWx1ZSk9PT12YWx1ZTtcblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtub3duUHJvbWlzZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1hcmtTZXR0bGVkPShyZWNvcmQpPT57XG5pZighcmVjb3JkfHxyZWNvcmQuc2V0dGxlZCl7XG5yZXR1cm4gbmV3IFNldCgpO1xuIH1cblxuY29uc3R7ZGVmZXJyZWRzfT1yZWNvcmQ7XG5PYmplY3QuYXNzaWduKHJlY29yZCx7XG5kZWZlcnJlZHM6dW5kZWZpbmVkLFxuc2V0dGxlZDp0cnVlfSk7XG5cbk9iamVjdC5mcmVlemUocmVjb3JkKTtcbnJldHVybiBkZWZlcnJlZHM7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZ2V0TWVtb1JlY29yZD0odmFsdWUpPT57XG5pZighaXNPYmplY3QodmFsdWUpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtzZXR0bGVkOnRydWV9KTtcbiB9XG5cbmxldCByZWNvcmQ9a25vd25Qcm9taXNlcy5nZXQodmFsdWUpO1xuXG5pZighcmVjb3JkKXtcbnJlY29yZD17ZGVmZXJyZWRzOm5ldyBTZXQoKSxzZXR0bGVkOmZhbHNlfTtcbmtub3duUHJvbWlzZXMuc2V0KHZhbHVlLHJlY29yZCk7XG4vL1xuUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKFxuKHZhbCk9PntcbmZvcihjb25zdHtyZXNvbHZlfW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVzb2x2ZSh2YWwpO1xuIH1cbiB9LFxuKGVycik9PntcbmZvcihjb25zdHtyZWplY3R9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZWplY3QoZXJyKTtcbiB9XG4gfSk7XG5cbiB9XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0e3JhY2V9PXtcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbnJhY2UodmFsdWVzKXtcbmxldCBkZWZlcnJlZDtcbi8qICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGNhY2hlZFZhbHVlcz1bXTtcbmNvbnN0IEM9dGhpcztcbmNvbnN0IHJlc3VsdD1uZXcgQygocmVzb2x2ZSxyZWplY3QpPT57XG5kZWZlcnJlZD17cmVzb2x2ZSxyZWplY3R9O1xuZm9yKGNvbnN0IHZhbHVlIG9mIHZhbHVlcyl7XG5jYWNoZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XG5jb25zdHtzZXR0bGVkLGRlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihzZXR0bGVkKXtcbi8vXG4vL1xuQy5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmUscmVqZWN0KTtcbiB9ZWxzZXtcbmRlZmVycmVkcy5hZGQoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG5cbi8vXG4vL1xucmV0dXJuIHJlc3VsdC5maW5hbGx5KCgpPT57XG5mb3IoY29uc3QgdmFsdWUgb2YgY2FjaGVkVmFsdWVzKXtcbmNvbnN0e2RlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihkZWZlcnJlZHMpe1xuZGVmZXJyZWRzLmRlbGV0ZShkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcbiB9fTskaM2PX29uY2UucmFjZShyYWNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1lbW9SYWNlIjpbInJhY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnG3EsnwFAAB8BQAANwAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMS9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVzb2x2ZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlamVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmU9KHZhbHVlKT0+e1xuaWYoaW50ZXJuYWxSZXNvbHZlKXtcbmludGVybmFsUmVzb2x2ZSh2YWx1ZSk7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09bnVsbCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVqZWN0PShyZWFzb24pPT57XG5pZihpbnRlcm5hbFJlamVjdCl7XG5pbnRlcm5hbFJlamVjdChyZWFzb24pO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVqZWN0PT09bnVsbCk7XG4gfVxuIH07XG5cbmNvbnN0IGV4ZWN1dG9yPShyZXMscmVqKT0+e1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PXVuZGVmaW5lZCYmaW50ZXJuYWxSZWplY3Q9PT11bmRlZmluZWQpO1xuaW50ZXJuYWxSZXNvbHZlPXJlcztcbmludGVybmFsUmVqZWN0PXJlajtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn0pO1xuIH07JGjNj19vbmNlLm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xuaGFyZGVuKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACgAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADSAaLEQgYAAEIGAAAlAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xMy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsIi4vc3JjL21lbW8tcmFjZS5qcyIsIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VQcm9taXNlS2l0IiwicmFjZVByb21pc2VzIl0sInJlZXhwb3J0cyI6WyIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0LG1lbW9SYWNlOyRozY9faW1wb3J0cyhbW1wiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNcIiwgW1tcIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9tZW1vLXJhY2UuanNcIiwgW1tcIm1lbW9SYWNlXCIsIFskaM2PX2EgPT4gKG1lbW9SYWNlID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvaXMtcHJvbWlzZS5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VQcm9taXNlS2l0LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlUHJvbWlzZUtpdFwifSk7JGjNj19vbmNlLm1ha2VQcm9taXNlS2l0KG1ha2VQcm9taXNlS2l0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmFjZVByb21pc2VzLCAnbmFtZScsIHt2YWx1ZTogXCJyYWNlUHJvbWlzZXNcIn0pOyRozY9fb25jZS5yYWNlUHJvbWlzZXMocmFjZVByb21pc2VzKTsgICBcblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEJlc3RQaXBlbGluYWJsZVByb21pc2U9Z2xvYmFsVGhpcy5IYW5kbGVkUHJvbWlzZXx8UHJvbWlzZTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIG1ha2VQcm9taXNlS2l0KCl7XG5jb25zdHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn09bWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KCk7XG5cbmNvbnN0IHByb21pc2U9bmV3IEJlc3RQaXBlbGluYWJsZVByb21pc2UoZXhlY3V0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtwcm9taXNlLHJlc29sdmUscmVqZWN0fSk7XG4gfVxuaGFyZGVuKG1ha2VQcm9taXNlS2l0KTtcblxuLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgcmFjZVByb21pc2VzKHZhbHVlcyl7XG5yZXR1cm4gaGFyZGVuKG1lbW9SYWNlLmNhbGwoQmVzdFBpcGVsaW5hYmxlUHJvbWlzZSx2YWx1ZXMpKTtcbiB9XG5oYXJkZW4ocmFjZVByb21pc2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQcm9taXNlS2l0IjpbIm1ha2VQcm9taXNlS2l0Il0sInJhY2VQcm9taXNlcyI6WyJyYWNlUHJvbWlzZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAs11bRlUCAABVAgAALgAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTMvc3JjL2lzLXByb21pc2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImlzUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaM2PX29uY2UuaXNQcm9taXNlKGlzUHJvbWlzZSk7ICAgLypcblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgaXNQcm9taXNlKG1heWJlUHJvbWlzZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZSk9PT1tYXliZVByb21pc2U7XG4gfVxuaGFyZGVuKGlzUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Byb21pc2UiOlsiaXNQcm9taXNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPpm8JGcBwAAnAcAAC0AAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzL3NyYy9tZW1vLXJhY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1lbW9SYWNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuKi9cblxuY29uc3QgaXNPYmplY3Q9KHZhbHVlKT0+T2JqZWN0KHZhbHVlKT09PXZhbHVlO1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga25vd25Qcm9taXNlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFya1NldHRsZWQ9KHJlY29yZCk9PntcbmlmKCFyZWNvcmR8fHJlY29yZC5zZXR0bGVkKXtcbnJldHVybiBuZXcgU2V0KCk7XG4gfVxuXG5jb25zdHtkZWZlcnJlZHN9PXJlY29yZDtcbk9iamVjdC5hc3NpZ24ocmVjb3JkLHtcbmRlZmVycmVkczp1bmRlZmluZWQsXG5zZXR0bGVkOnRydWV9KTtcblxuT2JqZWN0LmZyZWV6ZShyZWNvcmQpO1xucmV0dXJuIGRlZmVycmVkcztcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBnZXRNZW1vUmVjb3JkPSh2YWx1ZSk9PntcbmlmKCFpc09iamVjdCh2YWx1ZSkpe1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oe3NldHRsZWQ6dHJ1ZX0pO1xuIH1cblxubGV0IHJlY29yZD1rbm93blByb21pc2VzLmdldCh2YWx1ZSk7XG5cbmlmKCFyZWNvcmQpe1xucmVjb3JkPXtkZWZlcnJlZHM6bmV3IFNldCgpLHNldHRsZWQ6ZmFsc2V9O1xua25vd25Qcm9taXNlcy5zZXQodmFsdWUscmVjb3JkKTtcbi8vXG5Qcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oXG4odmFsKT0+e1xuZm9yKGNvbnN0e3Jlc29sdmV9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZXNvbHZlKHZhbCk7XG4gfVxuIH0sXG4oZXJyKT0+e1xuZm9yKGNvbnN0e3JlamVjdH1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlamVjdChlcnIpO1xuIH1cbiB9KTtcblxuIH1cbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3R7cmFjZX09e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xucmFjZSh2YWx1ZXMpe1xubGV0IGRlZmVycmVkO1xuLyogICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgY2FjaGVkVmFsdWVzPVtdO1xuY29uc3QgQz10aGlzO1xuY29uc3QgcmVzdWx0PW5ldyBDKChyZXNvbHZlLHJlamVjdCk9PntcbmRlZmVycmVkPXtyZXNvbHZlLHJlamVjdH07XG5mb3IoY29uc3QgdmFsdWUgb2YgdmFsdWVzKXtcbmNhY2hlZFZhbHVlcy5wdXNoKHZhbHVlKTtcbmNvbnN0e3NldHRsZWQsZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKHNldHRsZWQpe1xuLy9cbi8vXG5DLnJlc29sdmUodmFsdWUpLnRoZW4ocmVzb2x2ZSxyZWplY3QpO1xuIH1lbHNle1xuZGVmZXJyZWRzLmFkZChkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcblxuLy9cbi8vXG5yZXR1cm4gcmVzdWx0LmZpbmFsbHkoKCk9PntcbmZvcihjb25zdCB2YWx1ZSBvZiBjYWNoZWRWYWx1ZXMpe1xuY29uc3R7ZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKGRlZmVycmVkcyl7XG5kZWZlcnJlZHMuZGVsZXRlKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuIH19OyRozY9fb25jZS5yYWNlKHJhY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWVtb1JhY2UiOlsicmFjZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACcbcSyfAUAAHwFAAA4AAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xMy9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVzb2x2ZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlamVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmU9KHZhbHVlKT0+e1xuaWYoaW50ZXJuYWxSZXNvbHZlKXtcbmludGVybmFsUmVzb2x2ZSh2YWx1ZSk7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09bnVsbCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVqZWN0PShyZWFzb24pPT57XG5pZihpbnRlcm5hbFJlamVjdCl7XG5pbnRlcm5hbFJlamVjdChyZWFzb24pO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVqZWN0PT09bnVsbCk7XG4gfVxuIH07XG5cbmNvbnN0IGV4ZWN1dG9yPShyZXMscmVqKT0+e1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PXVuZGVmaW5lZCYmaW50ZXJuYWxSZWplY3Q9PT11bmRlZmluZWQpO1xuaW50ZXJuYWxSZXNvbHZlPXJlcztcbmludGVybmFsUmVqZWN0PXJlajtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn0pO1xuIH07JGjNj19vbmNlLm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xuaGFyZGVuKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0gGixEIGAABCBgAAJQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLCIuL3NyYy9tZW1vLXJhY2UuanMiLCIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlUHJvbWlzZUtpdCIsInJhY2VQcm9taXNlcyJdLCJyZWV4cG9ydHMiOlsiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCxtZW1vUmFjZTskaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzXCIsIFtbXCJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvbWVtby1yYWNlLmpzXCIsIFtbXCJtZW1vUmFjZVwiLCBbJGjNj19hID0+IChtZW1vUmFjZSA9ICRozY9fYSldXV1dLFtcIi4vc3JjL2lzLXByb21pc2UuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlUHJvbWlzZUtpdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVByb21pc2VLaXRcIn0pOyRozY9fb25jZS5tYWtlUHJvbWlzZUtpdChtYWtlUHJvbWlzZUtpdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJhY2VQcm9taXNlcywgJ25hbWUnLCB7dmFsdWU6IFwicmFjZVByb21pc2VzXCJ9KTskaM2PX29uY2UucmFjZVByb21pc2VzKHJhY2VQcm9taXNlcyk7ICAgXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBCZXN0UGlwZWxpbmFibGVQcm9taXNlPWdsb2JhbFRoaXMuSGFuZGxlZFByb21pc2V8fFByb21pc2U7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlUHJvbWlzZUtpdCgpe1xuY29uc3R7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9PW1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCgpO1xuXG5jb25zdCBwcm9taXNlPW5ldyBCZXN0UGlwZWxpbmFibGVQcm9taXNlKGV4ZWN1dG9yKTtcblxucmV0dXJuIGhhcmRlbih7cHJvbWlzZSxyZXNvbHZlLHJlamVjdH0pO1xuIH1cbmhhcmRlbihtYWtlUHJvbWlzZUtpdCk7XG5cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHJhY2VQcm9taXNlcyh2YWx1ZXMpe1xucmV0dXJuIGhhcmRlbihtZW1vUmFjZS5jYWxsKEJlc3RQaXBlbGluYWJsZVByb21pc2UsdmFsdWVzKSk7XG4gfVxuaGFyZGVuKHJhY2VQcm9taXNlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZUtpdCI6WyJtYWtlUHJvbWlzZUtpdCJdLCJyYWNlUHJvbWlzZXMiOlsicmFjZVByb21pc2VzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALNdW0ZVAgAAVQIAAC4AAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjE0L3NyYy9pcy1wcm9taXNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpc1Byb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc1Byb21pc2UsICduYW1lJywge3ZhbHVlOiBcImlzUHJvbWlzZVwifSk7JGjNj19vbmNlLmlzUHJvbWlzZShpc1Byb21pc2UpOyAgIC8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIGlzUHJvbWlzZShtYXliZVByb21pc2Upe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShtYXliZVByb21pc2UpPT09bWF5YmVQcm9taXNlO1xuIH1cbmhhcmRlbihpc1Byb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQcm9taXNlIjpbImlzUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD6ZvCRnAcAAJwHAAAtAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xNC9zcmMvbWVtby1yYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtZW1vUmFjZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiovXG5cbmNvbnN0IGlzT2JqZWN0PSh2YWx1ZSk9Pk9iamVjdCh2YWx1ZSk9PT12YWx1ZTtcblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtub3duUHJvbWlzZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1hcmtTZXR0bGVkPShyZWNvcmQpPT57XG5pZighcmVjb3JkfHxyZWNvcmQuc2V0dGxlZCl7XG5yZXR1cm4gbmV3IFNldCgpO1xuIH1cblxuY29uc3R7ZGVmZXJyZWRzfT1yZWNvcmQ7XG5PYmplY3QuYXNzaWduKHJlY29yZCx7XG5kZWZlcnJlZHM6dW5kZWZpbmVkLFxuc2V0dGxlZDp0cnVlfSk7XG5cbk9iamVjdC5mcmVlemUocmVjb3JkKTtcbnJldHVybiBkZWZlcnJlZHM7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZ2V0TWVtb1JlY29yZD0odmFsdWUpPT57XG5pZighaXNPYmplY3QodmFsdWUpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtzZXR0bGVkOnRydWV9KTtcbiB9XG5cbmxldCByZWNvcmQ9a25vd25Qcm9taXNlcy5nZXQodmFsdWUpO1xuXG5pZighcmVjb3JkKXtcbnJlY29yZD17ZGVmZXJyZWRzOm5ldyBTZXQoKSxzZXR0bGVkOmZhbHNlfTtcbmtub3duUHJvbWlzZXMuc2V0KHZhbHVlLHJlY29yZCk7XG4vL1xuUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKFxuKHZhbCk9PntcbmZvcihjb25zdHtyZXNvbHZlfW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVzb2x2ZSh2YWwpO1xuIH1cbiB9LFxuKGVycik9PntcbmZvcihjb25zdHtyZWplY3R9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZWplY3QoZXJyKTtcbiB9XG4gfSk7XG5cbiB9XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0e3JhY2V9PXtcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbnJhY2UodmFsdWVzKXtcbmxldCBkZWZlcnJlZDtcbi8qICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGNhY2hlZFZhbHVlcz1bXTtcbmNvbnN0IEM9dGhpcztcbmNvbnN0IHJlc3VsdD1uZXcgQygocmVzb2x2ZSxyZWplY3QpPT57XG5kZWZlcnJlZD17cmVzb2x2ZSxyZWplY3R9O1xuZm9yKGNvbnN0IHZhbHVlIG9mIHZhbHVlcyl7XG5jYWNoZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XG5jb25zdHtzZXR0bGVkLGRlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihzZXR0bGVkKXtcbi8vXG4vL1xuQy5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmUscmVqZWN0KTtcbiB9ZWxzZXtcbmRlZmVycmVkcy5hZGQoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG5cbi8vXG4vL1xucmV0dXJuIHJlc3VsdC5maW5hbGx5KCgpPT57XG5mb3IoY29uc3QgdmFsdWUgb2YgY2FjaGVkVmFsdWVzKXtcbmNvbnN0e2RlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihkZWZlcnJlZHMpe1xuZGVmZXJyZWRzLmRlbGV0ZShkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcbiB9fTskaM2PX29uY2UucmFjZShyYWNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1lbW9SYWNlIjpbInJhY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnG3EsnwFAAB8BQAAOAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlc29sdmU7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZWplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlPSh2YWx1ZSk9PntcbmlmKGludGVybmFsUmVzb2x2ZSl7XG5pbnRlcm5hbFJlc29sdmUodmFsdWUpO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PW51bGwpO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlamVjdD0ocmVhc29uKT0+e1xuaWYoaW50ZXJuYWxSZWplY3Qpe1xuaW50ZXJuYWxSZWplY3QocmVhc29uKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlamVjdD09PW51bGwpO1xuIH1cbiB9O1xuXG5jb25zdCBleGVjdXRvcj0ocmVzLHJlaik9PntcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT11bmRlZmluZWQmJmludGVybmFsUmVqZWN0PT09dW5kZWZpbmVkKTtcbmludGVybmFsUmVzb2x2ZT1yZXM7XG5pbnRlcm5hbFJlamVjdD1yZWo7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9KTtcbiB9OyRozY9fb25jZS5tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbmhhcmRlbihtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0IjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAApAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xNC9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANIBosRCBgAAQgYAACQAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjIvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLCIuL3NyYy9tZW1vLXJhY2UuanMiLCIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlUHJvbWlzZUtpdCIsInJhY2VQcm9taXNlcyJdLCJyZWV4cG9ydHMiOlsiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCxtZW1vUmFjZTskaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzXCIsIFtbXCJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvbWVtby1yYWNlLmpzXCIsIFtbXCJtZW1vUmFjZVwiLCBbJGjNj19hID0+IChtZW1vUmFjZSA9ICRozY9fYSldXV1dLFtcIi4vc3JjL2lzLXByb21pc2UuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlUHJvbWlzZUtpdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVByb21pc2VLaXRcIn0pOyRozY9fb25jZS5tYWtlUHJvbWlzZUtpdChtYWtlUHJvbWlzZUtpdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJhY2VQcm9taXNlcywgJ25hbWUnLCB7dmFsdWU6IFwicmFjZVByb21pc2VzXCJ9KTskaM2PX29uY2UucmFjZVByb21pc2VzKHJhY2VQcm9taXNlcyk7ICAgXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBCZXN0UGlwZWxpbmFibGVQcm9taXNlPWdsb2JhbFRoaXMuSGFuZGxlZFByb21pc2V8fFByb21pc2U7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlUHJvbWlzZUtpdCgpe1xuY29uc3R7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9PW1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCgpO1xuXG5jb25zdCBwcm9taXNlPW5ldyBCZXN0UGlwZWxpbmFibGVQcm9taXNlKGV4ZWN1dG9yKTtcblxucmV0dXJuIGhhcmRlbih7cHJvbWlzZSxyZXNvbHZlLHJlamVjdH0pO1xuIH1cbmhhcmRlbihtYWtlUHJvbWlzZUtpdCk7XG5cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHJhY2VQcm9taXNlcyh2YWx1ZXMpe1xucmV0dXJuIGhhcmRlbihtZW1vUmFjZS5jYWxsKEJlc3RQaXBlbGluYWJsZVByb21pc2UsdmFsdWVzKSk7XG4gfVxuaGFyZGVuKHJhY2VQcm9taXNlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZUtpdCI6WyJtYWtlUHJvbWlzZUtpdCJdLCJyYWNlUHJvbWlzZXMiOlsicmFjZVByb21pc2VzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALNdW0ZVAgAAVQIAAC0AAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjIvc3JjL2lzLXByb21pc2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImlzUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaM2PX29uY2UuaXNQcm9taXNlKGlzUHJvbWlzZSk7ICAgLypcblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgaXNQcm9taXNlKG1heWJlUHJvbWlzZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZSk9PT1tYXliZVByb21pc2U7XG4gfVxuaGFyZGVuKGlzUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Byb21pc2UiOlsiaXNQcm9taXNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPpm8JGcBwAAnAcAACwAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjIvc3JjL21lbW8tcmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWVtb1JhY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4qL1xuXG5jb25zdCBpc09iamVjdD0odmFsdWUpPT5PYmplY3QodmFsdWUpPT09dmFsdWU7XG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBrbm93blByb21pc2VzPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYXJrU2V0dGxlZD0ocmVjb3JkKT0+e1xuaWYoIXJlY29yZHx8cmVjb3JkLnNldHRsZWQpe1xucmV0dXJuIG5ldyBTZXQoKTtcbiB9XG5cbmNvbnN0e2RlZmVycmVkc309cmVjb3JkO1xuT2JqZWN0LmFzc2lnbihyZWNvcmQse1xuZGVmZXJyZWRzOnVuZGVmaW5lZCxcbnNldHRsZWQ6dHJ1ZX0pO1xuXG5PYmplY3QuZnJlZXplKHJlY29yZCk7XG5yZXR1cm4gZGVmZXJyZWRzO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGdldE1lbW9SZWNvcmQ9KHZhbHVlKT0+e1xuaWYoIWlzT2JqZWN0KHZhbHVlKSl7XG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7c2V0dGxlZDp0cnVlfSk7XG4gfVxuXG5sZXQgcmVjb3JkPWtub3duUHJvbWlzZXMuZ2V0KHZhbHVlKTtcblxuaWYoIXJlY29yZCl7XG5yZWNvcmQ9e2RlZmVycmVkczpuZXcgU2V0KCksc2V0dGxlZDpmYWxzZX07XG5rbm93blByb21pc2VzLnNldCh2YWx1ZSxyZWNvcmQpO1xuLy9cblByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihcbih2YWwpPT57XG5mb3IoY29uc3R7cmVzb2x2ZX1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlc29sdmUodmFsKTtcbiB9XG4gfSxcbihlcnIpPT57XG5mb3IoY29uc3R7cmVqZWN0fW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVqZWN0KGVycik7XG4gfVxuIH0pO1xuXG4gfVxucmV0dXJuIHJlY29yZDtcbiB9O1xuXG5jb25zdHtyYWNlfT17XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5yYWNlKHZhbHVlcyl7XG5sZXQgZGVmZXJyZWQ7XG4vKiAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBjYWNoZWRWYWx1ZXM9W107XG5jb25zdCBDPXRoaXM7XG5jb25zdCByZXN1bHQ9bmV3IEMoKHJlc29sdmUscmVqZWN0KT0+e1xuZGVmZXJyZWQ9e3Jlc29sdmUscmVqZWN0fTtcbmZvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe1xuY2FjaGVkVmFsdWVzLnB1c2godmFsdWUpO1xuY29uc3R7c2V0dGxlZCxkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoc2V0dGxlZCl7XG4vL1xuLy9cbkMucmVzb2x2ZSh2YWx1ZSkudGhlbihyZXNvbHZlLHJlamVjdCk7XG4gfWVsc2V7XG5kZWZlcnJlZHMuYWRkKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuXG4vL1xuLy9cbnJldHVybiByZXN1bHQuZmluYWxseSgoKT0+e1xuZm9yKGNvbnN0IHZhbHVlIG9mIGNhY2hlZFZhbHVlcyl7XG5jb25zdHtkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoZGVmZXJyZWRzKXtcbmRlZmVycmVkcy5kZWxldGUoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG4gfX07JGjNj19vbmNlLnJhY2UocmFjZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtZW1vUmFjZSI6WyJyYWNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJxtxLJ8BQAAfAUAADcAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjIvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlc29sdmU7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZWplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlPSh2YWx1ZSk9PntcbmlmKGludGVybmFsUmVzb2x2ZSl7XG5pbnRlcm5hbFJlc29sdmUodmFsdWUpO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PW51bGwpO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlamVjdD0ocmVhc29uKT0+e1xuaWYoaW50ZXJuYWxSZWplY3Qpe1xuaW50ZXJuYWxSZWplY3QocmVhc29uKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlamVjdD09PW51bGwpO1xuIH1cbiB9O1xuXG5jb25zdCBleGVjdXRvcj0ocmVzLHJlaik9PntcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT11bmRlZmluZWQmJmludGVybmFsUmVqZWN0PT09dW5kZWZpbmVkKTtcbmludGVybmFsUmVzb2x2ZT1yZXM7XG5pbnRlcm5hbFJlamVjdD1yZWo7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9KTtcbiB9OyRozY9fb25jZS5tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbmhhcmRlbihtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0IjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAoAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4yL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0gGixEIGAABCBgAAJAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsIi4vc3JjL21lbW8tcmFjZS5qcyIsIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VQcm9taXNlS2l0IiwicmFjZVByb21pc2VzIl0sInJlZXhwb3J0cyI6WyIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0LG1lbW9SYWNlOyRozY9faW1wb3J0cyhbW1wiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNcIiwgW1tcIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9tZW1vLXJhY2UuanNcIiwgW1tcIm1lbW9SYWNlXCIsIFskaM2PX2EgPT4gKG1lbW9SYWNlID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvaXMtcHJvbWlzZS5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VQcm9taXNlS2l0LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlUHJvbWlzZUtpdFwifSk7JGjNj19vbmNlLm1ha2VQcm9taXNlS2l0KG1ha2VQcm9taXNlS2l0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmFjZVByb21pc2VzLCAnbmFtZScsIHt2YWx1ZTogXCJyYWNlUHJvbWlzZXNcIn0pOyRozY9fb25jZS5yYWNlUHJvbWlzZXMocmFjZVByb21pc2VzKTsgICBcblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEJlc3RQaXBlbGluYWJsZVByb21pc2U9Z2xvYmFsVGhpcy5IYW5kbGVkUHJvbWlzZXx8UHJvbWlzZTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIG1ha2VQcm9taXNlS2l0KCl7XG5jb25zdHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn09bWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KCk7XG5cbmNvbnN0IHByb21pc2U9bmV3IEJlc3RQaXBlbGluYWJsZVByb21pc2UoZXhlY3V0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtwcm9taXNlLHJlc29sdmUscmVqZWN0fSk7XG4gfVxuaGFyZGVuKG1ha2VQcm9taXNlS2l0KTtcblxuLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgcmFjZVByb21pc2VzKHZhbHVlcyl7XG5yZXR1cm4gaGFyZGVuKG1lbW9SYWNlLmNhbGwoQmVzdFBpcGVsaW5hYmxlUHJvbWlzZSx2YWx1ZXMpKTtcbiB9XG5oYXJkZW4ocmFjZVByb21pc2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQcm9taXNlS2l0IjpbIm1ha2VQcm9taXNlS2l0Il0sInJhY2VQcm9taXNlcyI6WyJyYWNlUHJvbWlzZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAs11bRlUCAABVAgAALQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9zcmMvaXMtcHJvbWlzZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaXNQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNQcm9taXNlLCAnbmFtZScsIHt2YWx1ZTogXCJpc1Byb21pc2VcIn0pOyRozY9fb25jZS5pc1Byb21pc2UoaXNQcm9taXNlKTsgICAvKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBpc1Byb21pc2UobWF5YmVQcm9taXNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKT09PW1heWJlUHJvbWlzZTtcbiB9XG5oYXJkZW4oaXNQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUHJvbWlzZSI6WyJpc1Byb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+mbwkZwHAACcBwAALAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9zcmMvbWVtby1yYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtZW1vUmFjZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiovXG5cbmNvbnN0IGlzT2JqZWN0PSh2YWx1ZSk9Pk9iamVjdCh2YWx1ZSk9PT12YWx1ZTtcblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtub3duUHJvbWlzZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1hcmtTZXR0bGVkPShyZWNvcmQpPT57XG5pZighcmVjb3JkfHxyZWNvcmQuc2V0dGxlZCl7XG5yZXR1cm4gbmV3IFNldCgpO1xuIH1cblxuY29uc3R7ZGVmZXJyZWRzfT1yZWNvcmQ7XG5PYmplY3QuYXNzaWduKHJlY29yZCx7XG5kZWZlcnJlZHM6dW5kZWZpbmVkLFxuc2V0dGxlZDp0cnVlfSk7XG5cbk9iamVjdC5mcmVlemUocmVjb3JkKTtcbnJldHVybiBkZWZlcnJlZHM7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZ2V0TWVtb1JlY29yZD0odmFsdWUpPT57XG5pZighaXNPYmplY3QodmFsdWUpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtzZXR0bGVkOnRydWV9KTtcbiB9XG5cbmxldCByZWNvcmQ9a25vd25Qcm9taXNlcy5nZXQodmFsdWUpO1xuXG5pZighcmVjb3JkKXtcbnJlY29yZD17ZGVmZXJyZWRzOm5ldyBTZXQoKSxzZXR0bGVkOmZhbHNlfTtcbmtub3duUHJvbWlzZXMuc2V0KHZhbHVlLHJlY29yZCk7XG4vL1xuUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKFxuKHZhbCk9PntcbmZvcihjb25zdHtyZXNvbHZlfW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVzb2x2ZSh2YWwpO1xuIH1cbiB9LFxuKGVycik9PntcbmZvcihjb25zdHtyZWplY3R9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZWplY3QoZXJyKTtcbiB9XG4gfSk7XG5cbiB9XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0e3JhY2V9PXtcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbnJhY2UodmFsdWVzKXtcbmxldCBkZWZlcnJlZDtcbi8qICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGNhY2hlZFZhbHVlcz1bXTtcbmNvbnN0IEM9dGhpcztcbmNvbnN0IHJlc3VsdD1uZXcgQygocmVzb2x2ZSxyZWplY3QpPT57XG5kZWZlcnJlZD17cmVzb2x2ZSxyZWplY3R9O1xuZm9yKGNvbnN0IHZhbHVlIG9mIHZhbHVlcyl7XG5jYWNoZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XG5jb25zdHtzZXR0bGVkLGRlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihzZXR0bGVkKXtcbi8vXG4vL1xuQy5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmUscmVqZWN0KTtcbiB9ZWxzZXtcbmRlZmVycmVkcy5hZGQoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG5cbi8vXG4vL1xucmV0dXJuIHJlc3VsdC5maW5hbGx5KCgpPT57XG5mb3IoY29uc3QgdmFsdWUgb2YgY2FjaGVkVmFsdWVzKXtcbmNvbnN0e2RlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihkZWZlcnJlZHMpe1xuZGVmZXJyZWRzLmRlbGV0ZShkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcbiB9fTskaM2PX29uY2UucmFjZShyYWNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1lbW9SYWNlIjpbInJhY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnG3EsnwFAAB8BQAANwAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVzb2x2ZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlamVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmU9KHZhbHVlKT0+e1xuaWYoaW50ZXJuYWxSZXNvbHZlKXtcbmludGVybmFsUmVzb2x2ZSh2YWx1ZSk7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09bnVsbCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVqZWN0PShyZWFzb24pPT57XG5pZihpbnRlcm5hbFJlamVjdCl7XG5pbnRlcm5hbFJlamVjdChyZWFzb24pO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVqZWN0PT09bnVsbCk7XG4gfVxuIH07XG5cbmNvbnN0IGV4ZWN1dG9yPShyZXMscmVqKT0+e1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PXVuZGVmaW5lZCYmaW50ZXJuYWxSZWplY3Q9PT11bmRlZmluZWQpO1xuaW50ZXJuYWxSZXNvbHZlPXJlcztcbmludGVybmFsUmVqZWN0PXJlajtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn0pO1xuIH07JGjNj19vbmNlLm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xuaGFyZGVuKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACgAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjYvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADSAaLEQgYAAEIGAAAkAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW43L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwiLi9zcmMvbWVtby1yYWNlLmpzIiwiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZVByb21pc2VLaXQiLCJyYWNlUHJvbWlzZXMiXSwicmVleHBvcnRzIjpbIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQsbWVtb1JhY2U7JGjNj19pbXBvcnRzKFtbXCIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1wiLCBbW1wibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCA9ICRozY9fYSldXV1dLFtcIi4vc3JjL21lbW8tcmFjZS5qc1wiLCBbW1wibWVtb1JhY2VcIiwgWyRozY9fYSA9PiAobWVtb1JhY2UgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9pcy1wcm9taXNlLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZVByb21pc2VLaXQsICduYW1lJywge3ZhbHVlOiBcIm1ha2VQcm9taXNlS2l0XCJ9KTskaM2PX29uY2UubWFrZVByb21pc2VLaXQobWFrZVByb21pc2VLaXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYWNlUHJvbWlzZXMsICduYW1lJywge3ZhbHVlOiBcInJhY2VQcm9taXNlc1wifSk7JGjNj19vbmNlLnJhY2VQcm9taXNlcyhyYWNlUHJvbWlzZXMpOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZT1nbG9iYWxUaGlzLkhhbmRsZWRQcm9taXNlfHxQcm9taXNlO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVByb21pc2VLaXQoKXtcbmNvbnN0e3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfT1tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQoKTtcblxuY29uc3QgcHJvbWlzZT1uZXcgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZShleGVjdXRvcik7XG5cbnJldHVybiBoYXJkZW4oe3Byb21pc2UscmVzb2x2ZSxyZWplY3R9KTtcbiB9XG5oYXJkZW4obWFrZVByb21pc2VLaXQpO1xuXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICByYWNlUHJvbWlzZXModmFsdWVzKXtcbnJldHVybiBoYXJkZW4obWVtb1JhY2UuY2FsbChCZXN0UGlwZWxpbmFibGVQcm9taXNlLHZhbHVlcykpO1xuIH1cbmhhcmRlbihyYWNlUHJvbWlzZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2VLaXQiOlsibWFrZVByb21pc2VLaXQiXSwicmFjZVByb21pc2VzIjpbInJhY2VQcm9taXNlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACzXVtGVQIAAFUCAAAtAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW43L3NyYy9pcy1wcm9taXNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpc1Byb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc1Byb21pc2UsICduYW1lJywge3ZhbHVlOiBcImlzUHJvbWlzZVwifSk7JGjNj19vbmNlLmlzUHJvbWlzZShpc1Byb21pc2UpOyAgIC8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIGlzUHJvbWlzZShtYXliZVByb21pc2Upe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShtYXliZVByb21pc2UpPT09bWF5YmVQcm9taXNlO1xuIH1cbmhhcmRlbihpc1Byb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQcm9taXNlIjpbImlzUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD6ZvCRnAcAAJwHAAAsAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW43L3NyYy9tZW1vLXJhY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1lbW9SYWNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuKi9cblxuY29uc3QgaXNPYmplY3Q9KHZhbHVlKT0+T2JqZWN0KHZhbHVlKT09PXZhbHVlO1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga25vd25Qcm9taXNlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFya1NldHRsZWQ9KHJlY29yZCk9PntcbmlmKCFyZWNvcmR8fHJlY29yZC5zZXR0bGVkKXtcbnJldHVybiBuZXcgU2V0KCk7XG4gfVxuXG5jb25zdHtkZWZlcnJlZHN9PXJlY29yZDtcbk9iamVjdC5hc3NpZ24ocmVjb3JkLHtcbmRlZmVycmVkczp1bmRlZmluZWQsXG5zZXR0bGVkOnRydWV9KTtcblxuT2JqZWN0LmZyZWV6ZShyZWNvcmQpO1xucmV0dXJuIGRlZmVycmVkcztcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBnZXRNZW1vUmVjb3JkPSh2YWx1ZSk9PntcbmlmKCFpc09iamVjdCh2YWx1ZSkpe1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oe3NldHRsZWQ6dHJ1ZX0pO1xuIH1cblxubGV0IHJlY29yZD1rbm93blByb21pc2VzLmdldCh2YWx1ZSk7XG5cbmlmKCFyZWNvcmQpe1xucmVjb3JkPXtkZWZlcnJlZHM6bmV3IFNldCgpLHNldHRsZWQ6ZmFsc2V9O1xua25vd25Qcm9taXNlcy5zZXQodmFsdWUscmVjb3JkKTtcbi8vXG5Qcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oXG4odmFsKT0+e1xuZm9yKGNvbnN0e3Jlc29sdmV9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZXNvbHZlKHZhbCk7XG4gfVxuIH0sXG4oZXJyKT0+e1xuZm9yKGNvbnN0e3JlamVjdH1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlamVjdChlcnIpO1xuIH1cbiB9KTtcblxuIH1cbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3R7cmFjZX09e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xucmFjZSh2YWx1ZXMpe1xubGV0IGRlZmVycmVkO1xuLyogICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgY2FjaGVkVmFsdWVzPVtdO1xuY29uc3QgQz10aGlzO1xuY29uc3QgcmVzdWx0PW5ldyBDKChyZXNvbHZlLHJlamVjdCk9PntcbmRlZmVycmVkPXtyZXNvbHZlLHJlamVjdH07XG5mb3IoY29uc3QgdmFsdWUgb2YgdmFsdWVzKXtcbmNhY2hlZFZhbHVlcy5wdXNoKHZhbHVlKTtcbmNvbnN0e3NldHRsZWQsZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKHNldHRsZWQpe1xuLy9cbi8vXG5DLnJlc29sdmUodmFsdWUpLnRoZW4ocmVzb2x2ZSxyZWplY3QpO1xuIH1lbHNle1xuZGVmZXJyZWRzLmFkZChkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcblxuLy9cbi8vXG5yZXR1cm4gcmVzdWx0LmZpbmFsbHkoKCk9PntcbmZvcihjb25zdCB2YWx1ZSBvZiBjYWNoZWRWYWx1ZXMpe1xuY29uc3R7ZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKGRlZmVycmVkcyl7XG5kZWZlcnJlZHMuZGVsZXRlKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuIH19OyRozY9fb25jZS5yYWNlKHJhY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWVtb1JhY2UiOlsicmFjZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACcbcSyfAUAAHwFAAA3AAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW43L3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZXNvbHZlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzb2x2ZT0odmFsdWUpPT57XG5pZihpbnRlcm5hbFJlc29sdmUpe1xuaW50ZXJuYWxSZXNvbHZlKHZhbHVlKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT1udWxsKTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWplY3Q9KHJlYXNvbik9PntcbmlmKGludGVybmFsUmVqZWN0KXtcbmludGVybmFsUmVqZWN0KHJlYXNvbik7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZWplY3Q9PT1udWxsKTtcbiB9XG4gfTtcblxuY29uc3QgZXhlY3V0b3I9KHJlcyxyZWopPT57XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09dW5kZWZpbmVkJiZpbnRlcm5hbFJlamVjdD09PXVuZGVmaW5lZCk7XG5pbnRlcm5hbFJlc29sdmU9cmVzO1xuaW50ZXJuYWxSZWplY3Q9cmVqO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfSk7XG4gfTskaM2PX29uY2UubWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG5oYXJkZW4obWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAKAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANxo90KQEQAAkBEAABwAAABAZW5kby9zdHJlYW0tdjEuMi44L2luZGV4LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wcm9taXNlLWtpdCJdLCJleHBvcnRzIjpbIm1ha2VQaXBlIiwibWFrZVF1ZXVlIiwibWFrZVN0cmVhbSIsIm1hcFJlYWRlciIsIm1hcFdyaXRlciIsInByaW1lIiwicHVtcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLG1ha2VQcm9taXNlS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZyZWV6ZT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovT2JqZWN0LmZyZWV6ZTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUXVldWU9KCk9PntcbmxldHtwcm9taXNlOnRhaWxQcm9taXNlLHJlc29sdmU6dGFpbFJlc29sdmV9PW1ha2VQcm9taXNlS2l0KCk7XG5yZXR1cm57XG5wdXQodmFsdWUpe1xuY29uc3R7cmVzb2x2ZSxwcm9taXNlfT1tYWtlUHJvbWlzZUtpdCgpO1xudGFpbFJlc29sdmUoZnJlZXplKHt2YWx1ZSxwcm9taXNlfSkpO1xudGFpbFJlc29sdmU9cmVzb2x2ZTtcbiB9LFxuZ2V0KCl7XG5jb25zdCBwcm9taXNlPXRhaWxQcm9taXNlLnRoZW4oKG5leHQpPT5uZXh0LnZhbHVlKTtcbnRhaWxQcm9taXNlPXRhaWxQcm9taXNlLnRoZW4oKG5leHQpPT5uZXh0LnByb21pc2UpO1xucmV0dXJuIGhhcmRlbihwcm9taXNlKTtcbiB9fTtcblxuIH07JGjNj19vbmNlLm1ha2VRdWV1ZShtYWtlUXVldWUpO1xuaGFyZGVuKG1ha2VRdWV1ZSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RyZWFtPShhY2tzLGRhdGEpPT57XG5jb25zdCBzdHJlYW09aGFyZGVuKHtcbi8qXG5cbiAgICAgKi9cbm5leHQodmFsdWUpe1xuLy9cbi8vXG5kYXRhLnB1dChmcmVlemUoe3ZhbHVlLGRvbmU6ZmFsc2V9KSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuLypcblxuICAgICAqL1xucmV0dXJuKHZhbHVlKXtcbmRhdGEucHV0KGZyZWV6ZSh7dmFsdWUsZG9uZTp0cnVlfSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbnRocm93KGVycm9yKXtcbmRhdGEucHV0KGhhcmRlbihQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gc3RyZWFtO1xuIH19KTtcblxucmV0dXJuIHN0cmVhbTtcbiB9OyRozY9fb25jZS5tYWtlU3RyZWFtKG1ha2VTdHJlYW0pO1xuaGFyZGVuKG1ha2VTdHJlYW0pO1xuXG4vL1xuLy9cbi8vXG5jb25zdCAgICAgICAgbWFrZVBpcGU9KCk9PntcbmNvbnN0IGRhdGE9bWFrZVF1ZXVlKCk7XG5jb25zdCBhY2tzPW1ha2VRdWV1ZSgpO1xuY29uc3QgcmVhZGVyPW1ha2VTdHJlYW0oYWNrcyxkYXRhKTtcbmNvbnN0IHdyaXRlcj1tYWtlU3RyZWFtKGRhdGEsYWNrcyk7XG5yZXR1cm4gaGFyZGVuKFt3cml0ZXIscmVhZGVyXSk7XG4gfTskaM2PX29uY2UubWFrZVBpcGUobWFrZVBpcGUpO1xuaGFyZGVuKG1ha2VQaXBlKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHVtcD1hc3luYyh3cml0ZXIscmVhZGVyLHByaW1lcik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHRpY2s9KHByb21pc2UpPT5cbkUud2hlbihcbnByb21pc2UsXG4ocmVzdWx0KT0+e1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHdyaXRlci5yZXR1cm4ocmVzdWx0LnZhbHVlKTtcbiB9ZWxzZXtcbi8vXG4vL1xucmV0dXJuIHRvY2sod3JpdGVyLm5leHQocmVzdWx0LnZhbHVlKSk7XG4gfVxuIH0sXG4oLyogICAgICAgICAgICAgICAgKi9lcnJvcik9PntcbnJldHVybiB3cml0ZXIudGhyb3coZXJyb3IpO1xuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHRvY2s9KHByb21pc2UpPT5cbkUud2hlbihcbnByb21pc2UsXG4ocmVzdWx0KT0+e1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlYWRlci5yZXR1cm4ocmVzdWx0LnZhbHVlKTtcbiB9ZWxzZXtcbnJldHVybiB0aWNrKHJlYWRlci5uZXh0KHJlc3VsdC52YWx1ZSkpO1xuIH1cbiB9LFxuKC8qICAgICAgICAgICAgICAgICovZXJyb3IpPT57XG5yZXR1cm4gcmVhZGVyLnRocm93KGVycm9yKTtcbiB9KTtcblxuYXdhaXQgdGljayhyZWFkZXIubmV4dChwcmltZXIpKTtcbnJldHVybiB1bmRlZmluZWQ7XG4gfTskaM2PX29uY2UucHVtcChwdW1wKTtcbmhhcmRlbihwdW1wKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmltZT0oZ2VuZXJhdG9yLHByaW1lcik9Pntcbi8vXG5jb25zdCBmaXJzdD1nZW5lcmF0b3IubmV4dChwcmltZXIpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlc3VsdDtcbmNvbnN0IHByaW1lZD1oYXJkZW4oe1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgbmV4dCh2YWx1ZSl7XG5pZihyZXN1bHQ9PT11bmRlZmluZWQpe1xuLy9cbnJlc3VsdD1hd2FpdCBmaXJzdDtcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IubmV4dCh2YWx1ZSk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICBhc3luYyByZXR1cm4odmFsdWUpe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLnJldHVybih2YWx1ZSk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgdGhyb3coZXJyb3Ipe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG50aHJvdyBlcnJvcjtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci50aHJvdyhlcnJvcik7XG4gfX0pO1xuXG5yZXR1cm4gcHJpbWVkO1xuIH07JGjNj19vbmNlLnByaW1lKHByaW1lKTtcbmhhcmRlbihwcmltZSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFwUmVhZGVyPShyZWFkZXIsdHJhbnNmb3JtKT0+e1xuYXN5bmMgZnVuY3Rpb24qdHJhbnNmb3JtR2VuZXJhdG9yKCl7XG5mb3IgYXdhaXQoY29uc3QgdmFsdWUgb2YgcmVhZGVyKXtcbnlpZWxkIHRyYW5zZm9ybSh2YWx1ZSk7XG4gfVxucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5oYXJkZW4odHJhbnNmb3JtR2VuZXJhdG9yKTtcbnJldHVybiBoYXJkZW4odHJhbnNmb3JtR2VuZXJhdG9yKCkpO1xuIH07JGjNj19vbmNlLm1hcFJlYWRlcihtYXBSZWFkZXIpO1xuaGFyZGVuKG1hcFJlYWRlcik7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFwV3JpdGVyPSh3cml0ZXIsdHJhbnNmb3JtKT0+e1xuY29uc3QgdHJhbnNmb3JtZWRXcml0ZXI9aGFyZGVuKHtcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIG5leHQodmFsdWUpe1xucmV0dXJuIHdyaXRlci5uZXh0KHRyYW5zZm9ybSh2YWx1ZSkpO1xuIH0sXG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyB0aHJvdyhlcnJvcil7XG5yZXR1cm4gd3JpdGVyLnRocm93KGVycm9yKTtcbiB9LFxuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgcmV0dXJuKHZhbHVlKXtcbnJldHVybiB3cml0ZXIucmV0dXJuKHZhbHVlKTtcbiB9LFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xucmV0dXJuIHRyYW5zZm9ybWVkV3JpdGVyO1xuIH19KTtcblxucmV0dXJuIHRyYW5zZm9ybWVkV3JpdGVyO1xuIH07JGjNj19vbmNlLm1hcFdyaXRlcihtYXBXcml0ZXIpO1xuaGFyZGVuKG1hcFdyaXRlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUXVldWUiOlsibWFrZVF1ZXVlIl0sIm1ha2VTdHJlYW0iOlsibWFrZVN0cmVhbSJdLCJtYWtlUGlwZSI6WyJtYWtlUGlwZSJdLCJwdW1wIjpbInB1bXAiXSwicHJpbWUiOlsicHJpbWUiXSwibWFwUmVhZGVyIjpbIm1hcFJlYWRlciJdLCJtYXBXcml0ZXIiOlsibWFwV3JpdGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGZXEQnDAQAAwwEAABwAAABqZXNzaWUuanMtdjAuMy40L3NyYy9tYWluLmpzeyJpbXBvcnRzIjpbIi4vcmluZzAvbWFpbi5qcyIsIi4vcmluZzEvbWFpbi5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vcmluZzAvbWFpbi5qcyIsIi4vcmluZzEvbWFpbi5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9yaW5nMC9tYWluLmpzXCIsIFtdXSxbXCIuL3JpbmcxL21haW4uanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkGHPA3MBAABzAQAAHwAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL0UuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiQGVuZG8vZmFyIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA4PW5H28CAABvAgAALAAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJhc3luY0dlbmVyYXRlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXN5bmNHZW5lcmF0ZT0obmV4dCk9PntcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+e1xucmV0dXJuIGhhcmRlbih7XG5uZXh0OmFzeW5jKCk9PmhhcmRlbihuZXh0KCkpfSk7XG5cbiB9fSk7XG5cbiB9OyRozY9fb25jZS5hc3luY0dlbmVyYXRlKGFzeW5jR2VuZXJhdGUpO1xuaGFyZGVuKGFzeW5jR2VuZXJhdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXN5bmNHZW5lcmF0ZSI6WyJhc3luY0dlbmVyYXRlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAP9+H3bmAQAA5gEAACIAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9tYWluLmpzeyJpbXBvcnRzIjpbIi4vRS5qcyIsIi4vbWFrZXJzLmpzIiwiLi9hc3luYy1nZW5lcmF0ZS5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vRS5qcyIsIi4vYXN5bmMtZ2VuZXJhdGUuanMiLCIuL21ha2Vycy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtdXSxbXCIuL21ha2Vycy5qc1wiLCBbXV0sW1wiLi9hc3luYy1nZW5lcmF0ZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA3F9BOzAcAAMwHAAAkAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFrZXJzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlTWFwIiwibWFrZVByb21pc2UiLCJtYWtlU2V0IiwibWFrZVdlYWtNYXAiLCJtYWtlV2Vha1NldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUHJvbWlzZT0oZXhlY3V0b3IpPT5oYXJkZW4obmV3IFByb21pc2UoZXhlY3V0b3IpKTskaM2PX29uY2UubWFrZVByb21pc2UobWFrZVByb21pc2UpO1xuaGFyZGVuKG1ha2VQcm9taXNlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VNYXA9KGVudHJpZXNPckl0ZXJhYmxlKT0+aGFyZGVuKG5ldyBNYXAoZW50cmllc09ySXRlcmFibGUpKTskaM2PX29uY2UubWFrZU1hcChtYWtlTWFwKTtcbmhhcmRlbihtYWtlTWFwKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlU2V0PSh2YWx1ZXMpPT5oYXJkZW4obmV3IFNldCh2YWx1ZXMpKTskaM2PX29uY2UubWFrZVNldChtYWtlU2V0KTtcbmhhcmRlbihtYWtlU2V0KTtcblxuLypcblxuXG5cbiAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrTWFwPShlbnRyaWVzKT0+aGFyZGVuKG5ldyBXZWFrTWFwKGVudHJpZXMpKTskaM2PX29uY2UubWFrZVdlYWtNYXAobWFrZVdlYWtNYXApO1xuaGFyZGVuKG1ha2VXZWFrTWFwKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtTZXQ9KHZhbHVlcyk9PmhhcmRlbihuZXcgV2Vha1NldCh2YWx1ZXMpKTskaM2PX29uY2UubWFrZVdlYWtTZXQobWFrZVdlYWtTZXQpO1xuaGFyZGVuKG1ha2VXZWFrU2V0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQcm9taXNlIjpbIm1ha2VQcm9taXNlIl0sIm1ha2VNYXAiOlsibWFrZU1hcCJdLCJtYWtlU2V0IjpbIm1ha2VTZXQiXSwibWFrZVdlYWtNYXAiOlsibWFrZVdlYWtNYXAiXSwibWFrZVdlYWtTZXQiOlsibWFrZVdlYWtTZXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAijbjvkkDAABJAwAAKQAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzeyJpbXBvcnRzIjpbIi4uL3JpbmcwL21haW4uanMiXSwiZXhwb3J0cyI6WyJhc3luY0RvV2hpbGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVByb21pc2U7JGjNj19pbXBvcnRzKFtbXCIuLi9yaW5nMC9tYWluLmpzXCIsIFtbXCJtYWtlUHJvbWlzZVwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzeW5jRG9XaGlsZT0oYm9keSk9PntcbnJldHVybiBtYWtlUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpPT57XG5jb25zdCBsb29wPWFzeW5jKCk9PntcbmNvbnN0IGRvQ29udGludWU9YXdhaXQgYm9keSgpO1xuaWYoIWRvQ29udGludWUpe1xuLy9cbnJlc29sdmUodW5kZWZpbmVkKTtcbnJldHVybjtcbiB9XG5cbi8vXG4vL1xubG9vcCgpLmNhdGNoKHJlamVjdCk7XG4gfTtcblxubG9vcCgpLmNhdGNoKHJlamVjdCk7XG4gfSk7XG4gfTskaM2PX29uY2UuYXN5bmNEb1doaWxlKGFzeW5jRG9XaGlsZSk7XG5oYXJkZW4oYXN5bmNEb1doaWxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzeW5jRG9XaGlsZSI6WyJhc3luY0RvV2hpbGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABm8mQogBAACIAQAAIgAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL21haW4uanN7ImltcG9ydHMiOlsiLi9hc3luYy10b29scy5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vYXN5bmMtdG9vbHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vYXN5bmMtdG9vbHMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAASFia2HYJAAB2CQAAIwAAAGtyZWFkLWNvbnRyYWN0LXYwLjEuMC9zcmMvZXJyb3JzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJlcnJvcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIGNvbnN0ICAgICAgICBlcnJvcnM9e1xubm9Db25maWc6IGBDb25maWd1cmF0aW9uIG5vdCBmb3VuZCwgdXNlIGNyZWF0b3JGYWNldC5pbml0Q29uZmlnKDxjb25maWc+KSB0byBlbmFibGUgdGhpcyBtZXRob2RgLFxubm9OYW1lQXJnOiBgTmFtZSBhcmd1bWVudCByZXF1aXJlZGAsXG5hbGxNaW50ZWQ6IGBBbGwgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWludGVkYCxcbmludmFsaWROYW1lOiBgSW52YWxpZCBuYW1lLiBTdHJpbmcgc2hvdWxkIG9ubHkgY29udGFpbiBBU0NJSSBhbHBoYW51bWVyaWNzLCB1bmRlcnNjb3JlcywgYW5kL29yIGRhc2hlcy5gLFxubWludEZlZVRvb0xvdzogYFByb3ZpZGVkIG1pbnQgZmVlIGlzIHRvbyBsb3dgLFxudW5rd29ud25BcmdJbk1pbnRPZmZlcjogYE1pbnQgQ2hhcmFjdGVyJ3Mgb2ZmZXIgXCJ3YW50XCIgbXVzdCBvbmx5IGNvbnRhaW4gcHJvcGVydHkgXCJuYW1lXCJgLFxubm9XYW50SW5PZmZlcjogYE9mZmVyIG11c3QgaW5jbHVkZSBcIndhbnRcIiB0ZXJtcyBpbiB0aGUgZm9ybSBvZiB7IHdhbnQ6IHsgbmFtZTogPGRlc2lyZWQgY2hhcmFjdGVyIG5hbWU+IH19YCxcbm5hbWVUYWtlbjoobmFtZSk9PlxuIGBOYW1lICR7bmFtZX0gaXMgYWxyZWFkeSBpbiB1c2UsIHBsZWFzZSBzZWxlY3QgYSBkaWZmZXJlbnQgbmFtZWAsXG5kZXBvc2l0VG9TZWF0RmFpbGVkOiBgQ291bGQgbm90IGRlcG9zaXQgbmZ0IGludG8gU2VhdGAsXG5kZXBvc2l0VG9GYWNldEZhaWxlZDogYENvdWxkIG5vdCBkZXBvc2l0IG5mdCBpbnRvIHVzZXJGYWNldGAsXG5jaGFyYWN0ZXI0MDQ6IGBDaGFyYWN0ZXIgbm90IGZvdW5kYCxcbmludmVudG9yeTQwNDogYENoYXJhY3RlciBpbnZlbnRvcnkgbm90IGZvdW5kYCxcbm5vdGlmaWVyNDA0OiBgQ2hhcmFjdGVyIGludmVudG9yeSBub3RpZmllciBub3QgZm91bmRgLFxudXBkYXRlTWFya2V0RXJyb3I6IGBUaGVyZSB3YXMgYSBwcm9ibGVtIHVwZGF0aW5nIHRoZSBtYXJrZXRgLFxucHJpdmF0ZVN0YXRlNDA0OiBgQ2hhcmFjdGVyIHByaXZhdGUgc3RhdGUgbm90IGZvdW5kYCxcbm5vS2V5SW5JbnZlbnRvcnk6IGBDb3VsZCBub3QgZmluZCBjaGFyYWN0ZXIga2V5IGluIGludmVudG9yeWAsXG5pbnZhbGlkSW52ZW50b3J5S2V5OiBgQnJhbmQgb2YgSW52ZW50b3J5IEtleSBkb2VzIG5vdCBtYXRjaCB0aGUgY29ycmVjdCBJc3N1ZXJgLFxuaW52ZW50b3J5S2V5TWlzbWF0Y2g6IGBXYW50ZWQgS2V5IGFuZCBJbnZlbnRvcnkgS2V5IGRvIG5vdCBtYXRjaGAsXG5ub0l0ZW1zUmVxdWVzdGVkOiBgT2ZmZXIgbWlzc2luZyByZXF1ZXN0ZWQgaXRlbWAsXG5kdXBsaWNhdGVDYXRlZ29yeUluSW52ZW50b3J5OiBgSW52ZW50b3J5IGNhbm5vdCBjb250YWluIG11bHRpcGxlIGl0ZW1zIG9mIHRoZSBzYW1lIGNhdGVnb3J5YCxcbnNlZWRJbnZhbGlkOiBgU2VlZCBtdXN0IGJlIGEgbnVtYmVyYCxcbml0ZW1Ob3RJbk1hcmtldDogYENvdWxkIG5vdCBmaW5kIEl0ZW0gaW4gbWFya2V0YCxcbmNoYXJhY3Rlck5vdEluTWFya2V0OiBgQ291bGQgbm90IGZpbmQgQ2hhcmFjdGVyIGluIG1hcmtldGAsXG5pbnZhbGlkQXJnOiBgSW52YWxpZCBBcmd1bWVudGAsXG5taXNzaW5nU3RvcmFnZU5vZGU6IGBNaXNzaW5nIFN0b3JhZ2UgTm9kZSwgbm90aWZpY2F0aW9ucyBhcmUgbm90IGVuYWJsZWRgLFxuc2VsbGVyU2VhdE1pc21hdGNoOiBgV2FudGVkIEl0ZW0gYW1vdW50IGRvZXMgbm90IG1hdGNoIGl0ZW0gaW4gc2VsbGVyU2VhdGAsXG5pbnN1ZmZpY2llbnRGdW5kczogYFByb3ZpZGVkIHBheW1lbnQgaXMgbG93ZXIgdGhhbiB0aGUgYXNraW5nIHByaWNlIGZvciB0aGlzIEl0ZW1gLFxuaXRlbU5vdEZvdW5kOihpdGVtKT0+IGBDb3VsZG4ndCBmaW5kIGl0ZW0gcmVjb3JkIGZvciAke2l0ZW19YCxcbmluY29ycmVjdFBheW1lbnRCcmFuZDoocGF5bWVudEJyYW5kKT0+XG4gYEluY29ycmVjdCBwYXltZW50IGJyYW5kLiBQbGVhc2UgdXNlICR7cGF5bWVudEJyYW5kfWAsXG5yZWFycmFuZ2VFcnJvcjonUmVhbGxvY2F0aW5nIGFzc2V0cyBiZXR3ZWVuIHNlYXRzIGZhaWxlZCd9OyRozY9fb25jZS5lcnJvcnMoZXJyb3JzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImVycm9ycyI6WyJlcnJvcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAppClkNEUAADRFAAAIgAAAGtyZWFkLWNvbnRyYWN0LXYwLjEuMC9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiQGFnb3JpYy96b2UvZXhwb3J0ZWQuanMiLCJAYWdvcmljL2VydHAiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9kdXJhYmlsaXR5LmpzIiwiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyIsIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvcmF0aW8uanMiLCJAYWdvcmljL3pvZS9zcmMvdHlwZUd1YXJkcy5qcyIsIkBhZ29yaWMvZ292ZXJuYW5jZSIsIi4va3JlYWRLaXQuanMiLCJAYWdvcmljL3ZhdC1kYXRhIl0sImV4cG9ydHMiOlsibWV0YSIsInByZXBhcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQW1vdW50TWF0aCxBc3NldEtpbmQsTSxwcm92aWRlQWxsLHByZXBhcmVSZWNvcmRlcktpdE1ha2VycyxtYWtlUmF0aW8sSW52aXRhdGlvblNoYXBlLGhhbmRsZVBhcmFtR292ZXJuYW5jZSxwcmVwYXJlS3JlYWRLaXQscHJvdmlkZUtyZWFkS2l0UmVjb3JkZXJLaXRzLHByb3ZpZGU7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3pvZS9leHBvcnRlZC5qc1wiLCBbXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV0sW1wiQXNzZXRLaW5kXCIsIFskaM2PX2EgPT4gKEFzc2V0S2luZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvZHVyYWJpbGl0eS5qc1wiLCBbW1wicHJvdmlkZUFsbFwiLCBbJGjNj19hID0+IChwcm92aWRlQWxsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qc1wiLCBbW1wicHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVSZWNvcmRlcktpdE1ha2VycyA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvcmF0aW8uanNcIiwgW1tcIm1ha2VSYXRpb1wiLCBbJGjNj19hID0+IChtYWtlUmF0aW8gPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3pvZS9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbW1wiSW52aXRhdGlvblNoYXBlXCIsIFskaM2PX2EgPT4gKEludml0YXRpb25TaGFwZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvZ292ZXJuYW5jZVwiLCBbW1wiaGFuZGxlUGFyYW1Hb3Zlcm5hbmNlXCIsIFskaM2PX2EgPT4gKGhhbmRsZVBhcmFtR292ZXJuYW5jZSA9ICRozY9fYSldXV1dLFtcIi4va3JlYWRLaXQuanNcIiwgW1tcInByZXBhcmVLcmVhZEtpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlS3JlYWRLaXQgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUtyZWFkS2l0UmVjb3JkZXJLaXRzXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVLcmVhZEtpdFJlY29yZGVyS2l0cyA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcInByb3ZpZGVcIiwgWyRozY9fYSA9PiAocHJvdmlkZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0ICAgICAgICBtZXRhPXtcbnByaXZhdGVBcmdzU2hhcGU6TS5zcGxpdFJlY29yZCh7XG5pbml0aWFsUG9zZXJJbnZpdGF0aW9uOkludml0YXRpb25TaGFwZSxcbnNlZWQ6TS5udW1iZXIoKSxcbmNsb2NrOk0uZXJlZihNLnJlbW90YWJsZSgnQ2xvY2snKSksXG5wb3dlcnM6e1xuc3RvcmFnZU5vZGU6TS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJyksXG5tYXJzaGFsbGVyOk0ucmVtb3RhYmxlKCdNYXJzaGFsbGVyJyl9fSksXG5cblxuY3VzdG9tVGVybXNTaGFwZTpNLnNwbGl0UmVjb3JkKHtcbnJveWFsdHlSYXRlOntcbm51bWVyYXRvcjpNLmx0ZSgxMDBuKSxcbmRlbm9taW5hdG9yOk0uZXEoMTAwbil9LFxuXG5wbGF0Zm9ybUZlZVJhdGU6e1xubnVtZXJhdG9yOk0ubHRlKDEwMG4pLFxuZGVub21pbmF0b3I6TS5lcSgxMDBuKX0sXG5cbm1pbnRGZWU6TS5uYXQoKSxcbm1pbnRSb3lhbHR5UmF0ZTp7XG5udW1lcmF0b3I6TS5sdGUoMTAwbiksXG5kZW5vbWluYXRvcjpNLmVxKDEwMG4pfSxcblxubWludFBsYXRmb3JtRmVlUmF0ZTp7XG5udW1lcmF0b3I6TS5sdGUoMTAwbiksXG5kZW5vbWluYXRvcjpNLmVxKDEwMG4pfSxcblxucm95YWx0eURlcG9zaXRGYWNldDpNLmFueSgpLFxucGxhdGZvcm1GZWVEZXBvc2l0RmFjZXQ6TS5hbnkoKSxcbmFzc2V0TmFtZXM6TS5zcGxpdFJlY29yZCh7Y2hhcmFjdGVyOk0uc3RyaW5nKCksaXRlbTpNLnN0cmluZygpfSl9KX07JGjNj19vbmNlLm1ldGEobWV0YSk7XG5cblxuaGFyZGVuKG1ldGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmU9YXN5bmMoemNmLHByaXZhdGVBcmdzLGJhZ2dhZ2UpPT57XG5jb25zdCB0ZXJtcz16Y2YuZ2V0VGVybXMoKTtcblxuY29uc3QgYXNzZXROYW1lcz10ZXJtcy5hc3NldE5hbWVzO1xuXG4vL1xuLy9cbi8vXG5jb25zdHtjaGFyYWN0ZXJNaW50LGl0ZW1NaW50fT1hd2FpdCBwcm92aWRlQWxsKGJhZ2dhZ2Use1xuY2hhcmFjdGVyTWludDooKT0+XG56Y2YubWFrZVpDRk1pbnQoYXNzZXROYW1lcy5jaGFyYWN0ZXIsQXNzZXRLaW5kLkNPUFlfQkFHKSxcbml0ZW1NaW50OigpPT56Y2YubWFrZVpDRk1pbnQoYXNzZXROYW1lcy5pdGVtLEFzc2V0S2luZC5DT1BZX0JBRyl9KTtcblxuXG5jb25zdCBjaGFyYWN0ZXJJc3N1ZXJSZWNvcmQ9Y2hhcmFjdGVyTWludC5nZXRJc3N1ZXJSZWNvcmQoKTtcbmNvbnN0IGl0ZW1Jc3N1ZXJSZWNvcmQ9aXRlbU1pbnQuZ2V0SXNzdWVyUmVjb3JkKCk7XG5cbmNvbnN0e3Bvd2VycyxjbG9jayxzZWVkfT1wcml2YXRlQXJncztcblxuY29uc3R7XG5taW50RmVlLFxucm95YWx0eVJhdGUsXG5wbGF0Zm9ybUZlZVJhdGUsXG5taW50Um95YWx0eVJhdGUsXG5taW50UGxhdGZvcm1GZWVSYXRlLFxucm95YWx0eURlcG9zaXRGYWNldCxcbnBsYXRmb3JtRmVlRGVwb3NpdEZhY2V0LFxubWluVW5jb21tb25SYXRpbmcsXG5icmFuZHM6e01vbmV5OnBheW1lbnRCcmFuZH19PVxudGVybXM7XG5cbmNvbnN0e21ha2VSZWNvcmRlcktpdH09cHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzKFxuYmFnZ2FnZSxcbnBvd2Vycy5tYXJzaGFsbGVyKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVjb3JkZXJLaXRzPWF3YWl0IHByb3ZpZGVLcmVhZEtpdFJlY29yZGVyS2l0cyhcbmJhZ2dhZ2UsXG5wb3dlcnMuc3RvcmFnZU5vZGUsXG5tYWtlUmVjb3JkZXJLaXQpO1xuXG5cbmFzc2VydChwYXltZW50QnJhbmQsJ21pc3NpbmcgcGF5bWVudEJyYW5kJyk7XG5jb25zdCBtaW50RmVlQW1vdW50PUFtb3VudE1hdGgubWFrZShwYXltZW50QnJhbmQsbWludEZlZSk7XG5cbmNvbnN0IG9iamVjdFRvUmF0aW89KGJyYW5kLHtudW1lcmF0b3IsZGVub21pbmF0b3J9KT0+e1xucmV0dXJuIG1ha2VSYXRpbyhudW1lcmF0b3IsYnJhbmQsZGVub21pbmF0b3IsYnJhbmQpO1xuIH07XG5jb25zdCBtaW50Um95YWx0eVJhdGVSYXRpbz1vYmplY3RUb1JhdGlvKHBheW1lbnRCcmFuZCxtaW50Um95YWx0eVJhdGUpO1xuY29uc3QgbWludFBsYXRmb3JtRmVlUmF0aW89b2JqZWN0VG9SYXRpbyhwYXltZW50QnJhbmQsbWludFBsYXRmb3JtRmVlUmF0ZSk7XG5jb25zdCByb3lhbHR5UmF0ZVJhdGlvPW9iamVjdFRvUmF0aW8ocGF5bWVudEJyYW5kLHJveWFsdHlSYXRlKTtcbmNvbnN0IHBsYXRmb3JtRmVlUmF0aW89b2JqZWN0VG9SYXRpbyhwYXltZW50QnJhbmQscGxhdGZvcm1GZWVSYXRlKTtcblxuY29uc3QgbWFrZUtyZWFkS2l0PXByZXBhcmVLcmVhZEtpdChcbmJhZ2dhZ2UsXG56Y2YsXG57XG5zZWVkLFxubWludEZlZUFtb3VudCxcbnJveWFsdHlSYXRlOnJveWFsdHlSYXRlUmF0aW8sXG5wbGF0Zm9ybUZlZVJhdGU6cGxhdGZvcm1GZWVSYXRpbyxcbm1pbnRSb3lhbHR5UmF0ZTptaW50Um95YWx0eVJhdGVSYXRpbyxcbm1pbnRQbGF0Zm9ybUZlZVJhdGU6bWludFBsYXRmb3JtRmVlUmF0aW8sXG5yb3lhbHR5RGVwb3NpdEZhY2V0LFxucGxhdGZvcm1GZWVEZXBvc2l0RmFjZXQsXG5wYXltZW50QnJhbmQsXG5taW5VbmNvbW1vblJhdGluZ30sXG5cbmhhcmRlbih7XG5yZWNvcmRlcktpdHMsXG5jaGFyYWN0ZXJNaW50LFxuY2hhcmFjdGVySXNzdWVyUmVjb3JkLFxuaXRlbUlzc3VlclJlY29yZCxcbml0ZW1NaW50LFxuY2xvY2ssXG5zdG9yYWdlTm9kZTpwb3dlcnMuc3RvcmFnZU5vZGUsXG5tYWtlUmVjb3JkZXJLaXR9KSk7XG5cblxuXG5jb25zdCBrcmVhZEtpdD1wcm92aWRlKGJhZ2dhZ2UsJ2tpdFNpbmdsZXRvbicsKCk9Pm1ha2VLcmVhZEtpdCgpKTtcblxuY29uc3R7bWFrZUR1cmFibGVHb3Zlcm5vckZhY2V0fT1oYW5kbGVQYXJhbUdvdmVybmFuY2UoXG56Y2YsXG5wcml2YXRlQXJncy5pbml0aWFsUG9zZXJJbnZpdGF0aW9uLFxue30sXG5wb3dlcnMuc3RvcmFnZU5vZGUsXG5wb3dlcnMubWFyc2hhbGxlcik7XG5cblxuY29uc3R7Z292ZXJub3JGYWNldH09bWFrZUR1cmFibGVHb3Zlcm5vckZhY2V0KFxuYmFnZ2FnZSxcbmtyZWFkS2l0LmNyZWF0b3IsXG57XG5wdWJsaXNoSXRlbUNvbGxlY3Rpb246KHByaWNlLGl0ZW1zVG9TZWxsKT0+XG5rcmVhZEtpdC5jcmVhdG9yLnB1Ymxpc2hJdGVtQ29sbGVjdGlvbihwcmljZSxpdGVtc1RvU2VsbCl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmNyZWF0b3JGYWNldDpnb3Zlcm5vckZhY2V0LFxuLy9cbnB1YmxpY0ZhY2V0OmtyZWFkS2l0LnB1YmxpY30pO1xuXG4gfTskaM2PX29uY2UucHJlcGFyZShwcmVwYXJlKTtcblxuaGFyZGVuKHByZXBhcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWV0YSI6WyJtZXRhIl0sInByZXBhcmUiOlsicHJlcGFyZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFjHZlxaMAAMWjAAAlAAAAa3JlYWQtY29udHJhY3QtdjAuMS4wL3NyYy9rcmVhZEtpdC5qc3siaW1wb3J0cyI6WyIuL21hcmtldC1tZXRyaWNzLmpzIiwiQGFnb3JpYy9hc3NlcnQiLCJAYWdvcmljL2VydHAiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b25lL2R1cmFibGUuanMiLCJAYWdvcmljL25vdGlmaWVyL3N1YnNjcmliZS5qcyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCIuL2Vycm9ycy5qcyIsIi4vdXRpbHMuanMiLCIuL3RleHQuanMiLCJAYWdvcmljL3N0b3JlIiwiLi90eXBlLWd1YXJkcy5qcyIsIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvaW5kZXguanMiLCJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L3JhdGlvLmpzIiwiQGFnb3JpYy96b2UvZXhwb3J0ZWQuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlS3JlYWRLaXQiLCJwcm92aWRlS3JlYWRLaXRSZWNvcmRlcktpdHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdXBkYXRlQ29sbGVjdGlvbk1ldHJpY3MsYXNzZXJ0LEFtb3VudE1hdGgsQnJhbmRTaGFwZSxwcmVwYXJlRXhvQ2xhc3NLaXQsTSxtYWtlRHVyYWJsZVpvbmUsc3Vic2NyaWJlTGF0ZXN0LEUsZXJyb3JzLG1ha2VDaGFyYWN0ZXJOZnRPYmpzLG1ha2VDb3B5QmFnQW1vdW50U2hhcGUsYWRkQWxsVG9NYXAscHJvdmlkZVJlY29yZGVyS2l0cyx0ZXh0LG1ha2VDb3B5QmFnLG11c3RNYXRjaCxDaGFyYWN0ZXJJLEhlbHBlckksSXRlbUksTWFya2V0SSxQdWJsaWNJLENyZWF0b3JJLENoYXJhY3Rlckd1YXJkQmFnU2hhcGUsSXRlbUd1YXJkLEl0ZW1HdWFyZEJhZ1NoYXBlLEl0ZW1SZWNvcmRlckd1YXJkLE1hcmtldFJlY29yZGVyR3VhcmQsTWFya2V0TWV0cmljc0d1YXJkLFJhcml0eUd1YXJkLEJhc2VDaGFyYWN0ZXJHdWFyZCxNYXJrZXRFbnRyeUd1YXJkLENoYXJhY3RlckVudHJ5R3VhcmQsQ2hhcmFjdGVyUmVjb3JkZXJHdWFyZCxhdG9taWNSZWFycmFuZ2UsbXVsdGlwbHlCeTskaM2PX2ltcG9ydHMoW1tcIi4vbWFya2V0LW1ldHJpY3MuanNcIiwgW1tcInVwZGF0ZUNvbGxlY3Rpb25NZXRyaWNzXCIsIFskaM2PX2EgPT4gKHVwZGF0ZUNvbGxlY3Rpb25NZXRyaWNzID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9hc3NlcnRcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXSxbXCJCcmFuZFNoYXBlXCIsIFskaM2PX2EgPT4gKEJyYW5kU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzXCIsIFtbXCJtYWtlRHVyYWJsZVpvbmVcIiwgWyRozY9fYSA9PiAobWFrZUR1cmFibGVab25lID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUxhdGVzdFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVMYXRlc3QgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCIuL2Vycm9ycy5qc1wiLCBbW1wiZXJyb3JzXCIsIFskaM2PX2EgPT4gKGVycm9ycyA9ICRozY9fYSldXV1dLFtcIi4vdXRpbHMuanNcIiwgW1tcIm1ha2VDaGFyYWN0ZXJOZnRPYmpzXCIsIFskaM2PX2EgPT4gKG1ha2VDaGFyYWN0ZXJOZnRPYmpzID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5QmFnQW1vdW50U2hhcGVcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlCYWdBbW91bnRTaGFwZSA9ICRozY9fYSldXSxbXCJhZGRBbGxUb01hcFwiLCBbJGjNj19hID0+IChhZGRBbGxUb01hcCA9ICRozY9fYSldXSxbXCJwcm92aWRlUmVjb3JkZXJLaXRzXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVSZWNvcmRlcktpdHMgPSAkaM2PX2EpXV1dXSxbXCIuL3RleHQuanNcIiwgW1tcInRleHRcIiwgWyRozY9fYSA9PiAodGV4dCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VDb3B5QmFnXCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5QmFnID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXSxbXCIuL3R5cGUtZ3VhcmRzLmpzXCIsIFtbXCJDaGFyYWN0ZXJJXCIsIFskaM2PX2EgPT4gKENoYXJhY3RlckkgPSAkaM2PX2EpXV0sW1wiSGVscGVySVwiLCBbJGjNj19hID0+IChIZWxwZXJJID0gJGjNj19hKV1dLFtcIkl0ZW1JXCIsIFskaM2PX2EgPT4gKEl0ZW1JID0gJGjNj19hKV1dLFtcIk1hcmtldElcIiwgWyRozY9fYSA9PiAoTWFya2V0SSA9ICRozY9fYSldXSxbXCJQdWJsaWNJXCIsIFskaM2PX2EgPT4gKFB1YmxpY0kgPSAkaM2PX2EpXV0sW1wiQ3JlYXRvcklcIiwgWyRozY9fYSA9PiAoQ3JlYXRvckkgPSAkaM2PX2EpXV0sW1wiQ2hhcmFjdGVyR3VhcmRCYWdTaGFwZVwiLCBbJGjNj19hID0+IChDaGFyYWN0ZXJHdWFyZEJhZ1NoYXBlID0gJGjNj19hKV1dLFtcIkl0ZW1HdWFyZFwiLCBbJGjNj19hID0+IChJdGVtR3VhcmQgPSAkaM2PX2EpXV0sW1wiSXRlbUd1YXJkQmFnU2hhcGVcIiwgWyRozY9fYSA9PiAoSXRlbUd1YXJkQmFnU2hhcGUgPSAkaM2PX2EpXV0sW1wiSXRlbVJlY29yZGVyR3VhcmRcIiwgWyRozY9fYSA9PiAoSXRlbVJlY29yZGVyR3VhcmQgPSAkaM2PX2EpXV0sW1wiTWFya2V0UmVjb3JkZXJHdWFyZFwiLCBbJGjNj19hID0+IChNYXJrZXRSZWNvcmRlckd1YXJkID0gJGjNj19hKV1dLFtcIk1hcmtldE1ldHJpY3NHdWFyZFwiLCBbJGjNj19hID0+IChNYXJrZXRNZXRyaWNzR3VhcmQgPSAkaM2PX2EpXV0sW1wiUmFyaXR5R3VhcmRcIiwgWyRozY9fYSA9PiAoUmFyaXR5R3VhcmQgPSAkaM2PX2EpXV0sW1wiQmFzZUNoYXJhY3Rlckd1YXJkXCIsIFskaM2PX2EgPT4gKEJhc2VDaGFyYWN0ZXJHdWFyZCA9ICRozY9fYSldXSxbXCJNYXJrZXRFbnRyeUd1YXJkXCIsIFskaM2PX2EgPT4gKE1hcmtldEVudHJ5R3VhcmQgPSAkaM2PX2EpXV0sW1wiQ2hhcmFjdGVyRW50cnlHdWFyZFwiLCBbJGjNj19hID0+IChDaGFyYWN0ZXJFbnRyeUd1YXJkID0gJGjNj19hKV1dLFtcIkNoYXJhY3RlclJlY29yZGVyR3VhcmRcIiwgWyRozY9fYSA9PiAoQ2hhcmFjdGVyUmVjb3JkZXJHdWFyZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvaW5kZXguanNcIiwgW1tcImF0b21pY1JlYXJyYW5nZVwiLCBbJGjNj19hID0+IChhdG9taWNSZWFycmFuZ2UgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L3JhdGlvLmpzXCIsIFtbXCJtdWx0aXBseUJ5XCIsIFskaM2PX2EgPT4gKG11bHRpcGx5QnkgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3pvZS9leHBvcnRlZC5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVLcmVhZEtpdD0oXG5iYWdnYWdlLFxuemNmLFxue1xuc2VlZCxcbm1pbnRGZWVBbW91bnQsXG5yb3lhbHR5UmF0ZSxcbnBsYXRmb3JtRmVlUmF0ZSxcbm1pbnRSb3lhbHR5UmF0ZSxcbm1pbnRQbGF0Zm9ybUZlZVJhdGUsXG5yb3lhbHR5RGVwb3NpdEZhY2V0LFxucGxhdGZvcm1GZWVEZXBvc2l0RmFjZXQsXG5wYXltZW50QnJhbmQsXG5taW5VbmNvbW1vblJhdGluZ30sXG5cbntcbmNoYXJhY3Rlcklzc3VlclJlY29yZCxcbmNoYXJhY3Rlck1pbnQsXG5pdGVtSXNzdWVyUmVjb3JkLFxuaXRlbU1pbnQsXG5jbG9jayxcbm1ha2VSZWNvcmRlcktpdCxcbnJlY29yZGVyS2l0czp7XG5jaGFyYWN0ZXJLaXQsXG5pdGVtS2l0LFxubWFya2V0Q2hhcmFjdGVyS2l0LFxubWFya2V0Q2hhcmFjdGVyTWV0cmljc0tpdCxcbm1hcmtldEl0ZW1LaXQsXG5tYXJrZXRJdGVtTWV0cmljc0tpdH19KT0+XG5cblxue1xuY29uc3R7YnJhbmQ6Y2hhcmFjdGVyQnJhbmR9PWNoYXJhY3Rlcklzc3VlclJlY29yZDtcbmNvbnN0e2JyYW5kOml0ZW1CcmFuZH09aXRlbUlzc3VlclJlY29yZDtcblxuY29uc3QgbWFya2V0SXRlbU5vZGU9bWFya2V0SXRlbUtpdC5yZWNvcmRlci5nZXRTdG9yYWdlTm9kZSgpO1xuY29uc3QgbWFya2V0Q2hhcmFjdGVyTm9kZT1tYXJrZXRDaGFyYWN0ZXJLaXQucmVjb3JkZXIuZ2V0U3RvcmFnZU5vZGUoKTtcblxuY29uc3QgY2hhcmFjdGVyTm9kZT1jaGFyYWN0ZXJLaXQucmVjb3JkZXIuZ2V0U3RvcmFnZU5vZGUoKTtcblxuY29uc3QgY2hhcmFjdGVyU2hhcGU9bWFrZUNvcHlCYWdBbW91bnRTaGFwZShcbmNoYXJhY3RlckJyYW5kLFxuQ2hhcmFjdGVyR3VhcmRCYWdTaGFwZSk7XG5cbmNvbnN0IGl0ZW1TaGFwZT1tYWtlQ29weUJhZ0Ftb3VudFNoYXBlKGl0ZW1CcmFuZCxJdGVtR3VhcmRCYWdTaGFwZSk7XG5cbnJldHVybiBwcmVwYXJlRXhvQ2xhc3NLaXQoXG5iYWdnYWdlLFxuJ0tyZWFkS2l0JyxcbntcbmhlbHBlcjpIZWxwZXJJLFxuY2hhcmFjdGVyOkNoYXJhY3RlckksXG5pdGVtOkl0ZW1JLFxubWFya2V0Ok1hcmtldEksXG5wdWJsaWM6UHVibGljSSxcbmNyZWF0b3I6Q3JlYXRvckl9LFxuXG4oKT0+e1xuY29uc3Qgem9uZT1tYWtlRHVyYWJsZVpvbmUoYmFnZ2FnZSk7XG5yZXR1cm57XG5jaGFyYWN0ZXI6aGFyZGVuKHtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmVudHJpZXM6em9uZS5tYXBTdG9yZSgnY2hhcmFjdGVycycse1xua2V5U2hhcGU6TS5zdHJpbmcoKSxcbnZhbHVlU2hhcGU6TS5vcihDaGFyYWN0ZXJFbnRyeUd1YXJkLE0uYXJyYXlPZihNLnN0cmluZygpKSl9KSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYmFzZXM6em9uZS5tYXBTdG9yZSgnYmFzZUNoYXJhY3RlcnMnLHtcbmtleVNoYXBlOk0ubnVtYmVyKCksXG52YWx1ZVNoYXBlOkJhc2VDaGFyYWN0ZXJHdWFyZH0pfSksXG5cblxuaXRlbTpoYXJkZW4oe1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmVudHJpZXM6em9uZS5tYXBTdG9yZSgnaXRlbXMnLHtcbmtleVNoYXBlOk0ubnVtYmVyKCksXG52YWx1ZVNoYXBlOkl0ZW1SZWNvcmRlckd1YXJkfSksXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5iYXNlczp6b25lLm1hcFN0b3JlKCdiYXNlSXRlbXMnLHtcbmtleVNoYXBlOlJhcml0eUd1YXJkLFxudmFsdWVTaGFwZTpNLmFycmF5T2YoSXRlbUd1YXJkKX0pfSksXG5cblxubWFya2V0OmhhcmRlbih7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY2hhcmFjdGVyRW50cmllczp6b25lLm1hcFN0b3JlKCdjaGFyYWN0ZXJNYXJrZXQnLHtcbmtleVNoYXBlOk0uc3RyaW5nKCksXG52YWx1ZVNoYXBlOk1hcmtldEVudHJ5R3VhcmR9KSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbml0ZW1FbnRyaWVzOnpvbmUubWFwU3RvcmUoJ2l0ZW1NYXJrZXQnLHtcbmtleVNoYXBlOk0ubnVtYmVyKCksXG52YWx1ZVNoYXBlOk1hcmtldEVudHJ5R3VhcmR9KSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5tZXRyaWNzOnpvbmUubWFwU3RvcmUoJ21hcmtldE1ldHJpY3MnLHtcbmtleVNoYXBlOk0ub3IoJ2NoYXJhY3RlcicsJ2l0ZW0nKSxcbnZhbHVlU2hhcGU6TWFya2V0TWV0cmljc0d1YXJkfSl9KX07XG5cblxuXG4gfSxcbntcbmhlbHBlcjp7XG4gICAgICBhc3luYyBnZXRUaW1lU3RhbXAoKXtcbnJldHVybiBFKGNsb2NrKS5nZXRDdXJyZW50VGltZXN0YW1wKCk7XG4gfSxcbnJhbmRvbU51bWJlcigpe1xuc2VlZHw9MDtcbnNlZWQ9c2VlZCsweDZkMmI3OWY1fDA7XG5sZXQgdD1NYXRoLmltdWwoc2VlZF5zZWVkPj4+MTUsMXxzZWVkKTtcbi8vXG50PXQrTWF0aC5pbXVsKHRedD4+PjcsNjF8dCledDtcbnJldHVybigodF50Pj4+MTQpPj4+MCkvNDI5NDk2NzI5NjtcbiB9fSxcblxuY2hhcmFjdGVyOntcbmNhbGN1bGF0ZUxldmVsKG5hbWUpe1xuY29uc3QgY2hhcmFjdGVyPXRoaXMuc3RhdGUuY2hhcmFjdGVyLmVudHJpZXMuZ2V0KG5hbWUpO1xubGV0IGxldmVsPWNoYXJhY3Rlci5jaGFyYWN0ZXIubGV2ZWw7XG5cbmNvbnN0IGl0ZW1MZXZlbHM9Y2hhcmFjdGVyLmludmVudG9yeS5cbmdldEFtb3VudEFsbG9jYXRlZCgnSXRlbScpLlxudmFsdWUucGF5bG9hZC5tYXAoKFt2YWx1ZSxfc3VwcGx5XSk9PntcbnJldHVybiB2YWx1ZS5sZXZlbDtcbiB9KTtcblxubGV2ZWw9aXRlbUxldmVscy5yZWR1Y2UoKGFjYyx2YWx1ZSk9PmFjYyt2YWx1ZSxsZXZlbCk7XG5yZXR1cm4gbGV2ZWw7XG4gfSxcbnZhbGlkYXRlSW52ZW50b3J5U3RhdGUoaW52ZW50b3J5U3RhdGUpe1xuY29uc3QgaXRlbVR5cGVzPWludmVudG9yeVN0YXRlLm1hcCgoaXRlbSk9Pml0ZW0uY2F0ZWdvcnkpO1xucmV0dXJuIGl0ZW1UeXBlcy5sZW5ndGg9PT1uZXcgU2V0KGl0ZW1UeXBlcykuc2l6ZTtcbiB9LFxuaXNOYW1lVW5pcXVlKG5hbWUpe1xucmV0dXJuIXRoaXMuc3RhdGUuY2hhcmFjdGVyLmVudHJpZXMuaGFzKG5hbWUpO1xuIH0sXG5nZXRSYW5kb21CYXNlSW5kZXgoKXtcbmNvbnN0e2hlbHBlcn09dGhpcy5mYWNldHM7XG5jb25zdHtjaGFyYWN0ZXI6Y2hhcmFjdGVyU3RhdGV9PXRoaXMuc3RhdGU7XG5jb25zdCBudW1iZXI9TWF0aC5mbG9vcihcbmhlbHBlci5yYW5kb21OdW1iZXIoKSpjaGFyYWN0ZXJTdGF0ZS5iYXNlcy5nZXRTaXplKCkpO1xuXG5yZXR1cm4gQXJyYXkuZnJvbShjaGFyYWN0ZXJTdGF0ZS5iYXNlcy5rZXlzKCkpW251bWJlcl07XG4gfSxcbi8qXG5cblxuICAgICAgICAgKi9cbmluaXRpYWxpemVCYXNlQ2hhcmFjdGVycyhiYXNlQ2hhcmFjdGVycyl7XG5jb25zdHtjaGFyYWN0ZXI6Y2hhcmFjdGVyU3RhdGV9PXRoaXMuc3RhdGU7XG5pZihjaGFyYWN0ZXJTdGF0ZS5iYXNlcy5nZXRTaXplKCk+MClyZXR1cm47XG5hZGRBbGxUb01hcChjaGFyYWN0ZXJTdGF0ZS5iYXNlcyxiYXNlQ2hhcmFjdGVycyk7XG4gfSxcbi8qXG5cbiAgICAgICAgICovXG4gICAgICBhc3luYyBtYWtlSW52ZW50b3J5UmVjb3JkZXJLaXQocGF0aCl7XG5jb25zdCBub2RlPWF3YWl0IEUoY2hhcmFjdGVyTm9kZSkubWFrZUNoaWxkTm9kZShcbiBgaW52ZW50b3J5LSR7cGF0aH1gKTtcblxucmV0dXJuIG1ha2VSZWNvcmRlcktpdChcbm5vZGUsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuTS5hcnJheU9mKFtJdGVtR3VhcmQsTS5uYXQoKV0pKTtcblxuXG4gfSxcbm1pbnQoKXtcbi8qXG5cblxuXG4gICAgICAgICAgICovXG5jb25zdCBoYW5kbGVyPWFzeW5jKHNlYXQsb2ZmZXJBcmdzKT0+e1xuY29uc3R7XG5oZWxwZXIsXG5jaGFyYWN0ZXI6Y2hhcmFjdGVyRmFjZXQsXG5pdGVtLFxubWFya2V0Om1hcmtldEZhY2V0fT1cbnRoaXMuZmFjZXRzO1xuXG5jb25zdHtjaGFyYWN0ZXI6Y2hhcmFjdGVyU3RhdGV9PXRoaXMuc3RhdGU7XG5cbmNvbnN0e2dpdmV9PXNlYXQuZ2V0UHJvcG9zYWwoKTtcbm11c3RNYXRjaChcbm9mZmVyQXJncyxcbk0uc3BsaXRSZWNvcmQoe1xubmFtZTpNLnN0cmluZyhoYXJkZW4oe3N0cmluZ0xlbmd0aExpbWl0OjIwfSkpfSksXG5cbidvZmZlckFyZ3MnKTtcblxuXG5jb25zdCBuZXdDaGFyYWN0ZXJOYW1lPW9mZmVyQXJncy5uYW1lO1xuXG5BbW91bnRNYXRoLmlzR1RFKGdpdmUuUHJpY2UsbWludEZlZUFtb3VudCl8fFxuYXNzZXJ0LmZhaWwoZXJyb3JzLm1pbnRGZWVUb29Mb3cpO1xuXG4hY2hhcmFjdGVyU3RhdGUuZW50cmllcy5nZXQoJ25hbWVzJykuaW5jbHVkZXMobmV3Q2hhcmFjdGVyTmFtZSl8fFxuYXNzZXJ0LmZhaWwoZXJyb3JzLm5hbWVUYWtlbihuZXdDaGFyYWN0ZXJOYW1lKSk7XG5cbmNoYXJhY3RlclN0YXRlLmJhc2VzLmdldFNpemUoKT4wfHxhc3NlcnQuZmFpbChlcnJvcnMuYWxsTWludGVkKTtcblxuY29uc3QgcmU9L15bYS16QS1aMC05Xy1dKiQvO1xucmUudGVzdChuZXdDaGFyYWN0ZXJOYW1lKSYmbmV3Q2hhcmFjdGVyTmFtZSE9PSduYW1lcyd8fFxuYXNzZXJ0LmZhaWwoZXJyb3JzLmludmFsaWROYW1lKTtcblxuY29uc3QgYmFzZUluZGV4PWNoYXJhY3RlckZhY2V0LmdldFJhbmRvbUJhc2VJbmRleCgpO1xuY29uc3QgYmFzZUNoYXJhY3Rlcj1jaGFyYWN0ZXJTdGF0ZS5iYXNlcy5nZXQoYmFzZUluZGV4KTtcblxuY2hhcmFjdGVyU3RhdGUuYmFzZXMuZGVsZXRlKGJhc2VJbmRleCk7XG5cbmNoYXJhY3RlclN0YXRlLmVudHJpZXMuc2V0KFxuJ25hbWVzJyxcbmhhcmRlbihbXG4uLi5jaGFyYWN0ZXJTdGF0ZS5lbnRyaWVzLmdldCgnbmFtZXMnKSxcbm5ld0NoYXJhY3Rlck5hbWVdKSk7XG5cblxuXG4vL1xuYXdhaXQgbnVsbDtcbnRyeXtcbmNvbnN0IGN1cnJlbnRUaW1lPWF3YWl0IGhlbHBlci5nZXRUaW1lU3RhbXAoKTtcblxuY29uc3RbbmV3Q2hhcmFjdGVyQW1vdW50MSxuZXdDaGFyYWN0ZXJBbW91bnQyXT1cbm1ha2VDaGFyYWN0ZXJOZnRPYmpzKFxubmV3Q2hhcmFjdGVyTmFtZSxcbmJhc2VDaGFyYWN0ZXIsXG5jaGFyYWN0ZXJTdGF0ZS5lbnRyaWVzLmdldFNpemUoKSxcbmN1cnJlbnRUaW1lKS5cbm1hcCgoY2hhcmFjdGVyKT0+XG5BbW91bnRNYXRoLm1ha2UoXG5jaGFyYWN0ZXJCcmFuZCxcbm1ha2VDb3B5QmFnKGhhcmRlbihbW2NoYXJhY3Rlciwxbl1dKSkpKTtcblxuXG5cbmNvbnN0e3pjZlNlYXQsdXNlclNlYXR9PXpjZi5tYWtlRW1wdHlTZWF0S2l0KCk7XG5cbmNvbnN0e3pjZlNlYXQ6aW52ZW50b3J5U2VhdH09emNmLm1ha2VFbXB0eVNlYXRLaXQoKTtcbi8vXG5jaGFyYWN0ZXJNaW50Lm1pbnRHYWlucyh7QXNzZXQ6bmV3Q2hhcmFjdGVyQW1vdW50MX0sc2VhdCk7XG5jaGFyYWN0ZXJNaW50Lm1pbnRHYWlucyhcbntDaGFyYWN0ZXJLZXk6bmV3Q2hhcmFjdGVyQW1vdW50Mn0sXG5pbnZlbnRvcnlTZWF0KTtcblxuXG5jb25zdCBpbnZlbnRvcnlLaXQ9XG5hd2FpdCBjaGFyYWN0ZXJGYWNldC5tYWtlSW52ZW50b3J5UmVjb3JkZXJLaXQobmV3Q2hhcmFjdGVyTmFtZSk7XG5cbmF3YWl0IGl0ZW0ubWludERlZmF1bHRCYXRjaChpbnZlbnRvcnlTZWF0KTtcblxuY29uc3Qgcm95YWx0eUZlZT1tdWx0aXBseUJ5KGdpdmUuUHJpY2UsbWludFJveWFsdHlSYXRlKTtcbmNvbnN0IHBsYXRmb3JtRmVlPW11bHRpcGx5QnkoZ2l2ZS5QcmljZSxtaW50UGxhdGZvcm1GZWVSYXRlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHRyYW5zZmVycz1bXTtcbnRyYW5zZmVycy5wdXNoKFtcbnNlYXQsXG56Y2ZTZWF0LFxue1ByaWNlOnJveWFsdHlGZWV9LFxue1JveWFsdHk6cm95YWx0eUZlZX1dKTtcblxudHJhbnNmZXJzLnB1c2goW1xuc2VhdCxcbnpjZlNlYXQsXG57UHJpY2U6cGxhdGZvcm1GZWV9LFxue1BsYXRmb3JtRmVlOnBsYXRmb3JtRmVlfV0pO1xuXG5cbnRyeXtcbmF0b21pY1JlYXJyYW5nZSh6Y2YsaGFyZGVuKHRyYW5zZmVycykpO1xuIH1jYXRjaChlKXtcbmFzc2VydC5mYWlsKGVycm9ycy5yZWFycmFuZ2VFcnJvcik7XG4gfVxuXG5zZWF0LmV4aXQoKTtcbnpjZlNlYXQuZXhpdCgpO1xuXG5jb25zdCBwYXlvdXRzPWF3YWl0IEUodXNlclNlYXQpLmdldFBheW91dHMoKTtcbmNvbnN0IHJveWFsdHlQYXlvdXQ9YXdhaXQgcGF5b3V0cy5Sb3lhbHR5O1xuY29uc3QgcGxhdGZvcm1GZWVQYXlvdXQ9YXdhaXQgcGF5b3V0cy5QbGF0Zm9ybUZlZTtcblxuYXdhaXQgRShyb3lhbHR5RGVwb3NpdEZhY2V0KS5yZWNlaXZlKHJveWFsdHlQYXlvdXQpO1xuYXdhaXQgRShwbGF0Zm9ybUZlZURlcG9zaXRGYWNldCkucmVjZWl2ZShwbGF0Zm9ybUZlZVBheW91dCk7XG5cbi8vXG5jb25zdCBjaGFyYWN0ZXI9e1xubmFtZTpuZXdDaGFyYWN0ZXJOYW1lLFxuY2hhcmFjdGVyOm5ld0NoYXJhY3RlckFtb3VudDEudmFsdWUucGF5bG9hZFswXVswXSxcbmludmVudG9yeTppbnZlbnRvcnlTZWF0LFxuaW52ZW50b3J5S2l0LFxuaGlzdG9yeTpbXG57XG50eXBlOidtaW50JyxcbmRhdGE6bmV3Q2hhcmFjdGVyQW1vdW50MS52YWx1ZVswXSxcbnRpbWVzdGFtcDpjdXJyZW50VGltZX1dfTtcblxuXG5cblxuYWRkQWxsVG9NYXAoY2hhcmFjdGVyU3RhdGUuZW50cmllcyxbXG5bY2hhcmFjdGVyLm5hbWUsaGFyZGVuKGNoYXJhY3RlcildXSk7XG5cblxuLy9cbm1hcmtldEZhY2V0LnVwZGF0ZU1ldHJpY3MoJ2NoYXJhY3Rlcicse1xuY29sbGVjdGlvblNpemU6dHJ1ZSxcbmF2ZXJhZ2VMZXZlbDp7XG50eXBlOidhZGQnLFxudmFsdWU6Y2hhcmFjdGVyLmNoYXJhY3Rlci5sZXZlbH19KTtcblxuXG5cbmNoYXJhY3RlcktpdC5yZWNvcmRlci53cml0ZShcbi8vXG4oKHtzZWF0Ol9vbWl0U2VhdCwuLi5jaGFyfSk9PmNoYXIpKGNoYXJhY3RlcikpO1xuXG5cbmludmVudG9yeUtpdC5yZWNvcmRlci53cml0ZShcbmludmVudG9yeVNlYXQuZ2V0QW1vdW50QWxsb2NhdGVkKCdJdGVtJykudmFsdWUucGF5bG9hZCk7XG5cblxucmV0dXJuIHRleHQubWludENoYXJhY3RlclJldHVybjtcbiB9Y2F0Y2goZSl7XG4vL1xuYWRkQWxsVG9NYXAoY2hhcmFjdGVyU3RhdGUuYmFzZXMsW1tiYXNlSW5kZXgsYmFzZUNoYXJhY3Rlcl1dKTtcbmNoYXJhY3RlclN0YXRlLmVudHJpZXMuc2V0KFxuJ25hbWVzJyxcbmhhcmRlbihcbmNoYXJhY3RlclN0YXRlLmVudHJpZXMuXG5nZXQoJ25hbWVzJykuXG5maWx0ZXIoKG5hbWUpPT5uYW1lIT09bmV3Q2hhcmFjdGVyTmFtZSkpKTtcblxuXG5yZXR1cm4gZTtcbiB9XG4gfTtcbnJldHVybiB6Y2YubWFrZUludml0YXRpb24oXG5oYW5kbGVyLFxuJ21pbnRDaGFyYWN0ZXJOZnRzJyxcbnVuZGVmaW5lZCxcbnVuZGVmaW5lZCk7XG5cbiB9LFxuZXF1aXAoKXtcbi8qXG5cbiAgICAgICAgICAgKi9cbmNvbnN0IGhhbmRsZXI9KHNlYXQpPT57XG5jb25zdHtjaGFyYWN0ZXI6Y2hhcmFjdGVyRmFjZXR9PXRoaXMuZmFjZXRzO1xuY29uc3R7Y2hhcmFjdGVyOmNoYXJhY3RlclN0YXRlfT10aGlzLnN0YXRlO1xuXG4vL1xuY29uc3QgcHJvdmlkZWRJdGVtQW1vdW50PXNlYXQuZ2V0QW1vdW50QWxsb2NhdGVkKCdJdGVtJyk7XG5jb25zdCBwcm92aWRlZENoYXJhY3RlcktleUFtb3VudD1cbnNlYXQuZ2V0QW1vdW50QWxsb2NhdGVkKCdDaGFyYWN0ZXJLZXkxJyk7XG5jb25zdCBwcm92aWRlZENoYXJhY3RlcktleT1cbnByb3ZpZGVkQ2hhcmFjdGVyS2V5QW1vdW50LnZhbHVlLnBheWxvYWRbMF1bMF07XG5jb25zdCBjaGFyYWN0ZXJOYW1lPXByb3ZpZGVkQ2hhcmFjdGVyS2V5Lm5hbWU7XG5cbi8vXG5jb25zdCBjaGFyYWN0ZXJSZWNvcmQ9Y2hhcmFjdGVyU3RhdGUuZW50cmllcy5nZXQoY2hhcmFjdGVyTmFtZSk7XG5jb25zdCBpbnZlbnRvcnlTZWF0PWNoYXJhY3RlclJlY29yZC5pbnZlbnRvcnk7XG5cbmNvbnN0e3dhbnR9PXNlYXQuZ2V0UHJvcG9zYWwoKTtcbmNvbnN0e0NoYXJhY3RlcktleTI6d2FudGVkQ2hhcmFjdGVyfT13YW50O1xuXG4vL1xuY29uc3QgaW52ZW50b3J5Q2hhcmFjdGVyS2V5PVxuaW52ZW50b3J5U2VhdC5nZXRBbW91bnRBbGxvY2F0ZWQoJ0NoYXJhY3RlcktleScpO1xuaW52ZW50b3J5Q2hhcmFjdGVyS2V5fHxhc3NlcnQuZmFpbChlcnJvcnMubm9LZXlJbkludmVudG9yeSk7XG5cbkFtb3VudE1hdGguaXNFcXVhbChcbndhbnRlZENoYXJhY3RlcixcbmludmVudG9yeUNoYXJhY3RlcktleSxcbmNoYXJhY3RlckJyYW5kKXx8XG5hc3NlcnQuZmFpbChlcnJvcnMuaW52ZW50b3J5S2V5TWlzbWF0Y2gpO1xuXG4vL1xubGV0IGludmVudG9yeT1pbnZlbnRvcnlTZWF0LlxuZ2V0Q3VycmVudEFsbG9jYXRpb24oKS5cbkl0ZW0udmFsdWUucGF5bG9hZC5tYXAoKFt2YWx1ZSxfc3VwcGx5XSk9PnZhbHVlKTtcbmlmKHByb3ZpZGVkSXRlbUFtb3VudC52YWx1ZS5wYXlsb2FkWzBdKVxuaW52ZW50b3J5PVtcbi4uLmludmVudG9yeSxcbnByb3ZpZGVkSXRlbUFtb3VudC52YWx1ZS5wYXlsb2FkWzBdWzBdXTtcblxuXG5jaGFyYWN0ZXJGYWNldC52YWxpZGF0ZUludmVudG9yeVN0YXRlKGludmVudG9yeSl8fFxuYXNzZXJ0LmZhaWwoZXJyb3JzLmR1cGxpY2F0ZUNhdGVnb3J5SW5JbnZlbnRvcnkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdHJhbnNmZXJzPVtdO1xudHJhbnNmZXJzLnB1c2goW3NlYXQsaW52ZW50b3J5U2VhdCx7SXRlbTpwcm92aWRlZEl0ZW1BbW91bnR9XSk7XG50cmFuc2ZlcnMucHVzaChbXG5zZWF0LFxuaW52ZW50b3J5U2VhdCxcbntDaGFyYWN0ZXJLZXkxOnByb3ZpZGVkQ2hhcmFjdGVyS2V5QW1vdW50fSxcbntDaGFyYWN0ZXJLZXk6cHJvdmlkZWRDaGFyYWN0ZXJLZXlBbW91bnR9XSk7XG5cbnRyYW5zZmVycy5wdXNoKFtcbmludmVudG9yeVNlYXQsXG5zZWF0LFxue0NoYXJhY3RlcktleTppbnZlbnRvcnlDaGFyYWN0ZXJLZXl9LFxue0NoYXJhY3RlcktleTI6aW52ZW50b3J5Q2hhcmFjdGVyS2V5fV0pO1xuXG5cbnRyeXtcbmF0b21pY1JlYXJyYW5nZSh6Y2YsaGFyZGVuKHRyYW5zZmVycykpO1xuIH1jYXRjaChlKXtcbmFzc2VydC5mYWlsKGVycm9ycy5yZWFycmFuZ2VFcnJvcik7XG4gfVxuXG5jaGFyYWN0ZXJSZWNvcmQuaW52ZW50b3J5S2l0LnJlY29yZGVyLndyaXRlKFxuaW52ZW50b3J5U2VhdC5nZXRBbW91bnRBbGxvY2F0ZWQoJ0l0ZW0nKS52YWx1ZS5wYXlsb2FkKTtcblxuXG5zZWF0LmV4aXQoKTtcblxucmV0dXJuIHRleHQuZXF1aXBSZXR1cm47XG4gfTtcbnJldHVybiB6Y2YubWFrZUludml0YXRpb24oXG5oYW5kbGVyLFxuJ2FkZFRvSW52ZW50b3J5JyxcbnVuZGVmaW5lZCxcbk0uc3BsaXRSZWNvcmQoe1xuZ2l2ZTp7XG5DaGFyYWN0ZXJLZXkxOk0uc3BsaXRSZWNvcmQoY2hhcmFjdGVyU2hhcGUpLFxuSXRlbTpNLnNwbGl0UmVjb3JkKGl0ZW1TaGFwZSl9LFxuXG53YW50OntcbkNoYXJhY3RlcktleTI6TS5zcGxpdFJlY29yZChjaGFyYWN0ZXJTaGFwZSl9fSkpO1xuXG5cblxuIH0sXG51bmVxdWlwKCl7XG4vKlxuXG4gICAgICAgICAgICovXG5jb25zdCBoYW5kbGVyPWFzeW5jKHNlYXQpPT57XG5jb25zdHtjaGFyYWN0ZXI6Y2hhcmFjdGVyU3RhdGV9PXRoaXMuc3RhdGU7XG5cbi8vXG5jb25zdCBwcm92aWRlZENoYXJhY3RlcktleUFtb3VudD1cbnNlYXQuZ2V0QW1vdW50QWxsb2NhdGVkKCdDaGFyYWN0ZXJLZXkxJyk7XG5jb25zdCBwcm92aWRlZENoYXJhY3RlcktleT1cbnByb3ZpZGVkQ2hhcmFjdGVyS2V5QW1vdW50LnZhbHVlLnBheWxvYWRbMF1bMF07XG5jb25zdCBjaGFyYWN0ZXJOYW1lPXByb3ZpZGVkQ2hhcmFjdGVyS2V5Lm5hbWU7XG5cbi8vXG5jb25zdCBjaGFyYWN0ZXJSZWNvcmQ9Y2hhcmFjdGVyU3RhdGUuZW50cmllcy5nZXQoY2hhcmFjdGVyTmFtZSk7XG5jb25zdCBpbnZlbnRvcnlTZWF0PWNoYXJhY3RlclJlY29yZC5pbnZlbnRvcnk7XG5wcm92aWRlZENoYXJhY3RlcktleXx8YXNzZXJ0LmZhaWwoZXJyb3JzLmludmFsaWRDaGFyYWN0ZXJLZXkpO1xuXG4vL1xuY29uc3R7d2FudH09c2VhdC5nZXRQcm9wb3NhbCgpO1xuY29uc3R7SXRlbTpyZXF1ZXN0ZWRJdGVtcyxDaGFyYWN0ZXJLZXkyOndhbnRlZENoYXJhY3Rlcn09XG53YW50O1xuXG5jb25zdCBpbnZlbnRvcnlDaGFyYWN0ZXJLZXk9XG5pbnZlbnRvcnlTZWF0LmdldEFtb3VudEFsbG9jYXRlZCgnQ2hhcmFjdGVyS2V5Jyk7XG5pbnZlbnRvcnlDaGFyYWN0ZXJLZXl8fGFzc2VydC5mYWlsKGVycm9ycy5ub0tleUluSW52ZW50b3J5KTtcblxuLy9cblxuQW1vdW50TWF0aC5pc0VxdWFsKFxud2FudGVkQ2hhcmFjdGVyLFxuaW52ZW50b3J5Q2hhcmFjdGVyS2V5LFxuY2hhcmFjdGVyQnJhbmQpfHxcbmFzc2VydC5mYWlsKGVycm9ycy5pbnZlbnRvcnlLZXlNaXNtYXRjaCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0cmFuc2ZlcnM9W107XG50cmFuc2ZlcnMucHVzaChbaW52ZW50b3J5U2VhdCxzZWF0LHtJdGVtOnJlcXVlc3RlZEl0ZW1zfV0pO1xudHJhbnNmZXJzLnB1c2goW1xuc2VhdCxcbmludmVudG9yeVNlYXQsXG57Q2hhcmFjdGVyS2V5MTpwcm92aWRlZENoYXJhY3RlcktleUFtb3VudH0sXG57Q2hhcmFjdGVyS2V5OnByb3ZpZGVkQ2hhcmFjdGVyS2V5QW1vdW50fV0pO1xuXG50cmFuc2ZlcnMucHVzaChbXG5pbnZlbnRvcnlTZWF0LFxuc2VhdCxcbntDaGFyYWN0ZXJLZXk6d2FudGVkQ2hhcmFjdGVyfSxcbntDaGFyYWN0ZXJLZXkyOndhbnRlZENoYXJhY3Rlcn1dKTtcblxuXG50cnl7XG5hdG9taWNSZWFycmFuZ2UoemNmLGhhcmRlbih0cmFuc2ZlcnMpKTtcbiB9Y2F0Y2goZSl7XG5hc3NlcnQuZmFpbChlcnJvcnMucmVhcnJhbmdlRXJyb3IpO1xuIH1cblxuY2hhcmFjdGVyUmVjb3JkLmludmVudG9yeUtpdC5yZWNvcmRlci53cml0ZShcbmludmVudG9yeVNlYXQuZ2V0QW1vdW50QWxsb2NhdGVkKCdJdGVtJykudmFsdWUucGF5bG9hZCk7XG5cblxuc2VhdC5leGl0KCk7XG5yZXR1cm4gdGV4dC51bmVxdWlwUmV0dXJuO1xuIH07XG5cbnJldHVybiB6Y2YubWFrZUludml0YXRpb24oXG5oYW5kbGVyLFxuJ3JlbW92ZUZyb21JbnZlbnRvcnknLFxudW5kZWZpbmVkLFxuTS5zcGxpdFJlY29yZCh7XG5naXZlOntcbkNoYXJhY3RlcktleTE6TS5zcGxpdFJlY29yZChjaGFyYWN0ZXJTaGFwZSl9LFxuXG53YW50OntcbkNoYXJhY3RlcktleTI6TS5zcGxpdFJlY29yZChjaGFyYWN0ZXJTaGFwZSksXG5JdGVtOk0uc3BsaXRSZWNvcmQoaXRlbVNoYXBlKX19KSk7XG5cblxuXG4gfSxcbnN3YXAoKXtcbi8qXG5cbiAgICAgICAgICAgKi9cbmNvbnN0IGhhbmRsZXI9KHNlYXQpPT57XG5jb25zdHtjaGFyYWN0ZXI6Y2hhcmFjdGVyRmFjZXR9PXRoaXMuZmFjZXRzO1xuY29uc3R7Y2hhcmFjdGVyOmNoYXJhY3RlclN0YXRlfT10aGlzLnN0YXRlO1xuXG4vL1xuY29uc3QgcHJvdmlkZWRJdGVtQW1vdW50PXNlYXQuZ2V0QW1vdW50QWxsb2NhdGVkKCdJdGVtMScpO1xuY29uc3QgcHJvdmlkZWRDaGFyYWN0ZXJLZXlBbW91bnQ9XG5zZWF0LmdldEFtb3VudEFsbG9jYXRlZCgnQ2hhcmFjdGVyS2V5MScpO1xuY29uc3QgcHJvdmlkZWRDaGFyYWN0ZXJLZXk9XG5wcm92aWRlZENoYXJhY3RlcktleUFtb3VudC52YWx1ZS5wYXlsb2FkWzBdWzBdO1xuLy9cbmNvbnN0IGNoYXJhY3Rlck5hbWU9cHJvdmlkZWRDaGFyYWN0ZXJLZXkubmFtZTtcblxuLy9cbmNvbnN0IGNoYXJhY3RlclJlY29yZD1jaGFyYWN0ZXJTdGF0ZS5lbnRyaWVzLmdldChjaGFyYWN0ZXJOYW1lKTtcbmNvbnN0IGludmVudG9yeVNlYXQ9Y2hhcmFjdGVyUmVjb3JkLmludmVudG9yeTtcbnByb3ZpZGVkQ2hhcmFjdGVyS2V5fHxhc3NlcnQuZmFpbChlcnJvcnMuaW52YWxpZENoYXJhY3RlcktleSk7XG5cbmNvbnN0e3dhbnR9PXNlYXQuZ2V0UHJvcG9zYWwoKTtcbmNvbnN0e1xuQ2hhcmFjdGVyS2V5Mjp3YW50ZWRDaGFyYWN0ZXJBbW91bnQsXG5JdGVtMjp3YW50ZWRJdGVtc0Ftb3VudH09XG53YW50O1xuXG4vL1xuY29uc3QgaW52ZW50b3J5Q2hhcmFjdGVyS2V5PVxuaW52ZW50b3J5U2VhdC5nZXRBbW91bnRBbGxvY2F0ZWQoJ0NoYXJhY3RlcktleScpO1xuaW52ZW50b3J5Q2hhcmFjdGVyS2V5fHxhc3NlcnQuZmFpbChlcnJvcnMubm9LZXlJbkludmVudG9yeSk7XG5cbkFtb3VudE1hdGguaXNFcXVhbChcbndhbnRlZENoYXJhY3RlckFtb3VudCxcbmludmVudG9yeUNoYXJhY3RlcktleSxcbmNoYXJhY3RlckJyYW5kKXx8XG5hc3NlcnQuZmFpbChlcnJvcnMuaW52ZW50b3J5S2V5TWlzbWF0Y2gpO1xuXG4vL1xubGV0IGludmVudG9yeT1pbnZlbnRvcnlTZWF0LlxuZ2V0Q3VycmVudEFsbG9jYXRpb24oKS5cbkl0ZW0udmFsdWUucGF5bG9hZC5tYXAoKFt2YWx1ZSxfc3VwcGx5XSk9PnZhbHVlKTtcblxuaWYod2FudGVkSXRlbXNBbW91bnQudmFsdWUucGF5bG9hZFswXSlcbmludmVudG9yeT1pbnZlbnRvcnkuZmlsdGVyKFxuKGl0ZW0pPT5cbml0ZW0uY2F0ZWdvcnkhPT1cbndhbnRlZEl0ZW1zQW1vdW50LnZhbHVlLnBheWxvYWRbMF1bMF0uY2F0ZWdvcnkpO1xuXG5pZihwcm92aWRlZEl0ZW1BbW91bnQudmFsdWUucGF5bG9hZFswXSlcbmludmVudG9yeT1bXG4uLi5pbnZlbnRvcnksXG5wcm92aWRlZEl0ZW1BbW91bnQudmFsdWUucGF5bG9hZFswXVswXV07XG5cblxuY2hhcmFjdGVyRmFjZXQudmFsaWRhdGVJbnZlbnRvcnlTdGF0ZShpbnZlbnRvcnkpfHxcbmFzc2VydC5mYWlsKGVycm9ycy5kdXBsaWNhdGVDYXRlZ29yeUluSW52ZW50b3J5KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHRyYW5zZmVycz1bXTtcbnRyYW5zZmVycy5wdXNoKFtcbnNlYXQsXG5pbnZlbnRvcnlTZWF0LFxue0l0ZW0xOnByb3ZpZGVkSXRlbUFtb3VudH0sXG57SXRlbTpwcm92aWRlZEl0ZW1BbW91bnR9XSk7XG5cbnRyYW5zZmVycy5wdXNoKFtcbmludmVudG9yeVNlYXQsXG5zZWF0LFxue0l0ZW06d2FudGVkSXRlbXNBbW91bnR9LFxue0l0ZW0yOndhbnRlZEl0ZW1zQW1vdW50fV0pO1xuXG50cmFuc2ZlcnMucHVzaChbXG5zZWF0LFxuaW52ZW50b3J5U2VhdCxcbntDaGFyYWN0ZXJLZXkxOnByb3ZpZGVkQ2hhcmFjdGVyS2V5QW1vdW50fSxcbntDaGFyYWN0ZXJLZXk6cHJvdmlkZWRDaGFyYWN0ZXJLZXlBbW91bnR9XSk7XG5cbnRyYW5zZmVycy5wdXNoKFtcbmludmVudG9yeVNlYXQsXG5zZWF0LFxue0NoYXJhY3RlcktleTp3YW50ZWRDaGFyYWN0ZXJBbW91bnR9LFxue0NoYXJhY3RlcktleTI6d2FudGVkQ2hhcmFjdGVyQW1vdW50fV0pO1xuXG5cbnRyeXtcbmF0b21pY1JlYXJyYW5nZSh6Y2YsaGFyZGVuKHRyYW5zZmVycykpO1xuIH1jYXRjaChlKXtcbmFzc2VydC5mYWlsKGVycm9ycy5yZWFycmFuZ2VFcnJvcik7XG4gfVxuXG5jaGFyYWN0ZXJSZWNvcmQuaW52ZW50b3J5S2l0LnJlY29yZGVyLndyaXRlKFxuaW52ZW50b3J5U2VhdC5nZXRBbW91bnRBbGxvY2F0ZWQoJ0l0ZW0nKS52YWx1ZS5wYXlsb2FkKTtcblxuc2VhdC5leGl0KCk7XG4gfTtcblxucmV0dXJuIHpjZi5tYWtlSW52aXRhdGlvbihcbmhhbmRsZXIsXG4naXRlbUludmVudG9yeVN3YXAnLFxudW5kZWZpbmVkLFxuTS5zcGxpdFJlY29yZCh7XG5naXZlOntcbkNoYXJhY3RlcktleTE6TS5zcGxpdFJlY29yZChjaGFyYWN0ZXJTaGFwZSksXG5JdGVtMTpNLnNwbGl0UmVjb3JkKGl0ZW1TaGFwZSl9LFxuXG53YW50Ok0uc3BsaXRSZWNvcmQoXG57XG5DaGFyYWN0ZXJLZXkyOk0uc3BsaXRSZWNvcmQoY2hhcmFjdGVyU2hhcGUpfSxcblxue0l0ZW0yOk0uc3BsaXRSZWNvcmQoaXRlbVNoYXBlKX0pfSkpO1xuXG5cblxuIH0sXG51bmVxdWlwQWxsKCl7XG4vKlxuXG4gICAgICAgICAgICovXG5jb25zdCBoYW5kbGVyPShzZWF0KT0+e1xuY29uc3R7Y2hhcmFjdGVyOmNoYXJhY3RlclN0YXRlfT10aGlzLnN0YXRlO1xuXG4vL1xuY29uc3QgcHJvdmlkZWRDaGFyYWN0ZXJLZXlBbW91bnQ9XG5zZWF0LmdldEFtb3VudEFsbG9jYXRlZCgnQ2hhcmFjdGVyS2V5MScpO1xuY29uc3QgcHJvdmlkZWRDaGFyYWN0ZXJLZXk9XG5wcm92aWRlZENoYXJhY3RlcktleUFtb3VudC52YWx1ZS5wYXlsb2FkWzBdWzBdO1xuY29uc3QgY2hhcmFjdGVyTmFtZT1wcm92aWRlZENoYXJhY3RlcktleS5uYW1lO1xuXG4vL1xuY29uc3QgY2hhcmFjdGVyUmVjb3JkPWNoYXJhY3RlclN0YXRlLmVudHJpZXMuZ2V0KGNoYXJhY3Rlck5hbWUpO1xuY29uc3QgaW52ZW50b3J5U2VhdD1jaGFyYWN0ZXJSZWNvcmQuaW52ZW50b3J5O1xucHJvdmlkZWRDaGFyYWN0ZXJLZXl8fGFzc2VydC5mYWlsKGVycm9ycy5pbnZhbGlkQ2hhcmFjdGVyS2V5KTtcblxuLy9cbmNvbnN0e3dhbnR9PXNlYXQuZ2V0UHJvcG9zYWwoKTtcbmNvbnN0e0NoYXJhY3RlcktleTI6d2FudGVkQ2hhcmFjdGVyfT13YW50O1xuXG4vL1xuY29uc3QgaW52ZW50b3J5Q2hhcmFjdGVyS2V5PVxuaW52ZW50b3J5U2VhdC5nZXRBbW91bnRBbGxvY2F0ZWQoJ0NoYXJhY3RlcktleScpO1xuaW52ZW50b3J5Q2hhcmFjdGVyS2V5fHxhc3NlcnQuZmFpbChlcnJvcnMubm9LZXlJbkludmVudG9yeSk7XG5cbmNvbnN0IGl0ZW1zPWludmVudG9yeVNlYXQuZ2V0QW1vdW50QWxsb2NhdGVkKCdJdGVtJyxpdGVtQnJhbmQpO1xuXG5BbW91bnRNYXRoLmlzRXF1YWwoXG53YW50ZWRDaGFyYWN0ZXIsXG5pbnZlbnRvcnlDaGFyYWN0ZXJLZXksXG5jaGFyYWN0ZXJCcmFuZCl8fFxuYXNzZXJ0LmZhaWwoZXJyb3JzLmludmVudG9yeUtleU1pc21hdGNoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHRyYW5zZmVycz1bXTtcbnRyYW5zZmVycy5wdXNoKFtpbnZlbnRvcnlTZWF0LHNlYXQse0l0ZW06aXRlbXN9XSk7XG50cmFuc2ZlcnMucHVzaChbXG5zZWF0LFxuaW52ZW50b3J5U2VhdCxcbntDaGFyYWN0ZXJLZXkxOnByb3ZpZGVkQ2hhcmFjdGVyS2V5QW1vdW50fSxcbntDaGFyYWN0ZXJLZXk6cHJvdmlkZWRDaGFyYWN0ZXJLZXlBbW91bnR9XSk7XG5cbnRyYW5zZmVycy5wdXNoKFtcbmludmVudG9yeVNlYXQsXG5zZWF0LFxue0NoYXJhY3RlcktleTp3YW50ZWRDaGFyYWN0ZXJ9LFxue0NoYXJhY3RlcktleTI6d2FudGVkQ2hhcmFjdGVyfV0pO1xuXG5cbnRyeXtcbmF0b21pY1JlYXJyYW5nZSh6Y2YsaGFyZGVuKHRyYW5zZmVycykpO1xuIH1jYXRjaChlKXtcbmFzc2VydC5mYWlsKGVycm9ycy5yZWFycmFuZ2VFcnJvcik7XG4gfVxuc2VhdC5leGl0KCk7XG5cbmNoYXJhY3RlclJlY29yZC5pbnZlbnRvcnlLaXQucmVjb3JkZXIud3JpdGUoXG5pbnZlbnRvcnlTZWF0LmdldEFtb3VudEFsbG9jYXRlZCgnSXRlbScpLnZhbHVlLnBheWxvYWQpO1xuXG4gfTtcblxucmV0dXJuIHpjZi5tYWtlSW52aXRhdGlvbihcbmhhbmRsZXIsXG4ncmVtb3ZlQWxsSXRlbXNGcm9tSW52ZW50b3J5JyxcbnVuZGVmaW5lZCxcbk0uc3BsaXRSZWNvcmQoe1xuZ2l2ZTp7XG5DaGFyYWN0ZXJLZXkxOk0uc3BsaXRSZWNvcmQoY2hhcmFjdGVyU2hhcGUpfSxcblxud2FudDp7XG5DaGFyYWN0ZXJLZXkyOk0uc3BsaXRSZWNvcmQoY2hhcmFjdGVyU2hhcGUpfX0pKTtcblxuXG5cbiB9fSxcblxuaXRlbTp7XG4vKlxuXG4gICAgICAgICAqL1xuaW5pdGlhbGl6ZUJhc2VJdGVtcyhiYXNlSXRlbXMpe1xuY29uc3R7aXRlbTppdGVtU3RhdGV9PXRoaXMuc3RhdGU7XG5pZihpdGVtU3RhdGUuYmFzZXMuZ2V0U2l6ZSgpPjApcmV0dXJuO1xuXG5jb25zdCBjb21tb249W107XG5jb25zdCB1bmNvbW1vblRvTGVnZW5kYXJ5PVtdO1xuXG5iYXNlSXRlbXMuZm9yRWFjaCgoaXRlbSk9PntcbmlmKGl0ZW0ucmFyaXR5PG1pblVuY29tbW9uUmF0aW5nKWNvbW1vbi5wdXNoKGl0ZW0pO2Vsc2VcbnVuY29tbW9uVG9MZWdlbmRhcnkucHVzaChpdGVtKTtcbiB9KTtcblxuYWRkQWxsVG9NYXAoaXRlbVN0YXRlLmJhc2VzLFtcblsnY29tbW9uJyxoYXJkZW4oY29tbW9uKV0sXG5bJ3VuY29tbW9uVG9MZWdlbmRhcnknLGhhcmRlbih1bmNvbW1vblRvTGVnZW5kYXJ5KV1dKTtcblxuIH0sXG4vL1xuLypcblxuICAgICAgICAgKi9cbiAgICAgIGFzeW5jIG1pbnREZWZhdWx0QmF0Y2goc2VhdCl7XG5jb25zdHtoZWxwZXIsbWFya2V0Om1hcmtldEZhY2V0fT10aGlzLmZhY2V0cztcbmNvbnN0e2l0ZW06aXRlbVN0YXRlfT10aGlzLnN0YXRlO1xuXG5sZXQgY29tbW9uQmFzZXM9aXRlbVN0YXRlLmJhc2VzLmdldCgnY29tbW9uJyk7XG5jb25zdCBpbmRleDE9TWF0aC5mbG9vcihoZWxwZXIucmFuZG9tTnVtYmVyKCkqY29tbW9uQmFzZXMubGVuZ3RoKTtcbmNvbnN0IGl0ZW0xPWNvbW1vbkJhc2VzW2luZGV4MV07XG5cbmNvbW1vbkJhc2VzPWNvbW1vbkJhc2VzLmZpbHRlcihcbihpdGVtKT0+aXRlbS5jYXRlZ29yeSE9PWl0ZW0xLmNhdGVnb3J5KTtcblxuY29uc3QgaW5kZXgyPU1hdGguZmxvb3IoaGVscGVyLnJhbmRvbU51bWJlcigpKmNvbW1vbkJhc2VzLmxlbmd0aCk7XG5jb25zdCBpdGVtMj1jb21tb25CYXNlc1tpbmRleDJdO1xuXG5jb25zdCB1bmNvbW1vblRvTGVnZW5kYXJ5PWl0ZW1TdGF0ZS5iYXNlcy5cbmdldCgndW5jb21tb25Ub0xlZ2VuZGFyeScpLlxuZmlsdGVyKFxuKGl0ZW0pPT5cbml0ZW0uY2F0ZWdvcnkhPT1pdGVtMS5jYXRlZ29yeSYmXG5pdGVtLmNhdGVnb3J5IT09aXRlbTIuY2F0ZWdvcnkpO1xuXG5jb25zdCBpbmRleDM9TWF0aC5mbG9vcihcbmhlbHBlci5yYW5kb21OdW1iZXIoKSp1bmNvbW1vblRvTGVnZW5kYXJ5Lmxlbmd0aCk7XG5cbmNvbnN0IGl0ZW0zPXVuY29tbW9uVG9MZWdlbmRhcnlbaW5kZXgzXTtcblxuY29uc3QgaXRlbXM9W2l0ZW0xLGl0ZW0yLGl0ZW0zXTtcblxuY29uc3QgY3VycmVudFRpbWU9YXdhaXQgaGVscGVyLmdldFRpbWVTdGFtcCgpO1xuXG5jb25zdCBuZXdJdGVtQW1vdW50PUFtb3VudE1hdGgubWFrZShcbml0ZW1CcmFuZCxcbm1ha2VDb3B5QmFnKGhhcmRlbihpdGVtcy5tYXAoKGl0ZW0pPT5baXRlbSwxbl0pKSkpO1xuXG5cbmF3YWl0IGl0ZW1NaW50Lm1pbnRHYWlucyh7SXRlbTpuZXdJdGVtQW1vdW50fSxzZWF0KTtcblxubGV0IGlkPWl0ZW1TdGF0ZS5lbnRyaWVzLmdldFNpemUoKTtcblxuaXRlbXMuZm9yRWFjaCgoaSk9PntcbmNvbnN0IGl0ZW09e1xuaWQsXG5pdGVtOmksXG5oaXN0b3J5OltcbntcbnR5cGU6J21pbnQnLFxuZGF0YTppLFxudGltZXN0YW1wOmN1cnJlbnRUaW1lfV19O1xuXG5cblxuXG5hZGRBbGxUb01hcChpdGVtU3RhdGUuZW50cmllcyxbW2lkLGhhcmRlbihpdGVtKV1dKTtcbml0ZW1LaXQucmVjb3JkZXIud3JpdGUoaXRlbSk7XG5cbmlkKz0xO1xuLy9cbm1hcmtldEZhY2V0LnVwZGF0ZU1ldHJpY3MoJ2l0ZW0nLHtcbmNvbGxlY3Rpb25TaXplOnRydWUsXG5hdmVyYWdlTGV2ZWw6e1xudHlwZTonYWRkJyxcbnZhbHVlOml0ZW0uaXRlbS5sZXZlbH19KTtcblxuXG4gfSk7XG5cbnJldHVybiB0ZXh0Lm1pbnRJdGVtUmV0dXJuO1xuIH0sXG4vKlxuXG5cblxuXG4gICAgICAgICAqL1xuICAgICAgYXN5bmMgbWludEJhdGNoKHNlYXQsaXRlbUJhdGNoKXtcbmNvbnN0e2hlbHBlcixtYXJrZXQ6bWFya2V0RmFjZXR9PXRoaXMuZmFjZXRzO1xuY29uc3R7aXRlbTppdGVtU3RhdGV9PXRoaXMuc3RhdGU7XG5cbmNvbnN0IGN1cnJlbnRUaW1lPWF3YWl0IGhlbHBlci5nZXRUaW1lU3RhbXAoKTtcblxuY29uc3QgbmV3SXRlbUFtb3VudD1BbW91bnRNYXRoLm1ha2UoXG5pdGVtQnJhbmQsXG5tYWtlQ29weUJhZyhoYXJkZW4oaXRlbUJhdGNoKSkpO1xuXG5cbmF3YWl0IGl0ZW1NaW50Lm1pbnRHYWlucyh7SXRlbTpuZXdJdGVtQW1vdW50fSxzZWF0KTtcblxubGV0IGlkPWl0ZW1TdGF0ZS5lbnRyaWVzLmdldFNpemUoKTtcblxuaXRlbUJhdGNoLmZvckVhY2goKGNvcHlCYWdFbnRyeSk9PntcbmNvbnN0W2l0ZW1Bc3NldCxpdGVtU3VwcGx5XT1jb3B5QmFnRW50cnk7XG5cbmZvcihsZXQgbj0wO248aXRlbVN1cHBseTtuKz0xKXtcbmNvbnN0IGl0ZW09e1xuaWQsXG5pdGVtOml0ZW1Bc3NldCxcbmhpc3Rvcnk6W1xue1xudHlwZTonbWludCcsXG5kYXRhOml0ZW1Bc3NldCxcbnRpbWVzdGFtcDpjdXJyZW50VGltZX1dfTtcblxuXG5cblxuYWRkQWxsVG9NYXAoaXRlbVN0YXRlLmVudHJpZXMsW1tpZCxoYXJkZW4oaXRlbSldXSk7XG5pdGVtS2l0LnJlY29yZGVyLndyaXRlKGl0ZW0pO1xuXG5pZCs9MTtcbi8vXG5tYXJrZXRGYWNldC51cGRhdGVNZXRyaWNzKCdpdGVtJyx7XG5jb2xsZWN0aW9uU2l6ZTp0cnVlLFxuYXZlcmFnZUxldmVsOntcbnR5cGU6J2FkZCcsXG52YWx1ZTppdGVtLml0ZW0ubGV2ZWx9fSk7XG5cblxuIH1cbiB9KTtcblxucmV0dXJuIHRleHQubWludEl0ZW1SZXR1cm47XG4gfSxcbm1pbnQoKXtcbi8qXG5cbiAgICAgICAgICAgKi9cbmNvbnN0IGhhbmRsZXI9YXN5bmMoc2VhdCk9PntcbmNvbnN0e2hlbHBlcixtYXJrZXQ6bWFya2V0RmFjZXR9PXRoaXMuZmFjZXRzO1xuY29uc3R7aXRlbTppdGVtU3RhdGV9PXRoaXMuc3RhdGU7XG5cbmNvbnN0e3dhbnR9PXNlYXQuZ2V0UHJvcG9zYWwoKTtcblxuY29uc3QgY3VycmVudFRpbWU9YXdhaXQgaGVscGVyLmdldFRpbWVTdGFtcCgpO1xuXG5jb25zdCBpdGVtcz13YW50Lkl0ZW0udmFsdWUucGF5bG9hZC5tYXAoKFtpdGVtLHN1cHBseV0pPT57XG5yZXR1cm5baXRlbSxzdXBwbHldO1xuIH0pO1xuY29uc3QgbmV3SXRlbUFtb3VudD1BbW91bnRNYXRoLm1ha2UoXG5pdGVtQnJhbmQsXG5tYWtlQ29weUJhZyhoYXJkZW4oaXRlbXMpKSk7XG5cblxuaXRlbU1pbnQubWludEdhaW5zKHtBc3NldDpuZXdJdGVtQW1vdW50fSxzZWF0KTtcblxuc2VhdC5leGl0KCk7XG5cbmxldCBpZD1pdGVtU3RhdGUuZW50cmllcy5nZXRTaXplKCk7XG5cbml0ZW1zLmZvckVhY2goKGopPT57XG5jb25zdCBpPWpbMF07XG5jb25zdCBpdGVtPXtcbmlkLFxuaXRlbTppLFxuLy9cbmhpc3Rvcnk6W1xue1xudHlwZTonbWludCcsXG5kYXRhOmksXG50aW1lc3RhbXA6Y3VycmVudFRpbWV9XX07XG5cblxuXG5cbmFkZEFsbFRvTWFwKGl0ZW1TdGF0ZS5lbnRyaWVzLFtbaWQsaGFyZGVuKGl0ZW0pXV0pO1xuaXRlbUtpdC5yZWNvcmRlci53cml0ZShpdGVtKTtcblxuaWQrPTE7XG4vL1xubWFya2V0RmFjZXQudXBkYXRlTWV0cmljcygnaXRlbScse1xuY29sbGVjdGlvblNpemU6dHJ1ZSxcbmF2ZXJhZ2VMZXZlbDp7XG50eXBlOidhZGQnLFxudmFsdWU6aXRlbS5pdGVtLmxldmVsfX0pO1xuXG5cbiB9KTtcblxucmV0dXJuIHRleHQubWludEl0ZW1SZXR1cm47XG4gfTtcblxucmV0dXJuIHpjZi5tYWtlSW52aXRhdGlvbihcbmhhbmRsZXIsXG4nbWludEl0ZW1OZnRzJyxcbnVuZGVmaW5lZCxcbk0uc3BsaXRSZWNvcmQoe1xud2FudDp7XG5JdGVtOk0uc3BsaXRSZWNvcmQoaXRlbVNoYXBlKX19KSk7XG5cblxuXG4gfX0sXG5cbm1hcmtldDp7XG5oYW5kbGVFeGl0Q2hhcmFjdGVyKGVudHJ5KXtcbmNvbnN0e21hcmtldH09dGhpcy5zdGF0ZTtcbmNvbnN0e21hcmtldDptYXJrZXRGYWNldCxjaGFyYWN0ZXI6Y2hhcmFjdGVyRmFjZXR9PVxudGhpcy5mYWNldHM7XG5cbmNvbnN0e3NlYXQsYXNzZXQscmVjb3JkZXJLaXR9PWVudHJ5O1xuY29uc3QgY2hhcmFjdGVyTGV2ZWw9Y2hhcmFjdGVyRmFjZXQuY2FsY3VsYXRlTGV2ZWwoYXNzZXQubmFtZSk7XG5cbmNvbnN0IHN1YnNjcmliZXI9RShzZWF0KS5nZXRTdWJzY3JpYmVyKCk7XG5jb25zdCBhc3luY0l0ZXJhYmxlUD1zdWJzY3JpYmVMYXRlc3Qoc3Vic2NyaWJlcik7XG5jb25zdCBhc3luY0l0ZXJhdG9yUD1FKGFzeW5jSXRlcmFibGVQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxuRS53aGVuKEUoYXN5bmNJdGVyYXRvclApLm5leHQoKSwoKT0+e1xubWFya2V0RmFjZXQudXBkYXRlTWV0cmljcygnY2hhcmFjdGVyJyx7XG5tYXJrZXRwbGFjZUF2ZXJhZ2VMZXZlbDp7XG50eXBlOidyZW1vdmUnLFxudmFsdWU6Y2hhcmFjdGVyTGV2ZWx9fSk7XG5cblxuXG5tYXJrZXQuY2hhcmFjdGVyRW50cmllcy5kZWxldGUoYXNzZXQubmFtZSk7XG5cbnZvaWQgbWFya2V0RmFjZXQuZGVsZXRlTm9kZShyZWNvcmRlcktpdC5yZWNvcmRlci5nZXRTdG9yYWdlTm9kZSgpKTtcbiB9KTtcbiB9LFxuaGFuZGxlRXhpdEl0ZW0oZW50cnkpe1xuY29uc3R7bWFya2V0fT10aGlzLnN0YXRlO1xuY29uc3R7bWFya2V0Om1hcmtldEZhY2V0fT10aGlzLmZhY2V0cztcblxuY29uc3R7c2VhdCxhc3NldCxpZCxyZWNvcmRlcktpdH09ZW50cnk7XG5cbmNvbnN0IHN1YnNjcmliZXI9RShzZWF0KS5nZXRTdWJzY3JpYmVyKCk7XG5jb25zdCBhc3luY0l0ZXJhYmxlUD1zdWJzY3JpYmVMYXRlc3Qoc3Vic2NyaWJlcik7XG5jb25zdCBhc3luY0l0ZXJhdG9yUD1FKGFzeW5jSXRlcmFibGVQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxuRS53aGVuKEUoYXN5bmNJdGVyYXRvclApLm5leHQoKSwoKT0+e1xubWFya2V0RmFjZXQudXBkYXRlTWV0cmljcygnaXRlbScse1xubWFya2V0cGxhY2VBdmVyYWdlTGV2ZWw6e1xudHlwZToncmVtb3ZlJyxcbnZhbHVlOmFzc2V0LmxldmVsfX0pO1xuXG5cblxubWFya2V0Lml0ZW1FbnRyaWVzLmRlbGV0ZShpZCk7XG52b2lkIG1hcmtldEZhY2V0LmRlbGV0ZU5vZGUocmVjb3JkZXJLaXQucmVjb3JkZXIuZ2V0U3RvcmFnZU5vZGUoKSk7XG4gfSk7XG4gfSxcbi8qXG5cblxuXG4gICAgICAgICAqL1xudXBkYXRlTWV0cmljcyhjb2xsZWN0aW9uLHVwZGF0ZU1ldHJpY3Mpe1xuY29uc3QgdXBkYXRlZE1ldHJpY3M9dXBkYXRlQ29sbGVjdGlvbk1ldHJpY3MoXG5jb2xsZWN0aW9uLFxudGhpcy5zdGF0ZSxcbnVwZGF0ZU1ldHJpY3MpO1xuXG5pZihjb2xsZWN0aW9uPT09J2NoYXJhY3Rlcicpe1xudm9pZCBtYXJrZXRDaGFyYWN0ZXJNZXRyaWNzS2l0LnJlY29yZGVyLndyaXRlKHVwZGF0ZWRNZXRyaWNzKTtcbiB9ZWxzZSBpZihjb2xsZWN0aW9uPT09J2l0ZW0nKXtcbnZvaWQgbWFya2V0SXRlbU1ldHJpY3NLaXQucmVjb3JkZXIud3JpdGUodXBkYXRlZE1ldHJpY3MpO1xuIH1cbiB9LFxuICAgICAgYXN5bmMgbWFrZU1hcmtldEl0ZW1SZWNvcmRlcktpdChpZCl7XG5jb25zdCBwYXRoPSBgaXRlbS0ke1N0cmluZyhpZCl9YDtcbmNvbnN0IG5vZGU9YXdhaXQgRShtYXJrZXRJdGVtTm9kZSkubWFrZUNoaWxkTm9kZShwYXRoKTtcbnJldHVybiBtYWtlUmVjb3JkZXJLaXQoXG5ub2RlLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuTWFya2V0UmVjb3JkZXJHdWFyZCk7XG5cblxuIH0sXG4gICAgICBhc3luYyBtYWtlTWFya2V0Q2hhcmFjdGVyUmVjb3JkZXJLaXQoaWQpe1xuY29uc3QgcGF0aD0gYGNoYXJhY3Rlci0ke2lkfWA7XG5jb25zdCBub2RlPWF3YWl0IEUobWFya2V0Q2hhcmFjdGVyTm9kZSkubWFrZUNoaWxkTm9kZShwYXRoKTtcbnJldHVybiBtYWtlUmVjb3JkZXJLaXQoXG5ub2RlLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuTWFya2V0UmVjb3JkZXJHdWFyZCk7XG5cblxuIH0sXG4vKlxuXG5cblxuXG5cbiAgICAgICAgICovXG4vL1xuICAgICAgYXN5bmMgZGVsZXRlTm9kZShub2RlKXtcbmNvbnN0IHBhdGg9YXdhaXQgRShub2RlKS5nZXRQYXRoKCk7XG5jb25zdCBzZWdtZW50cz1wYXRoLnNwbGl0KCcuJyk7XG5jb25zdCBwYXJlbnQ9cGF0aC5pbmNsdWRlcygnY2hhcmFjdGVyJyk/XG5tYXJrZXRDaGFyYWN0ZXJOb2RlOlxubWFya2V0SXRlbU5vZGU7XG5jb25zdCBjaGlsZFNlZ21lbnQ9c2VnbWVudHMuYXQoLTEpO1xuYXNzZXJ0KGNoaWxkU2VnbWVudCwgYG1pc3NpbmcgY2hpbGQgcGF0aCBzZWdtZW50IGluICR7cGF0aH1gKTtcbmNvbnN0IGRlbGV0YWJsZT1FKHBhcmVudCkubWFrZUNoaWxkTm9kZShjaGlsZFNlZ21lbnQse1xuc2VxdWVuY2U6ZmFsc2V9KTtcblxuYXdhaXQgRShkZWxldGFibGUpLnNldFZhbHVlKCcnKTtcbiB9LFxuc2VsbEl0ZW0oKXtcbi8qXG5cbiAgICAgICAgICAgKi9cbmNvbnN0IGhhbmRsZXI9YXN5bmMoc2VhdCk9PntcbmNvbnN0e21hcmtldH09dGhpcy5zdGF0ZTtcbmNvbnN0e21hcmtldDptYXJrZXRGYWNldH09dGhpcy5mYWNldHM7XG5cbi8vXG5jb25zdCBpdGVtSW5TZWxsU2VhdD1zZWF0LmdldEFtb3VudEFsbG9jYXRlZCgnSXRlbScpO1xuY29uc3R7d2FudH09c2VhdC5nZXRQcm9wb3NhbCgpO1xuXG5wYXltZW50QnJhbmQ9PT13YW50LlByaWNlLmJyYW5kfHxcbmFzc2VydC5mYWlsKGVycm9ycy5pbmNvcnJlY3RQYXltZW50QnJhbmQocGF5bWVudEJyYW5kKSk7XG5jb25zdCBhc2tpbmdQcmljZT17XG5icmFuZDp3YW50LlByaWNlLmJyYW5kLFxudmFsdWU6d2FudC5QcmljZS52YWx1ZX07XG5cbmNvbnN0IHJveWFsdHk9bXVsdGlwbHlCeSh3YW50LlByaWNlLHJveWFsdHlSYXRlKTtcbmNvbnN0IHBsYXRmb3JtRmVlPW11bHRpcGx5Qnkod2FudC5QcmljZSxwbGF0Zm9ybUZlZVJhdGUpO1xuXG5jb25zdCBpZD10aGlzLnN0YXRlLm1hcmtldC5tZXRyaWNzLmdldCgnaXRlbScpLnB1dEZvclNhbGVDb3VudDtcblxuY29uc3QgZW50cnlSZWNvcmRlcj1hd2FpdCBtYXJrZXRGYWNldC5tYWtlTWFya2V0SXRlbVJlY29yZGVyS2l0KFxuaWQpO1xuXG5cbmNvbnN0IGFzc2V0PWl0ZW1JblNlbGxTZWF0LnZhbHVlLnBheWxvYWRbMF1bMF07XG4vL1xuY29uc3QgbmV3RW50cnk9aGFyZGVuKHtcbnNlYXQsXG5hc2tpbmdQcmljZSxcbnJveWFsdHksXG5wbGF0Zm9ybUZlZSxcbmlkLFxuYXNzZXQsXG5yZWNvcmRlcktpdDplbnRyeVJlY29yZGVyLFxuaXNGaXJzdFNhbGU6ZmFsc2V9KTtcblxuXG4vL1xubWFya2V0RmFjZXQudXBkYXRlTWV0cmljcygnaXRlbScse1xubWFya2V0cGxhY2VBdmVyYWdlTGV2ZWw6e1xudHlwZTonYWRkJyxcbnZhbHVlOmFzc2V0LmxldmVsfX0pO1xuXG5cblxuYWRkQWxsVG9NYXAobWFya2V0Lml0ZW1FbnRyaWVzLFtbbmV3RW50cnkuaWQsbmV3RW50cnldXSk7XG5cbmNvbnN0e3NlYXQ6X29taXRTZWF0LHJlY29yZGVyS2l0LC4uLmVudHJ5fT1uZXdFbnRyeTtcbnJlY29yZGVyS2l0LnJlY29yZGVyLndyaXRlKGVudHJ5KTtcbm1hcmtldEZhY2V0LnVwZGF0ZU1ldHJpY3MoJ2l0ZW0nLHtwdXRGb3JTYWxlQ291bnQ6dHJ1ZX0pO1xuXG5tYXJrZXRGYWNldC5oYW5kbGVFeGl0SXRlbShuZXdFbnRyeSk7XG4gfTtcblxucmV0dXJuIHpjZi5tYWtlSW52aXRhdGlvbihcbmhhbmRsZXIsXG4nU2VsbCBJdGVtIGluIEtSRUFkIG1hcmtldHBsYWNlJyxcbnVuZGVmaW5lZCxcbk0uc3BsaXRSZWNvcmQoe1xuZ2l2ZTp7XG5JdGVtOk0uc3BsaXRSZWNvcmQoaXRlbVNoYXBlKX0sXG5cbndhbnQ6e1xuUHJpY2U6TS5zcGxpdFJlY29yZCh7XG5icmFuZDpCcmFuZFNoYXBlLFxudmFsdWU6TS5uYXQoKX0pfX0pKTtcblxuXG5cblxuIH0sXG5zZWxsQ2hhcmFjdGVyKCl7XG4vKlxuXG4gICAgICAgICAgICovXG5jb25zdCBoYW5kbGVyPWFzeW5jKHNlYXQpPT57XG5jb25zdHttYXJrZXR9PXRoaXMuc3RhdGU7XG5jb25zdHtjaGFyYWN0ZXI6Y2hhcmFjdGVyRmFjZXQsbWFya2V0Om1hcmtldEZhY2V0fT1cbnRoaXMuZmFjZXRzO1xuXG4vL1xuY29uc3QgY2hhcmFjdGVySW5TZWxsU2VhdD1zZWF0LmdldEFtb3VudEFsbG9jYXRlZCgnQ2hhcmFjdGVyJyk7XG5jb25zdHt3YW50fT1zZWF0LmdldFByb3Bvc2FsKCk7XG5cbnBheW1lbnRCcmFuZD09PXdhbnQuUHJpY2UuYnJhbmR8fFxuYXNzZXJ0LmZhaWwoZXJyb3JzLmluY29ycmVjdFBheW1lbnRCcmFuZChwYXltZW50QnJhbmQpKTtcblxuXG5jb25zdCBhc2tpbmdQcmljZT17XG5icmFuZDp3YW50LlByaWNlLmJyYW5kLFxudmFsdWU6d2FudC5QcmljZS52YWx1ZX07XG5cbmNvbnN0IHJveWFsdHk9bXVsdGlwbHlCeSh3YW50LlByaWNlLHJveWFsdHlSYXRlKTtcbmNvbnN0IHBsYXRmb3JtRmVlPW11bHRpcGx5Qnkod2FudC5QcmljZSxwbGF0Zm9ybUZlZVJhdGUpO1xuXG5jb25zdCBjaGFyYWN0ZXI9Y2hhcmFjdGVySW5TZWxsU2VhdC52YWx1ZS5wYXlsb2FkWzBdWzBdO1xuXG5jb25zdCBlbnRyeVJlY29yZGVyPVxuYXdhaXQgbWFya2V0RmFjZXQubWFrZU1hcmtldENoYXJhY3RlclJlY29yZGVyS2l0KGNoYXJhY3Rlci5uYW1lKTtcblxuLy9cbmNvbnN0IG5ld0VudHJ5PXtcbnNlYXQsXG5hc2tpbmdQcmljZSxcbnJveWFsdHksXG5wbGF0Zm9ybUZlZSxcbmlkOmNoYXJhY3Rlci5uYW1lLFxuYXNzZXQ6Y2hhcmFjdGVyLFxucmVjb3JkZXJLaXQ6ZW50cnlSZWNvcmRlcixcbmlzRmlyc3RTYWxlOmZhbHNlfTtcblxuXG4vL1xuY29uc3QgY2hhcmFjdGVyTGV2ZWw9Y2hhcmFjdGVyRmFjZXQuY2FsY3VsYXRlTGV2ZWwoXG5jaGFyYWN0ZXIubmFtZSk7XG5cbm1hcmtldEZhY2V0LnVwZGF0ZU1ldHJpY3MoJ2NoYXJhY3Rlcicse1xubWFya2V0cGxhY2VBdmVyYWdlTGV2ZWw6e1xudHlwZTonYWRkJyxcbnZhbHVlOmNoYXJhY3RlckxldmVsfX0pO1xuXG5cblxuYWRkQWxsVG9NYXAobWFya2V0LmNoYXJhY3RlckVudHJpZXMsW1xuW25ld0VudHJ5LmlkLGhhcmRlbihuZXdFbnRyeSldXSk7XG5cblxuY29uc3R7c2VhdDpfb21pdFNlYXQscmVjb3JkZXJLaXQsLi4uZW50cnl9PW5ld0VudHJ5O1xucmVjb3JkZXJLaXQucmVjb3JkZXIud3JpdGUoZW50cnkpO1xubWFya2V0RmFjZXQudXBkYXRlTWV0cmljcygnY2hhcmFjdGVyJyx7cHV0Rm9yU2FsZUNvdW50OnRydWV9KTtcblxubWFya2V0RmFjZXQuaGFuZGxlRXhpdENoYXJhY3RlcihuZXdFbnRyeSk7XG4gfTtcblxucmV0dXJuIHpjZi5tYWtlSW52aXRhdGlvbihcbmhhbmRsZXIsXG4nU2VsbCBDaGFyYWN0ZXIgaW4gS1JFQWQgbWFya2V0cGxhY2UnLFxudW5kZWZpbmVkLFxuTS5zcGxpdFJlY29yZCh7XG5naXZlOntcbkNoYXJhY3RlcjpNLnNwbGl0UmVjb3JkKGNoYXJhY3RlclNoYXBlKX0sXG5cbndhbnQ6e1xuUHJpY2U6TS5zcGxpdFJlY29yZCh7XG5icmFuZDpCcmFuZFNoYXBlLFxudmFsdWU6TS5uYXQoKX0pfX0pKTtcblxuXG5cblxuIH0sXG5idXlJdGVtKCl7XG4vKlxuXG5cblxuICAgICAgICAgICAqL1xuY29uc3QgaGFuZGxlcj1hc3luYyhidXllclNlYXQsb2ZmZXJBcmdzKT0+e1xuY29uc3R7bWFya2V0Om1hcmtldEZhY2V0fT10aGlzLmZhY2V0cztcbmNvbnN0e21hcmtldH09dGhpcy5zdGF0ZTtcblxuLy9cbmNvbnN0IHNlbGxSZWNvcmQ9bWFya2V0Lml0ZW1FbnRyaWVzLmdldChvZmZlckFyZ3MuZW50cnlJZCk7XG5zZWxsUmVjb3JkfHxhc3NlcnQuZmFpbChlcnJvcnMuaXRlbU5vdEZvdW5kKG9mZmVyQXJncy5lbnRyeUlkKSk7XG5cbmNvbnN0IHJlc3VsdD1hd2FpdChzZWxsUmVjb3JkLmlzRmlyc3RTYWxlP1xubWFya2V0RmFjZXQuYnV5Rmlyc3RTYWxlSXRlbShcbnNlbGxSZWNvcmQuc2VhdCxcbmJ1eWVyU2VhdCxcbnNlbGxSZWNvcmQpOlxuXG5tYXJrZXRGYWNldC5idXlTZWNvbmRhcnlTYWxlSXRlbShcbnNlbGxSZWNvcmQuc2VhdCxcbmJ1eWVyU2VhdCxcbnNlbGxSZWNvcmQpKTtcblxucmVzdWx0LnN1Y2Nlc3N8fGFzc2VydC5mYWlsKHJlc3VsdC5lcnJvcik7XG4gfTtcblxucmV0dXJuIHpjZi5tYWtlSW52aXRhdGlvbihcbmhhbmRsZXIsXG4nQnV5IEl0ZW0gaW4gS1JFQWQgbWFya2V0cGxhY2UnLFxudW5kZWZpbmVkLFxuTS5zcGxpdFJlY29yZCh7XG5naXZlOntcblByaWNlOk0uc3BsaXRSZWNvcmQoe1xuYnJhbmQ6QnJhbmRTaGFwZSxcbnZhbHVlOk0ubmF0KCl9KX0sXG5cblxud2FudDp7XG5JdGVtOk0uc3BsaXRSZWNvcmQoaXRlbVNoYXBlKX19KSk7XG5cblxuXG4gfSxcbi8qXG5cblxuXG5cblxuICAgICAgICAgKi9cbiAgICAgIGFzeW5jIGJ1eUZpcnN0U2FsZUl0ZW0oc2VsbGVyU2VhdCxidXllclNlYXQsc2VsbFJlY29yZCl7XG5jb25zdHttYXJrZXQ6bWFya2V0RmFjZXR9PXRoaXMuZmFjZXRzO1xuY29uc3R7bWFya2V0fT10aGlzLnN0YXRlO1xuXG5jb25zdHt3YW50LGdpdmV9PWJ1eWVyU2VhdC5nZXRQcm9wb3NhbCgpO1xuY29uc3R7SXRlbTp3YW50ZWRJdGVtQW1vdW50fT13YW50O1xuXG5jb25zdCBpdGVtRm9yU2FsZUFtb3VudD1oYXJkZW4oe1xuYnJhbmQ6aXRlbUJyYW5kLFxudmFsdWU6bWFrZUNvcHlCYWcoW1tzZWxsUmVjb3JkLmFzc2V0LDFuXV0pfSk7XG5cbmNvbnN0IGl0ZW1Gb3JTYWxlUHJpY2U9c2VsbFJlY29yZC5hc2tpbmdQcmljZTtcbi8vXG5jb25zdHtQcmljZTpwcm92aWRlZE1vbmV5QW1vdW50fT1naXZlO1xuXG5pZihcbiFBbW91bnRNYXRoLmlzRXF1YWwod2FudGVkSXRlbUFtb3VudCxpdGVtRm9yU2FsZUFtb3VudCxpdGVtQnJhbmQpKVxue1xucmV0dXJue1xuc3VjY2VzczpmYWxzZSxcbmVycm9yOmVycm9ycy5zZWxsZXJTZWF0TWlzbWF0Y2h9O1xuXG4gfVxuXG5pZihcbiFBbW91bnRNYXRoLmlzR1RFKFxucHJvdmlkZWRNb25leUFtb3VudCxcbkFtb3VudE1hdGguYWRkKFxuQW1vdW50TWF0aC5hZGQoc2VsbFJlY29yZC5hc2tpbmdQcmljZSxzZWxsUmVjb3JkLnJveWFsdHkpLFxuc2VsbFJlY29yZC5wbGF0Zm9ybUZlZSksXG5cbnBheW1lbnRCcmFuZCkpXG5cbntcbnJldHVybntcbnN1Y2Nlc3M6ZmFsc2UsXG5lcnJvcjplcnJvcnMuaW5zdWZmaWNpZW50RnVuZHN9O1xuXG4gfVxuXG5jb25zdHt6Y2ZTZWF0LHVzZXJTZWF0fT16Y2YubWFrZUVtcHR5U2VhdEtpdCgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdHJhbnNmZXJzPVtdO1xuLy9cbnRyYW5zZmVycy5wdXNoKFtzZWxsZXJTZWF0LGJ1eWVyU2VhdCx7SXRlbTppdGVtRm9yU2FsZUFtb3VudH1dKTtcbi8vXG50cmFuc2ZlcnMucHVzaChbXG5idXllclNlYXQsXG56Y2ZTZWF0LFxue1ByaWNlOnNlbGxSZWNvcmQucm95YWx0eX0sXG57Um95YWx0eTpzZWxsUmVjb3JkLnJveWFsdHl9XSk7XG5cbi8vXG50cmFuc2ZlcnMucHVzaChbXG5idXllclNlYXQsXG56Y2ZTZWF0LFxue1ByaWNlOnNlbGxSZWNvcmQucGxhdGZvcm1GZWV9LFxue1BsYXRmb3JtRmVlOnNlbGxSZWNvcmQucGxhdGZvcm1GZWV9XSk7XG5cblxuLy9cbnRyYW5zZmVycy5wdXNoKFtcbmJ1eWVyU2VhdCxcbnpjZlNlYXQsXG57XG5QcmljZTpBbW91bnRNYXRoLnN1YnRyYWN0KFxucHJvdmlkZWRNb25leUFtb3VudCxcbkFtb3VudE1hdGguYWRkKHNlbGxSZWNvcmQucm95YWx0eSxzZWxsUmVjb3JkLnBsYXRmb3JtRmVlKSl9XSk7XG5cblxuXG5cbnRyeXtcbmF0b21pY1JlYXJyYW5nZSh6Y2YsaGFyZGVuKHRyYW5zZmVycykpO1xuIH1jYXRjaChlKXtcbmFzc2VydC5mYWlsKGVycm9ycy5yZWFycmFuZ2VFcnJvcik7XG4gfVxuYnV5ZXJTZWF0LmV4aXQoKTtcbnpjZlNlYXQuZXhpdCgpO1xuXG5jb25zdCBwYXlvdXRzPWF3YWl0IEUodXNlclNlYXQpLmdldFBheW91dHMoKTtcbmNvbnN0IHJveWFsdHlQYXlvdXQ9YXdhaXQgcGF5b3V0cy5Sb3lhbHR5O1xuY29uc3QgcGxhdGZvcm1GZWVQYXlvdXQ9YXdhaXQgcGF5b3V0cy5QbGF0Zm9ybUZlZTtcblxuYXdhaXQgRShyb3lhbHR5RGVwb3NpdEZhY2V0KS5yZWNlaXZlKHJveWFsdHlQYXlvdXQpO1xuYXdhaXQgRShwbGF0Zm9ybUZlZURlcG9zaXRGYWNldCkucmVjZWl2ZShwbGF0Zm9ybUZlZVBheW91dCk7XG5cbmNvbnN0IGFza2luZ1ByaWNlUGF5b3V0PWF3YWl0IHBheW91dHMuUHJpY2U7XG5hd2FpdCBFKHJveWFsdHlEZXBvc2l0RmFjZXQpLnJlY2VpdmUoYXNraW5nUHJpY2VQYXlvdXQpO1xuXG4vL1xubWFya2V0RmFjZXQudXBkYXRlTWV0cmljcygnaXRlbScse1xubWFya2V0cGxhY2VBdmVyYWdlTGV2ZWw6e1xudHlwZToncmVtb3ZlJyxcbnZhbHVlOnNlbGxSZWNvcmQuYXNzZXQubGV2ZWx9fSk7XG5cblxuXG5tYXJrZXQuaXRlbUVudHJpZXMuZGVsZXRlKHNlbGxSZWNvcmQuaWQpO1xudm9pZCBtYXJrZXRGYWNldC5kZWxldGVOb2RlKFxuc2VsbFJlY29yZC5yZWNvcmRlcktpdC5yZWNvcmRlci5nZXRTdG9yYWdlTm9kZSgpKTtcblxuXG4vL1xubWFya2V0RmFjZXQudXBkYXRlTWV0cmljcygnaXRlbScse1xuYW1vdW50U29sZDp0cnVlLFxubGF0ZXN0U2FsZVByaWNlOk51bWJlcihpdGVtRm9yU2FsZVByaWNlLnZhbHVlKX0pO1xuXG5yZXR1cm57XG5zdWNjZXNzOnRydWUsXG5lcnJvcjonJ307XG5cbiB9LFxuLypcblxuXG5cblxuXG4gICAgICAgICAqL1xuICAgICAgYXN5bmMgYnV5U2Vjb25kYXJ5U2FsZUl0ZW0oc2VsbGVyU2VhdCxidXllclNlYXQsc2VsbFJlY29yZCl7XG5jb25zdHttYXJrZXQ6bWFya2V0RmFjZXR9PXRoaXMuZmFjZXRzO1xuXG5jb25zdHt3YW50LGdpdmV9PWJ1eWVyU2VhdC5nZXRQcm9wb3NhbCgpO1xuY29uc3R7SXRlbTp3YW50ZWRJdGVtQW1vdW50fT13YW50O1xuXG5jb25zdCBpdGVtRm9yU2FsZUFtb3VudD1zZWxsZXJTZWF0LmdldFByb3Bvc2FsKCkuZ2l2ZS5JdGVtO1xuY29uc3QgaXRlbUZvclNhbGVQcmljZT1zZWxsZXJTZWF0LmdldFByb3Bvc2FsKCkud2FudC5QcmljZTtcblxuLy9cbmNvbnN0e1ByaWNlOnByb3ZpZGVkTW9uZXlBbW91bnR9PWdpdmU7XG5cbmlmKFxuIUFtb3VudE1hdGguaXNFcXVhbCh3YW50ZWRJdGVtQW1vdW50LGl0ZW1Gb3JTYWxlQW1vdW50LGl0ZW1CcmFuZCkpXG57XG5yZXR1cm57XG5zdWNjZXNzOmZhbHNlLFxuZXJyb3I6ZXJyb3JzLnNlbGxlclNlYXRNaXNtYXRjaH07XG5cbiB9XG5cbmlmKFxuIUFtb3VudE1hdGguaXNHVEUoXG5wcm92aWRlZE1vbmV5QW1vdW50LFxuQW1vdW50TWF0aC5hZGQoXG5BbW91bnRNYXRoLmFkZChzZWxsUmVjb3JkLmFza2luZ1ByaWNlLHNlbGxSZWNvcmQucm95YWx0eSksXG5zZWxsUmVjb3JkLnBsYXRmb3JtRmVlKSxcblxucGF5bWVudEJyYW5kKSlcblxue1xucmV0dXJue1xuc3VjY2VzczpmYWxzZSxcbmVycm9yOmVycm9ycy5pbnN1ZmZpY2llbnRGdW5kc307XG5cbiB9XG5cbmNvbnN0e3pjZlNlYXQsdXNlclNlYXR9PXpjZi5tYWtlRW1wdHlTZWF0S2l0KCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0cmFuc2ZlcnM9W107XG4vL1xudHJhbnNmZXJzLnB1c2goW3NlbGxlclNlYXQsYnV5ZXJTZWF0LHtJdGVtOml0ZW1Gb3JTYWxlQW1vdW50fV0pO1xuLy9cbnRyYW5zZmVycy5wdXNoKFtcbmJ1eWVyU2VhdCxcbnpjZlNlYXQsXG57UHJpY2U6c2VsbFJlY29yZC5yb3lhbHR5fSxcbntSb3lhbHR5OnNlbGxSZWNvcmQucm95YWx0eX1dKTtcblxuLy9cbnRyYW5zZmVycy5wdXNoKFtcbmJ1eWVyU2VhdCxcbnpjZlNlYXQsXG57UHJpY2U6c2VsbFJlY29yZC5wbGF0Zm9ybUZlZX0sXG57UGxhdGZvcm1GZWU6c2VsbFJlY29yZC5wbGF0Zm9ybUZlZX1dKTtcblxuXG4vL1xudHJhbnNmZXJzLnB1c2goW1xuYnV5ZXJTZWF0LFxuc2VsbGVyU2VhdCxcbntcblByaWNlOkFtb3VudE1hdGguc3VidHJhY3QoXG5wcm92aWRlZE1vbmV5QW1vdW50LFxuQW1vdW50TWF0aC5hZGQoc2VsbFJlY29yZC5yb3lhbHR5LHNlbGxSZWNvcmQucGxhdGZvcm1GZWUpKX1dKTtcblxuXG5cblxudHJ5e1xuYXRvbWljUmVhcnJhbmdlKHpjZixoYXJkZW4odHJhbnNmZXJzKSk7XG4gfWNhdGNoKGUpe1xuYXNzZXJ0LmZhaWwoZXJyb3JzLnJlYXJyYW5nZUVycm9yKTtcbiB9XG5cbmJ1eWVyU2VhdC5leGl0KCk7XG5zZWxsZXJTZWF0LmV4aXQoKTtcbnpjZlNlYXQuZXhpdCgpO1xuXG5jb25zdCBwYXlvdXRzPWF3YWl0IEUodXNlclNlYXQpLmdldFBheW91dHMoKTtcbmNvbnN0IHJveWFsdHlQYXlvdXQ9YXdhaXQgcGF5b3V0cy5Sb3lhbHR5O1xuY29uc3QgcGxhdGZvcm1GZWVQYXlvdXQ9YXdhaXQgcGF5b3V0cy5QbGF0Zm9ybUZlZTtcblxuYXdhaXQgRShyb3lhbHR5RGVwb3NpdEZhY2V0KS5yZWNlaXZlKHJveWFsdHlQYXlvdXQpO1xuYXdhaXQgRShwbGF0Zm9ybUZlZURlcG9zaXRGYWNldCkucmVjZWl2ZShwbGF0Zm9ybUZlZVBheW91dCk7XG5cbi8vXG5tYXJrZXRGYWNldC51cGRhdGVNZXRyaWNzKCdpdGVtJyx7XG5hbW91bnRTb2xkOnRydWUsXG5sYXRlc3RTYWxlUHJpY2U6TnVtYmVyKGl0ZW1Gb3JTYWxlUHJpY2UudmFsdWUpfSk7XG5cbnJldHVybntcbnN1Y2Nlc3M6dHJ1ZSxcbmVycm9yOicnfTtcblxuIH0sXG5idXlDaGFyYWN0ZXIoKXtcbi8qXG5cbiAgICAgICAgICAgKi9cbmNvbnN0IGhhbmRsZXI9YXN5bmMoYnV5ZXJTZWF0KT0+e1xuY29uc3R7bWFya2V0Om1hcmtldEZhY2V0fT10aGlzLmZhY2V0cztcbmNvbnN0e21hcmtldCxjaGFyYWN0ZXI6Y2hhcmFjdGVyU3RhdGV9PXRoaXMuc3RhdGU7XG5cbi8vXG5jb25zdHt3YW50LGdpdmV9PWJ1eWVyU2VhdC5nZXRQcm9wb3NhbCgpO1xuY29uc3R7Q2hhcmFjdGVyOndhbnRlZENoYXJhY3RlckFtb3VudH09d2FudDtcbmNvbnN0IGNoYXJhY3Rlcj13YW50ZWRDaGFyYWN0ZXJBbW91bnQudmFsdWUucGF5bG9hZFswXVswXTtcblxuLy9cbmNvbnN0IGNoYXJhY3RlclJlY29yZD1jaGFyYWN0ZXJTdGF0ZS5lbnRyaWVzLmdldChjaGFyYWN0ZXIubmFtZSk7XG5jaGFyYWN0ZXJSZWNvcmR8fGFzc2VydC5mYWlsKGVycm9ycy5jaGFyYWN0ZXI0MDQpO1xuXG4vL1xuY29uc3Qgc2VsbFJlY29yZD1tYXJrZXQuY2hhcmFjdGVyRW50cmllcy5nZXQoY2hhcmFjdGVyLm5hbWUpO1xuXG5zZWxsUmVjb3JkfHxhc3NlcnQuZmFpbChlcnJvcnMuY2hhcmFjdGVyNDA0KTtcbmNvbnN0IHNlbGxlclNlYXQ9c2VsbFJlY29yZC5zZWF0O1xuXG4vL1xuY29uc3R7UHJpY2U6cHJvdmlkZWRNb25leUFtb3VudH09Z2l2ZTtcbmNvbnN0e0NoYXJhY3RlcjpjaGFyYWN0ZXJGb3JTYWxlQW1vdW50fT1cbnNlbGxlclNlYXQuZ2V0UHJvcG9zYWwoKS5naXZlO1xuXG5BbW91bnRNYXRoLmlzRXF1YWwoXG53YW50ZWRDaGFyYWN0ZXJBbW91bnQsXG5jaGFyYWN0ZXJGb3JTYWxlQW1vdW50LFxuY2hhcmFjdGVyQnJhbmQpfHxcbmFzc2VydC5mYWlsKGVycm9ycy5zZWxsZXJTZWF0TWlzbWF0Y2gpO1xuXG5jb25zdCBjaGFyYWN0ZXJGb3JTYWxlUHJpY2U9c2VsbFJlY29yZC5hc2tpbmdQcmljZTtcblxuQW1vdW50TWF0aC5pc0dURShcbnByb3ZpZGVkTW9uZXlBbW91bnQsXG5BbW91bnRNYXRoLmFkZChcbkFtb3VudE1hdGguYWRkKHNlbGxSZWNvcmQuYXNraW5nUHJpY2Usc2VsbFJlY29yZC5yb3lhbHR5KSxcbnNlbGxSZWNvcmQucGxhdGZvcm1GZWUpLFxuXG5wYXltZW50QnJhbmQpfHxcbmFzc2VydC5mYWlsKGVycm9ycy5pbnN1ZmZpY2llbnRGdW5kcyk7XG5jb25zdHt6Y2ZTZWF0LHVzZXJTZWF0fT16Y2YubWFrZUVtcHR5U2VhdEtpdCgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdHJhbnNmZXJzPVtdO1xudHJhbnNmZXJzLnB1c2goW1xuc2VsbGVyU2VhdCxcbmJ1eWVyU2VhdCxcbntDaGFyYWN0ZXI6Y2hhcmFjdGVyRm9yU2FsZUFtb3VudH1dKTtcblxudHJhbnNmZXJzLnB1c2goW1xuYnV5ZXJTZWF0LFxuemNmU2VhdCxcbntQcmljZTpzZWxsUmVjb3JkLnJveWFsdHl9LFxue1JveWFsdHk6c2VsbFJlY29yZC5yb3lhbHR5fV0pO1xuXG50cmFuc2ZlcnMucHVzaChbXG5idXllclNlYXQsXG56Y2ZTZWF0LFxue1ByaWNlOnNlbGxSZWNvcmQucGxhdGZvcm1GZWV9LFxue1BsYXRmb3JtRmVlOnNlbGxSZWNvcmQucGxhdGZvcm1GZWV9XSk7XG5cbnRyYW5zZmVycy5wdXNoKFtcbmJ1eWVyU2VhdCxcbnNlbGxlclNlYXQsXG57XG5QcmljZTpBbW91bnRNYXRoLnN1YnRyYWN0KFxucHJvdmlkZWRNb25leUFtb3VudCxcbkFtb3VudE1hdGguYWRkKHNlbGxSZWNvcmQucm95YWx0eSxzZWxsUmVjb3JkLnBsYXRmb3JtRmVlKSl9XSk7XG5cblxuXG5cbnRyeXtcbmF0b21pY1JlYXJyYW5nZSh6Y2YsaGFyZGVuKHRyYW5zZmVycykpO1xuIH1jYXRjaChlKXtcbmFzc2VydC5mYWlsKGVycm9ycy5yZWFycmFuZ2VFcnJvcik7XG4gfVxuemNmU2VhdC5leGl0KCk7XG5cbmNvbnN0IHBheW91dHM9YXdhaXQgRSh1c2VyU2VhdCkuZ2V0UGF5b3V0cygpO1xuY29uc3Qgcm95YWx0eVBheW91dD1hd2FpdCBwYXlvdXRzLlJveWFsdHk7XG5jb25zdCBwbGF0Zm9ybUZlZVBheW91dD1hd2FpdCBwYXlvdXRzLlBsYXRmb3JtRmVlO1xuXG5hd2FpdCBFKHJveWFsdHlEZXBvc2l0RmFjZXQpLnJlY2VpdmUocm95YWx0eVBheW91dCk7XG5hd2FpdCBFKHBsYXRmb3JtRmVlRGVwb3NpdEZhY2V0KS5yZWNlaXZlKHBsYXRmb3JtRmVlUGF5b3V0KTtcblxuLy9cbm1hcmtldEZhY2V0LnVwZGF0ZU1ldHJpY3MoJ2NoYXJhY3Rlcicse1xuYW1vdW50U29sZDp0cnVlLFxubGF0ZXN0U2FsZVByaWNlOk51bWJlcihjaGFyYWN0ZXJGb3JTYWxlUHJpY2UudmFsdWUpfSk7XG5cblxuYnV5ZXJTZWF0LmV4aXQoKTtcbnNlbGxlclNlYXQuZXhpdCgpO1xuIH07XG5cbnJldHVybiB6Y2YubWFrZUludml0YXRpb24oXG5oYW5kbGVyLFxuJ0J1eSBDaGFyYWN0ZXIgaW4gS1JFQWQgbWFya2V0cGxhY2UnLFxudW5kZWZpbmVkLFxuTS5zcGxpdFJlY29yZCh7XG5naXZlOntcblByaWNlOk0uc3BsaXRSZWNvcmQoe1xuYnJhbmQ6QnJhbmRTaGFwZSxcbnZhbHVlOk0ubmF0KCl9KX0sXG5cblxud2FudDp7XG5DaGFyYWN0ZXI6TS5zcGxpdFJlY29yZChjaGFyYWN0ZXJTaGFwZSl9fSkpO1xuXG5cblxuIH19LFxuXG5jcmVhdG9yOntcbm1ha2VNaW50SXRlbUludml0YXRpb24oKXtcbmNvbnN0e2l0ZW19PXRoaXMuZmFjZXRzO1xucmV0dXJuIGl0ZW0ubWludCgpO1xuIH0sXG5pbml0aWFsaXplTWV0cmljcygpe1xuY29uc3R7bWFya2V0fT10aGlzLnN0YXRlO1xuaWYobWFya2V0Lm1ldHJpY3MuZ2V0U2l6ZSgpPjApcmV0dXJuO1xuXG5hZGRBbGxUb01hcChcbm1hcmtldC5tZXRyaWNzLFxuWydjaGFyYWN0ZXInLCdpdGVtJ10ubWFwKChrZXkpPT5bXG5rZXksXG5oYXJkZW4oe1xuY29sbGVjdGlvblNpemU6MCxcbmF2ZXJhZ2VMZXZlbDowLFxubWFya2V0cGxhY2VBdmVyYWdlTGV2ZWw6MCxcbmFtb3VudFNvbGQ6MCxcbmxhdGVzdFNhbGVQcmljZTowLFxucHV0Rm9yU2FsZUNvdW50OjB9KV0pKTtcblxuXG5cblxubWFya2V0Q2hhcmFjdGVyTWV0cmljc0tpdC5yZWNvcmRlci53cml0ZShcbm1hcmtldC5tZXRyaWNzLmdldCgnY2hhcmFjdGVyJykpO1xuXG5tYXJrZXRJdGVtTWV0cmljc0tpdC5yZWNvcmRlci53cml0ZShtYXJrZXQubWV0cmljcy5nZXQoJ2l0ZW0nKSk7XG4gfSxcbnJldml2ZU1hcmtldEV4aXRTdWJzY3JpYmVycygpe1xuY29uc3R7bWFya2V0fT10aGlzLnN0YXRlO1xuY29uc3R7bWFya2V0Om1hcmtldEZhY2V0fT10aGlzLmZhY2V0cztcblxuY29uc3QgY2hhcmFjdGVycz1BcnJheS5mcm9tKG1hcmtldC5jaGFyYWN0ZXJFbnRyaWVzLnZhbHVlcygpKTtcbmNoYXJhY3RlcnMuZm9yRWFjaCgoZW50cnkpPT5tYXJrZXRGYWNldC5oYW5kbGVFeGl0Q2hhcmFjdGVyKGVudHJ5KSk7XG5cbmNvbnN0IGl0ZW1zPUFycmF5LmZyb20obWFya2V0Lml0ZW1FbnRyaWVzLnZhbHVlcygpKTtcbml0ZW1zLmZvckVhY2goKGVudHJ5KT0+bWFya2V0RmFjZXQuaGFuZGxlRXhpdEl0ZW0oZW50cnkpKTtcbiB9LFxuaW5pdGlhbGl6ZUJhc2VBc3NldHMoYmFzZUNoYXJhY3RlcnMsYmFzZUl0ZW1zKXtcbmNvbnN0e2NoYXJhY3RlcixpdGVtfT10aGlzLmZhY2V0cztcbmNoYXJhY3Rlci5pbml0aWFsaXplQmFzZUNoYXJhY3RlcnMoYmFzZUNoYXJhY3RlcnMpO1xuaXRlbS5pbml0aWFsaXplQmFzZUl0ZW1zKGJhc2VJdGVtcyk7XG4gfSxcbmluaXRpYWxpemVDaGFyYWN0ZXJOYW1lc0VudHJpZXMoKXtcbmNvbnN0e2NoYXJhY3Rlcn09dGhpcy5zdGF0ZTtcbmlmKCFjaGFyYWN0ZXIuZW50cmllcy5oYXMoJ25hbWVzJykpe1xuY2hhcmFjdGVyLmVudHJpZXMuaW5pdCgnbmFtZXMnLGhhcmRlbihbXSkpO1xuIH1cbiB9LFxuLypcblxuXG5cbiAgICAgICAgICovXG4gICAgICBhc3luYyBwdWJsaXNoSXRlbUNvbGxlY3Rpb24ocHJpY2UsaXRlbXNUb1NlbGwpe1xuY29uc3R7bWFya2V0fT10aGlzLnN0YXRlO1xuY29uc3R7bWFya2V0Om1hcmtldEZhY2V0LGl0ZW19PXRoaXMuZmFjZXRzO1xuXG5jb25zdHt6Y2ZTZWF0OmludGVybmFsU2VsbFNlYXR9PXpjZi5tYWtlRW1wdHlTZWF0S2l0KCk7XG5hd2FpdCBpdGVtLm1pbnRCYXRjaChpbnRlcm5hbFNlbGxTZWF0LGl0ZW1zVG9TZWxsKTtcblxuY29uc3QgYXNraW5nUHJpY2U9e1xuYnJhbmQ6cHJpY2UuYnJhbmQsXG52YWx1ZTpwcmljZS52YWx1ZX07XG5cbmNvbnN0IHJveWFsdHk9bXVsdGlwbHlCeShwcmljZSxyb3lhbHR5UmF0ZSk7XG5jb25zdCBwbGF0Zm9ybUZlZT1tdWx0aXBseUJ5KHByaWNlLHBsYXRmb3JtRmVlUmF0ZSk7XG5jb25zdCBjbGFpbWVkSWRBbmRSZWNvcmRlcj1hd2FpdCBQcm9taXNlLmFsbChcbml0ZW1zVG9TZWxsLm1hcChhc3luYyhjb3B5QmFnRW50cnkpPT57XG5jb25zdFtfLGl0ZW1TdXBwbHldPWNvcHlCYWdFbnRyeTtcbmNvbnN0IHN1cHBseVJhbmdlPUFycmF5LmZyb20oQXJyYXkoTnVtYmVyKGl0ZW1TdXBwbHkpKS5rZXlzKCkpO1xuY29uc3QgaWRBbmRSZWNvcmRlcj1hd2FpdCBQcm9taXNlLmFsbChcbnN1cHBseVJhbmdlLm1hcChhc3luYygpPT57XG4vL1xuY29uc3QgaWQ9XG50aGlzLnN0YXRlLm1hcmtldC5tZXRyaWNzLmdldCgnaXRlbScpLnB1dEZvclNhbGVDb3VudDtcbmF3YWl0IG1hcmtldEZhY2V0LnVwZGF0ZU1ldHJpY3MoJ2l0ZW0nLHtcbnB1dEZvclNhbGVDb3VudDp0cnVlfSk7XG5cbmNvbnN0IGVudHJ5UmVjb3JkZXI9XG5hd2FpdCBtYXJrZXRGYWNldC5tYWtlTWFya2V0SXRlbVJlY29yZGVyS2l0KGlkKTtcbnJldHVybltpZCxlbnRyeVJlY29yZGVyXTtcbiB9KSk7XG5cbnJldHVybiBpZEFuZFJlY29yZGVyO1xuIH0pKTtcblxuXG5pdGVtc1RvU2VsbC5mb3JFYWNoKGFzeW5jKGNvcHlCYWdFbnRyeSxpKT0+e1xuY29uc3RbaXRlbUFzc2V0LGl0ZW1TdXBwbHldPWNvcHlCYWdFbnRyeTtcblxuZm9yKGxldCBuPTA7bjxpdGVtU3VwcGx5O24rPTEpe1xuY29uc3RbaWQsZW50cnlSZWNvcmRlcl09Y2xhaW1lZElkQW5kUmVjb3JkZXJbaV1bbl07XG4vL1xuY29uc3QgbmV3RW50cnk9e1xuc2VhdDppbnRlcm5hbFNlbGxTZWF0LFxuYXNraW5nUHJpY2UsXG5yb3lhbHR5LFxucGxhdGZvcm1GZWUsXG5pZCxcbmFzc2V0Oml0ZW1Bc3NldCxcbnJlY29yZGVyS2l0OmVudHJ5UmVjb3JkZXIsXG5pc0ZpcnN0U2FsZTp0cnVlfTtcblxuXG4vL1xubWFya2V0RmFjZXQudXBkYXRlTWV0cmljcygnaXRlbScse1xubWFya2V0cGxhY2VBdmVyYWdlTGV2ZWw6e1xudHlwZTonYWRkJyxcbnZhbHVlOml0ZW1Bc3NldC5sZXZlbH19KTtcblxuXG5cbmFkZEFsbFRvTWFwKG1hcmtldC5pdGVtRW50cmllcyxbXG5bbmV3RW50cnkuaWQsaGFyZGVuKG5ld0VudHJ5KV1dKTtcblxuY29uc3R7c2VhdDpfb21pdFNlYXQscmVjb3JkZXJLaXQsLi4uZW50cnl9PW5ld0VudHJ5O1xucmVjb3JkZXJLaXQucmVjb3JkZXIud3JpdGUoZW50cnkpO1xuIH1cbiB9KTtcbiB9fSxcblxucHVibGljOntcbm1ha2VNaW50Q2hhcmFjdGVySW52aXRhdGlvbigpe1xuY29uc3R7Y2hhcmFjdGVyfT10aGlzLmZhY2V0cztcbnJldHVybiBjaGFyYWN0ZXIubWludCgpO1xuIH0sXG5nZXRDaGFyYWN0ZXJzKCl7XG5jb25zdCBjaGFyYWN0ZXJzPUFycmF5LmZyb20oXG50aGlzLnN0YXRlLmNoYXJhY3Rlci5lbnRyaWVzLnZhbHVlcygpKS5cbmZpbHRlcigoeCk9PiFBcnJheS5pc0FycmF5KHgpKTtcbnJldHVybiBjaGFyYWN0ZXJzO1xuIH0sXG5nZXRDaGFyYWN0ZXJJbnZlbnRvcnkobmFtZSl7XG5jb25zdCBjaGFyYWN0ZXI9dGhpcy5zdGF0ZS5jaGFyYWN0ZXIuZW50cmllcy5nZXQobmFtZSk7XG5jb25zdHtpbnZlbnRvcnl9PWNoYXJhY3RlcjtcbmNvbnN0IGl0ZW1zPWludmVudG9yeS5nZXRBbW91bnRBbGxvY2F0ZWQoJ0l0ZW0nLGl0ZW1CcmFuZCkudmFsdWUuXG5wYXlsb2FkO1xucmV0dXJue2l0ZW1zfTtcbiB9LFxubWFrZUVxdWlwSW52aXRhdGlvbigpe1xuY29uc3R7Y2hhcmFjdGVyfT10aGlzLmZhY2V0cztcbnJldHVybiBjaGFyYWN0ZXIuZXF1aXAoKTtcbiB9LFxubWFrZVVuZXF1aXBJbnZpdGF0aW9uKCl7XG5jb25zdHtjaGFyYWN0ZXJ9PXRoaXMuZmFjZXRzO1xucmV0dXJuIGNoYXJhY3Rlci51bmVxdWlwKCk7XG4gfSxcbm1ha2VJdGVtU3dhcEludml0YXRpb24oKXtcbmNvbnN0e2NoYXJhY3Rlcn09dGhpcy5mYWNldHM7XG5yZXR1cm4gY2hhcmFjdGVyLnN3YXAoKTtcbiB9LFxubWFrZVVuZXF1aXBBbGxJbnZpdGF0aW9uKCl7XG5jb25zdHtjaGFyYWN0ZXJ9PXRoaXMuZmFjZXRzO1xucmV0dXJuIGNoYXJhY3Rlci51bmVxdWlwQWxsKCk7XG4gfSxcbm1ha2VTZWxsQ2hhcmFjdGVySW52aXRhdGlvbigpe1xuY29uc3R7bWFya2V0fT10aGlzLmZhY2V0cztcbnJldHVybiBtYXJrZXQuc2VsbENoYXJhY3RlcigpO1xuIH0sXG5tYWtlQnV5Q2hhcmFjdGVySW52aXRhdGlvbigpe1xuY29uc3R7bWFya2V0fT10aGlzLmZhY2V0cztcbnJldHVybiBtYXJrZXQuYnV5Q2hhcmFjdGVyKCk7XG4gfSxcbmdldENoYXJhY3RlcnNGb3JTYWxlKCl7XG5jb25zdCBjaGFyYWN0ZXJzPUFycmF5LmZyb20oXG50aGlzLnN0YXRlLm1hcmtldC5jaGFyYWN0ZXJFbnRyaWVzLnZhbHVlcygpKTtcblxucmV0dXJuIGNoYXJhY3RlcnM7XG4gfSxcbm1ha2VTZWxsSXRlbUludml0YXRpb24oKXtcbmNvbnN0e21hcmtldH09dGhpcy5mYWNldHM7XG5yZXR1cm4gbWFya2V0LnNlbGxJdGVtKCk7XG4gfSxcbm1ha2VCdXlJdGVtSW52aXRhdGlvbigpe1xuY29uc3R7bWFya2V0fT10aGlzLmZhY2V0cztcbnJldHVybiBtYXJrZXQuYnV5SXRlbSgpO1xuIH0sXG5nZXRJdGVtc0ZvclNhbGUoKXtcbmNvbnN0IGl0ZW1zPUFycmF5LmZyb20odGhpcy5zdGF0ZS5tYXJrZXQuaXRlbUVudHJpZXMudmFsdWVzKCkpO1xucmV0dXJuIGl0ZW1zO1xuIH0sXG5nZXRNYXJrZXRNZXRyaWNzKCl7XG5jb25zdHttYXJrZXR9PXRoaXMuc3RhdGU7XG5yZXR1cm57XG5jaGFyYWN0ZXI6bWFya2V0Lm1ldHJpY3MuZ2V0KCdjaGFyYWN0ZXInKSxcbml0ZW06bWFya2V0Lm1ldHJpY3MuZ2V0KCdpdGVtJyl9O1xuXG4gfSxcbmdldENoYXJhY3RlckxldmVsKG5hbWUpe1xuY29uc3R7Y2hhcmFjdGVyfT10aGlzLmZhY2V0cztcbnJldHVybiBjaGFyYWN0ZXIuY2FsY3VsYXRlTGV2ZWwobmFtZSk7XG4gfX19KTtcblxuXG5cbiB9OyRozY9fb25jZS5wcmVwYXJlS3JlYWRLaXQocHJlcGFyZUtyZWFkS2l0KTtcblxuaGFyZGVuKHByZXBhcmVLcmVhZEtpdCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByb3ZpZGVLcmVhZEtpdFJlY29yZGVyS2l0cz0oXG5iYWdnYWdlLFxuc3RvcmFnZU5vZGUsXG5tYWtlUmVjb3JkZXJLaXQpPT5cblxucHJvdmlkZVJlY29yZGVyS2l0cyhcbmJhZ2dhZ2UsXG5zdG9yYWdlTm9kZSxcbm1ha2VSZWNvcmRlcktpdCxcbntcbmluZm9LaXQ6J2luZm8nLFxuY2hhcmFjdGVyS2l0OidjaGFyYWN0ZXInLFxuaXRlbUtpdDonaXRlbScsXG5tYXJrZXRDaGFyYWN0ZXJLaXQ6J21hcmtldC1jaGFyYWN0ZXJzJyxcbm1hcmtldEl0ZW1LaXQ6J21hcmtldC1pdGVtcycsXG5tYXJrZXRDaGFyYWN0ZXJNZXRyaWNzS2l0OidtYXJrZXQtbWV0cmljcy1jaGFyYWN0ZXInLFxubWFya2V0SXRlbU1ldHJpY3NLaXQ6J21hcmtldC1tZXRyaWNzLWl0ZW0nfSxcblxue1xuY2hhcmFjdGVyS2l0OkNoYXJhY3RlclJlY29yZGVyR3VhcmQsXG5pdGVtS2l0Okl0ZW1SZWNvcmRlckd1YXJkLFxubWFya2V0Q2hhcmFjdGVyS2l0Ok0uYXJyYXlPZihNYXJrZXRSZWNvcmRlckd1YXJkKSxcbm1hcmtldEl0ZW1LaXQ6TS5hcnJheU9mKE1hcmtldFJlY29yZGVyR3VhcmQpLFxubWFya2V0Q2hhcmFjdGVyTWV0cmljc0tpdDpNYXJrZXRNZXRyaWNzR3VhcmQsXG5tYXJrZXRJdGVtTWV0cmljc0tpdDpNYXJrZXRNZXRyaWNzR3VhcmR9KTskaM2PX29uY2UucHJvdmlkZUtyZWFkS2l0UmVjb3JkZXJLaXRzKHByb3ZpZGVLcmVhZEtpdFJlY29yZGVyS2l0cyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlS3JlYWRLaXQiOlsicHJlcGFyZUtyZWFkS2l0Il0sInByb3ZpZGVLcmVhZEtpdFJlY29yZGVyS2l0cyI6WyJwcm92aWRlS3JlYWRLaXRSZWNvcmRlcktpdHMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAEebfhGMHAABjBwAAKwAAAGtyZWFkLWNvbnRyYWN0LXYwLjEuMC9zcmMvbWFya2V0LW1ldHJpY3MuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbInVwZGF0ZUNvbGxlY3Rpb25NZXRyaWNzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBhZGRUb0F2ZXJhZ2UoYXZlcmFnZSxzaXplLHZhbHVlKXtcbnJldHVybihhdmVyYWdlKnNpemUrdmFsdWUpLyhzaXplKzEpO1xuIH1cblxuLypcblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRnJvbUF2ZXJhZ2UoYXZlcmFnZSxzaXplLHZhbHVlKXtcbmlmKHNpemU9PT0xKXtcbnJldHVybiAwO1xuIH1cbnJldHVybihzaXplKmF2ZXJhZ2UtdmFsdWUpLyhzaXplLTEpO1xuIH1cblxuLypcblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlQXZlcmFnZSh0eXBlLGF2ZXJhZ2Usc2l6ZSx2YWx1ZSl7XG5pZih0eXBlPT09J2FkZCcpe1xucmV0dXJuIGFkZFRvQXZlcmFnZShhdmVyYWdlLHNpemUsdmFsdWUpO1xuIH1lbHNlIGlmKHR5cGU9PT0ncmVtb3ZlJyl7XG5yZXR1cm4gcmVtb3ZlRnJvbUF2ZXJhZ2UoYXZlcmFnZSxzaXplLHZhbHVlKTtcbiB9XG4gfVxuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHVwZGF0ZUNvbGxlY3Rpb25NZXRyaWNzPShjb2xsZWN0aW9uLHN0YXRlLHVwZGF0ZU1ldHJpY3MpPT57XG5jb25zdCBtZXRyaWNzPXsuLi5zdGF0ZS5tYXJrZXQubWV0cmljcy5nZXQoY29sbGVjdGlvbil9O1xuaWYodXBkYXRlTWV0cmljcy5hdmVyYWdlTGV2ZWwpe1xubWV0cmljcy5hdmVyYWdlTGV2ZWw9dXBkYXRlQXZlcmFnZShcbnVwZGF0ZU1ldHJpY3MuYXZlcmFnZUxldmVsLnR5cGUsXG5tZXRyaWNzLmF2ZXJhZ2VMZXZlbCxcbm1ldHJpY3MuY29sbGVjdGlvblNpemUsXG51cGRhdGVNZXRyaWNzLmF2ZXJhZ2VMZXZlbC52YWx1ZSk7XG5cbiB9XG5pZih1cGRhdGVNZXRyaWNzLm1hcmtldHBsYWNlQXZlcmFnZUxldmVsKXtcbm1ldHJpY3MubWFya2V0cGxhY2VBdmVyYWdlTGV2ZWw9dXBkYXRlQXZlcmFnZShcbnVwZGF0ZU1ldHJpY3MubWFya2V0cGxhY2VBdmVyYWdlTGV2ZWwudHlwZSxcbm1ldHJpY3MubWFya2V0cGxhY2VBdmVyYWdlTGV2ZWwsXG5zdGF0ZS5tYXJrZXRbIGAke2NvbGxlY3Rpb259RW50cmllc2BdLmdldFNpemUoKSxcbnVwZGF0ZU1ldHJpY3MubWFya2V0cGxhY2VBdmVyYWdlTGV2ZWwudmFsdWUpO1xuXG4gfVxuaWYodXBkYXRlTWV0cmljcy5sYXRlc3RTYWxlUHJpY2UpXG5tZXRyaWNzLmxhdGVzdFNhbGVQcmljZT11cGRhdGVNZXRyaWNzLmxhdGVzdFNhbGVQcmljZTtcbmlmKHVwZGF0ZU1ldHJpY3MuY29sbGVjdGlvblNpemUpbWV0cmljcy5jb2xsZWN0aW9uU2l6ZSs9MTtcbmlmKHVwZGF0ZU1ldHJpY3MuYW1vdW50U29sZCltZXRyaWNzLmFtb3VudFNvbGQrPTE7XG5pZih1cGRhdGVNZXRyaWNzLnB1dEZvclNhbGVDb3VudCltZXRyaWNzLnB1dEZvclNhbGVDb3VudCs9MTtcblxuc3RhdGUubWFya2V0Lm1ldHJpY3Muc2V0KGNvbGxlY3Rpb24sbWV0cmljcyk7XG5yZXR1cm4gbWV0cmljcztcbiB9OyRozY9fb25jZS51cGRhdGVDb2xsZWN0aW9uTWV0cmljcyh1cGRhdGVDb2xsZWN0aW9uTWV0cmljcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ1cGRhdGVDb2xsZWN0aW9uTWV0cmljcyI6WyJ1cGRhdGVDb2xsZWN0aW9uTWV0cmljcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAjlm6BfgIAAH4CAAAhAAAAa3JlYWQtY29udHJhY3QtdjAuMS4wL3NyYy90ZXh0LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJ0ZXh0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBjb25zdCAgICAgICAgdGV4dD17XG5taW50Q2hhcmFjdGVyUmV0dXJuOidDaGFyYWN0ZXIgTkZUIG1pbnRlZCBzdWNjZXNzZnVsbHkhJyxcbm1pbnRJdGVtUmV0dXJuOidJdGVtIE5GVChzKSBtaW50ZWQgc3VjY2Vzc2Z1bGx5IScsXG50b2tlbkZhY2V0UmV0dXJuOidTdWNjZXNzJyxcbmVxdWlwUmV0dXJuOidJdGVtKHMpIHdlcmUgZXF1aXBwZWQgc3VjY2Vzc2Z1bGx5JyxcbnVuZXF1aXBSZXR1cm46J0l0ZW0ocykgd2VyZSB1bmVxdWlwcGVkIHN1Y2Nlc3NmdWxseSd9OyRozY9fb25jZS50ZXh0KHRleHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidGV4dCI6WyJ0ZXh0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAK0ajnGbIgAAmyIAACgAAABrcmVhZC1jb250cmFjdC12MC4xLjAvc3JjL3R5cGUtZ3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL2VydHAiXSwiZXhwb3J0cyI6WyJCYXNlQ2hhcmFjdGVyR3VhcmQiLCJDaGFyYWN0ZXJFbnRyeUd1YXJkIiwiQ2hhcmFjdGVyR3VhcmQiLCJDaGFyYWN0ZXJHdWFyZEJhZ1NoYXBlIiwiQ2hhcmFjdGVySSIsIkNoYXJhY3RlclJlY29yZGVyR3VhcmQiLCJDcmVhdG9ySSIsIkhlbHBlckkiLCJIaXN0b3J5R3VhcmQiLCJJdGVtR3VhcmQiLCJJdGVtR3VhcmRCYWdTaGFwZSIsIkl0ZW1JIiwiSXRlbVJlY29yZGVyR3VhcmQiLCJNYXJrZXRFbnRyeUd1YXJkIiwiTWFya2V0SSIsIk1hcmtldE1ldHJpY3NHdWFyZCIsIk1hcmtldFJlY29yZGVyR3VhcmQiLCJQdWJsaWNJIiwiUmFyaXR5R3VhcmQiLCJSYXRpb09iamVjdCIsIlVwZGF0ZU1hcmtldE1ldHJpY3NHdWFyZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNLEJyYW5kU2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkJyYW5kU2hhcGVcIiwgWyRozY9fYSA9PiAoQnJhbmRTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuY29uc3QgICAgICAgIEhlbHBlckk9TS5pbnRlcmZhY2UoXG4naGVscGVyJyxcbnt9LFxuLy9cbntzbG9wcHk6dHJ1ZX0pOyRozY9fb25jZS5IZWxwZXJJKEhlbHBlckkpO1xuXG5cbmNvbnN0ICAgICAgICBCYXNlQ2hhcmFjdGVyR3VhcmQ9TS5zcGxpdFJlY29yZCh7XG50aXRsZTpNLnN0cmluZygpLFxuZGVzY3JpcHRpb246TS5zdHJpbmcoKSxcbm9yaWdpbjpNLnN0cmluZygpLFxubGV2ZWw6TS5ndGUoMCksXG5hcnRpc3RNZXRhZGF0YTpNLnN0cmluZygpLFxuaW1hZ2U6TS5zdHJpbmcoKSxcbmNoYXJhY3RlclRyYWl0czpNLnN0cmluZygpfSk7JGjNj19vbmNlLkJhc2VDaGFyYWN0ZXJHdWFyZChCYXNlQ2hhcmFjdGVyR3VhcmQpO1xuXG5cbmNvbnN0ICAgICAgICBDaGFyYWN0ZXJHdWFyZD1NLnNwbGl0UmVjb3JkKHtcbnRpdGxlOk0uc3RyaW5nKCksXG5kZXNjcmlwdGlvbjpNLnN0cmluZygpLFxub3JpZ2luOk0uc3RyaW5nKCksXG5sZXZlbDpNLmd0ZSgwKSxcbmFydGlzdE1ldGFkYXRhOk0uc3RyaW5nKCksXG5pbWFnZTpNLnN0cmluZygpLFxuY2hhcmFjdGVyVHJhaXRzOk0uc3RyaW5nKCksXG5uYW1lOk0uc3RyaW5nKHtzdHJpbmdMZW5ndGhMaW1pdDoyMH0pLFxua2V5SWQ6TS5udW1iZXIoKSxcbmlkOk0uZ3RlKDApLFxuZGF0ZTpNLnJlY29yZCgpfSk7JGjNj19vbmNlLkNoYXJhY3Rlckd1YXJkKENoYXJhY3Rlckd1YXJkKTtcblxuXG5jb25zdCAgICAgICAgUmF0aW9PYmplY3Q9e1xubnVtZXJhdG9yOk0ubmF0KCksXG5kZW5vbWluYXRvcjpNLm5hdCgpfTskaM2PX29uY2UuUmF0aW9PYmplY3QoUmF0aW9PYmplY3QpO1xuXG5cbmNvbnN0ICAgICAgICBDaGFyYWN0ZXJHdWFyZEJhZ1NoYXBlPU0uYmFnT2YoQ2hhcmFjdGVyR3VhcmQpOyRozY9fb25jZS5DaGFyYWN0ZXJHdWFyZEJhZ1NoYXBlKENoYXJhY3Rlckd1YXJkQmFnU2hhcGUpO1xuXG5jb25zdCAgICAgICAgSXRlbUd1YXJkPU0uc3BsaXRSZWNvcmQoe1xubmFtZTpNLnN0cmluZygpLFxuY2F0ZWdvcnk6TS5vcihcbidoYWlyJyxcbidoZWFkUGllY2UnLFxuJ21hc2snLFxuJ2ZpbHRlcjEnLFxuJ2ZpbHRlcjInLFxuJ3BlcmsxJyxcbidwZXJrMicsXG4nZ2FybWVudCcsXG4ncGF0Y2gnLFxuJ2JhY2tncm91bmQnKSxcblxuZGVzY3JpcHRpb246TS5zdHJpbmcoKSxcbmZ1bmN0aW9uYWw6TS5ib29sZWFuKCksXG5vcmlnaW46TS5zdHJpbmcoKSxcbmltYWdlOk0uc3RyaW5nKCksXG50aHVtYm5haWw6TS5zdHJpbmcoKSxcbnJhcml0eTpNLmd0ZSgwKSxcbmxldmVsOk0uZ3RlKDApLFxuZmlsdGVyaW5nOk0uZ3RlKDApLFxud2VpZ2h0Ok0uZ3RlKDApLFxuc2Vuc2U6TS5ndGUoMCksXG5yZXNlcnZlczpNLmd0ZSgwKSxcbmR1cmFiaWxpdHk6TS5ndGUoMCksXG5jb2xvcnM6TS5hcnJheU9mKE0uc3RyaW5nKCkpLFxuYXJ0aXN0TWV0YWRhdGE6TS5zdHJpbmcoKX0pOyRozY9fb25jZS5JdGVtR3VhcmQoSXRlbUd1YXJkKTtcblxuXG5jb25zdCAgICAgICAgUmFyaXR5R3VhcmQ9TS5vcignY29tbW9uJywndW5jb21tb25Ub0xlZ2VuZGFyeScpOyRozY9fb25jZS5SYXJpdHlHdWFyZChSYXJpdHlHdWFyZCk7XG5cbmNvbnN0ICAgICAgICBJdGVtR3VhcmRCYWdTaGFwZT1NLmJhZ09mKEl0ZW1HdWFyZCk7JGjNj19vbmNlLkl0ZW1HdWFyZEJhZ1NoYXBlKEl0ZW1HdWFyZEJhZ1NoYXBlKTtcblxuY29uc3QgICAgICAgIE1hcmtldE1ldHJpY3NHdWFyZD1NLnNwbGl0UmVjb3JkKHtcbmFtb3VudFNvbGQ6TS5ndGUoMCksXG5jb2xsZWN0aW9uU2l6ZTpNLmd0ZSgwKSxcbmF2ZXJhZ2VMZXZlbDpNLmd0ZSgwKSxcbm1hcmtldHBsYWNlQXZlcmFnZUxldmVsOk0uZ3RlKDApLFxubGF0ZXN0U2FsZVByaWNlOk0uZ3RlKDApLFxucHV0Rm9yU2FsZUNvdW50Ok0uZ3RlKDApfSk7JGjNj19vbmNlLk1hcmtldE1ldHJpY3NHdWFyZChNYXJrZXRNZXRyaWNzR3VhcmQpO1xuXG5cbmNvbnN0ICAgICAgICBVcGRhdGVNYXJrZXRNZXRyaWNzR3VhcmQ9TS5zcGxpdFJlY29yZChcbnt9LFxue1xuYW1vdW50U29sZDpNLmJvb2xlYW4oKSxcbmNvbGxlY3Rpb25TaXplOk0uYm9vbGVhbigpLFxuYXZlcmFnZUxldmVsOk0uc3BsaXRSZWNvcmQoe1xudHlwZTpNLm9yKCdhZGQnLCdyZW1vdmUnKSxcbnZhbHVlOk0uZ3RlKDApfSksXG5cbm1hcmtldHBsYWNlQXZlcmFnZUxldmVsOk0uc3BsaXRSZWNvcmQoe1xudHlwZTpNLm9yKCdhZGQnLCdyZW1vdmUnKSxcbnZhbHVlOk0uZ3RlKDApfSksXG5cbmxhdGVzdFNhbGVQcmljZTpNLmd0ZSgwKSxcbnB1dEZvclNhbGVDb3VudDpNLmJvb2xlYW4oKX0pOyRozY9fb25jZS5VcGRhdGVNYXJrZXRNZXRyaWNzR3VhcmQoVXBkYXRlTWFya2V0TWV0cmljc0d1YXJkKTtcblxuXG5cbmNvbnN0ICAgICAgICBQdWJsaWNJPU0uaW50ZXJmYWNlKCdwdWJsaWMnLHtcbi8vXG5tYWtlTWludENoYXJhY3Rlckludml0YXRpb246TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG4vL1xubWFrZUVxdWlwSW52aXRhdGlvbjpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbm1ha2VVbmVxdWlwSW52aXRhdGlvbjpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbm1ha2VVbmVxdWlwQWxsSW52aXRhdGlvbjpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbm1ha2VJdGVtU3dhcEludml0YXRpb246TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG4vL1xubWFrZVNlbGxDaGFyYWN0ZXJJbnZpdGF0aW9uOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxubWFrZUJ1eUNoYXJhY3Rlckludml0YXRpb246TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5tYWtlU2VsbEl0ZW1JbnZpdGF0aW9uOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxubWFrZUJ1eUl0ZW1JbnZpdGF0aW9uOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuLy9cbmdldENoYXJhY3RlcnM6TS5jYWxsKCkucmV0dXJucyhNLmFycmF5KCkpLFxuZ2V0Q2hhcmFjdGVySW52ZW50b3J5Ok0uY2FsbChNLnN0cmluZygpKS5yZXR1cm5zKE0uc3BsaXRSZWNvcmQoe2l0ZW1zOk0uYXJyYXkoKX0pKSxcbmdldENoYXJhY3RlcnNGb3JTYWxlOk0uY2FsbCgpLnJldHVybnMoTS5hcnJheSgpKSxcbmdldEl0ZW1zRm9yU2FsZTpNLmNhbGwoKS5yZXR1cm5zKE0uYXJyYXkoKSksXG5nZXRNYXJrZXRNZXRyaWNzOk0uY2FsbCgpLnJldHVybnMoTS5yZWNvcmQoKSksXG5nZXRDaGFyYWN0ZXJMZXZlbDpNLmNhbGwoTS5zdHJpbmcoKSkucmV0dXJucyhNLmd0ZSgwKSl9KTskaM2PX29uY2UuUHVibGljSShQdWJsaWNJKTtcblxuXG5jb25zdCAgICAgICAgQ3JlYXRvckk9TS5pbnRlcmZhY2UoJ2NyZWF0b3InLHtcbm1ha2VNaW50SXRlbUludml0YXRpb246TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5pbml0aWFsaXplTWV0cmljczpNLmNhbGwoKS5yZXR1cm5zKCksXG5yZXZpdmVNYXJrZXRFeGl0U3Vic2NyaWJlcnM6TS5jYWxsKCkucmV0dXJucygpLFxuaW5pdGlhbGl6ZUJhc2VBc3NldHM6TS5jYWxsKFxuTS5hcnJheU9mKFtNLm51bWJlcigpLEJhc2VDaGFyYWN0ZXJHdWFyZF0pLFxuTS5hcnJheU9mKEl0ZW1HdWFyZCkpLlxucmV0dXJucygpLFxuaW5pdGlhbGl6ZUNoYXJhY3Rlck5hbWVzRW50cmllczpNLmNhbGwoKS5yZXR1cm5zKCksXG5wdWJsaXNoSXRlbUNvbGxlY3Rpb246TS5jYWxsKE0ucmVjb3JkKCksTS5hcnJheSgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKX0pOyRozY9fb25jZS5DcmVhdG9ySShDcmVhdG9ySSk7XG5cblxuY29uc3QgICAgICAgIENoYXJhY3Rlckk9TS5pbnRlcmZhY2UoJ2NoYXJhY3Rlcicse1xubWludDpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmVxdWlwOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxudW5lcXVpcDpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnVuZXF1aXBBbGw6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5zd2FwOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxudmFsaWRhdGVJbnZlbnRvcnlTdGF0ZTpNLmNhbGwoTS5hcnJheSgpKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmlzTmFtZVVuaXF1ZTpNLmNhbGwoTS5zdHJpbmcoKSkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5nZXRSYW5kb21CYXNlSW5kZXg6TS5jYWxsKCkucmV0dXJucyhNLmFueSgpKSxcbmNhbGN1bGF0ZUxldmVsOk0uY2FsbChNLnN0cmluZygpKS5yZXR1cm5zKE0uZ3RlKDApKSxcbm1ha2VJbnZlbnRvcnlSZWNvcmRlcktpdDpNLmNhbGwoTS5zdHJpbmcoKSkucmV0dXJucyhcbk0ucHJvbWlzZShNLnJlbW90YWJsZSgnTm90aWZpZXInKSkpLFxuXG5pbml0aWFsaXplQmFzZUNoYXJhY3RlcnM6TS5jYWxsKFxuTS5hcnJheU9mKFtNLm51bWJlcigpLEJhc2VDaGFyYWN0ZXJHdWFyZF0pKS5cbnJldHVybnMoKX0pOyRozY9fb25jZS5DaGFyYWN0ZXJJKENoYXJhY3RlckkpO1xuXG5cbmNvbnN0ICAgICAgICBJdGVtST1NLmludGVyZmFjZSgnaXRlbScse1xubWludDpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbm1pbnREZWZhdWx0QmF0Y2g6TS5jYWxsKE0ucmVtb3RhYmxlKCkpLnJldHVybnMoTS5wcm9taXNlKE0uc3RyaW5nKCkpKSxcbm1pbnRCYXRjaDpNLmNhbGwoTS5yZW1vdGFibGUoKSxNLmFycmF5KCkpLnJldHVybnMoTS5wcm9taXNlKE0uc3RyaW5nKCkpKSxcbmluaXRpYWxpemVCYXNlSXRlbXM6TS5jYWxsKE0uYXJyYXlPZihJdGVtR3VhcmQpKS5yZXR1cm5zKCl9KTskaM2PX29uY2UuSXRlbUkoSXRlbUkpO1xuXG5cbmNvbnN0ICAgICAgICBNYXJrZXRSZWNvcmRlckd1YXJkPU0ub3IoXG5NLnNwbGl0UmVjb3JkKHtcbmlkOk0ub3IoTS5ndGUoMCksTS5zdHJpbmcoKSksXG5hc2tpbmdQcmljZTpNLnNwbGl0UmVjb3JkKHtcbmJyYW5kOkJyYW5kU2hhcGUsXG52YWx1ZTpNLm5hdCgpfSksXG5cbnJveWFsdHk6TS5zcGxpdFJlY29yZCh7XG5icmFuZDpCcmFuZFNoYXBlLFxudmFsdWU6TS5uYXQoKX0pLFxuXG5wbGF0Zm9ybUZlZTpNLnNwbGl0UmVjb3JkKHtcbmJyYW5kOkJyYW5kU2hhcGUsXG52YWx1ZTpNLm5hdCgpfSksXG5cbmFzc2V0Ok0ub3IoQ2hhcmFjdGVyR3VhcmQsSXRlbUd1YXJkKSxcbmlzRmlyc3RTYWxlOk0uYm9vbGVhbigpfSksXG5cbk0uc3RyaW5nKCcnKSk7JGjNj19vbmNlLk1hcmtldFJlY29yZGVyR3VhcmQoTWFya2V0UmVjb3JkZXJHdWFyZCk7XG5cblxuY29uc3QgICAgICAgIE1hcmtldEVudHJ5R3VhcmQ9TS5zcGxpdFJlY29yZCh7XG5pZDpNLm9yKE0uZ3RlKDApLE0uc3RyaW5nKCkpLFxuc2VhdDpNLmVyZWYoTS5yZW1vdGFibGUoJ1NlYXQnKSksXG5yZWNvcmRlcktpdDpNLnJlY29yZCgpLFxuYXNraW5nUHJpY2U6TS5zcGxpdFJlY29yZCh7XG5icmFuZDpCcmFuZFNoYXBlLFxudmFsdWU6TS5uYXQoKX0pLFxuXG5yb3lhbHR5Ok0uc3BsaXRSZWNvcmQoe1xuYnJhbmQ6QnJhbmRTaGFwZSxcbnZhbHVlOk0ubmF0KCl9KSxcblxucGxhdGZvcm1GZWU6TS5zcGxpdFJlY29yZCh7XG5icmFuZDpCcmFuZFNoYXBlLFxudmFsdWU6TS5uYXQoKX0pLFxuXG5hc3NldDpNLm9yKENoYXJhY3Rlckd1YXJkLEl0ZW1HdWFyZCksXG5pc0ZpcnN0U2FsZTpNLmJvb2xlYW4oKX0pOyRozY9fb25jZS5NYXJrZXRFbnRyeUd1YXJkKE1hcmtldEVudHJ5R3VhcmQpO1xuXG5cbmNvbnN0ICAgICAgICBNYXJrZXRJPU0uaW50ZXJmYWNlKCdtYXJrZXQnLHtcbnNlbGxJdGVtOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuYnV5SXRlbTpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmJ1eUZpcnN0U2FsZUl0ZW06TS5jYWxsKE0ucmVtb3RhYmxlKCksTS5yZW1vdGFibGUoKSxNLnJlY29yZCgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmJ1eVNlY29uZGFyeVNhbGVJdGVtOk0uY2FsbChNLnJlbW90YWJsZSgpLE0ucmVtb3RhYmxlKCksTS5yZWNvcmQoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5oYW5kbGVFeGl0SXRlbTpNLmNhbGwoTWFya2V0RW50cnlHdWFyZCkucmV0dXJucygpLFxuaGFuZGxlRXhpdENoYXJhY3RlcjpNLmNhbGwoTWFya2V0RW50cnlHdWFyZCkucmV0dXJucygpLFxubWFrZU1hcmtldEl0ZW1SZWNvcmRlcktpdDpNLmNhbGwoTS5udW1iZXIoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5tYWtlTWFya2V0Q2hhcmFjdGVyUmVjb3JkZXJLaXQ6TS5jYWxsKE0uc3RyaW5nKCkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZGVsZXRlTm9kZTpNLmNhbGwoTS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJykpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuc2VsbENoYXJhY3RlcjpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmJ1eUNoYXJhY3RlcjpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnVwZGF0ZU1ldHJpY3M6TS5jYWxsKFxuTS5vcignY2hhcmFjdGVyJywnaXRlbScpLFxuVXBkYXRlTWFya2V0TWV0cmljc0d1YXJkKS5cbnJldHVybnMoKX0pOyRozY9fb25jZS5NYXJrZXRJKE1hcmtldEkpO1xuXG5cbmNvbnN0ICAgICAgICBIaXN0b3J5R3VhcmQ9TS5zcGxpdFJlY29yZCh7XG50eXBlOk0uc3RyaW5nKCksXG5kYXRhOk0uYW55KCksXG50aW1lc3RhbXA6TS5yZWNvcmQoKX0pOyRozY9fb25jZS5IaXN0b3J5R3VhcmQoSGlzdG9yeUd1YXJkKTtcblxuXG5jb25zdCAgICAgICAgQ2hhcmFjdGVyRW50cnlHdWFyZD1NLnNwbGl0UmVjb3JkKHtcbm5hbWU6TS5zdHJpbmcoKSxcbmNoYXJhY3RlcjpDaGFyYWN0ZXJHdWFyZCxcbmludmVudG9yeTpNLmVyZWYoTS5yZW1vdGFibGUoJ1NlYXQnKSksXG5pbnZlbnRvcnlLaXQ6TS5yZWNvcmQoKSxcbmhpc3Rvcnk6TS5hcnJheU9mKEhpc3RvcnlHdWFyZCl9KTskaM2PX29uY2UuQ2hhcmFjdGVyRW50cnlHdWFyZChDaGFyYWN0ZXJFbnRyeUd1YXJkKTtcblxuXG5jb25zdCAgICAgICAgQ2hhcmFjdGVyUmVjb3JkZXJHdWFyZD1NLnNwbGl0UmVjb3JkKHtcbm5hbWU6TS5zdHJpbmcoKSxcbmNoYXJhY3RlcjpDaGFyYWN0ZXJHdWFyZCxcbmludmVudG9yeUtpdDpNLnJlY29yZCgpLFxuaGlzdG9yeTpNLmFycmF5T2YoSGlzdG9yeUd1YXJkKX0pOyRozY9fb25jZS5DaGFyYWN0ZXJSZWNvcmRlckd1YXJkKENoYXJhY3RlclJlY29yZGVyR3VhcmQpO1xuXG5cbmNvbnN0ICAgICAgICBJdGVtUmVjb3JkZXJHdWFyZD1NLnNwbGl0UmVjb3JkKHtcbmlkOk0uZ3RlKDApLFxuaXRlbTpJdGVtR3VhcmQsXG5oaXN0b3J5Ok0uYXJyYXlPZihIaXN0b3J5R3VhcmQpfSk7JGjNj19vbmNlLkl0ZW1SZWNvcmRlckd1YXJkKEl0ZW1SZWNvcmRlckd1YXJkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkhlbHBlckkiOlsiSGVscGVySSJdLCJCYXNlQ2hhcmFjdGVyR3VhcmQiOlsiQmFzZUNoYXJhY3Rlckd1YXJkIl0sIkNoYXJhY3Rlckd1YXJkIjpbIkNoYXJhY3Rlckd1YXJkIl0sIlJhdGlvT2JqZWN0IjpbIlJhdGlvT2JqZWN0Il0sIkNoYXJhY3Rlckd1YXJkQmFnU2hhcGUiOlsiQ2hhcmFjdGVyR3VhcmRCYWdTaGFwZSJdLCJJdGVtR3VhcmQiOlsiSXRlbUd1YXJkIl0sIlJhcml0eUd1YXJkIjpbIlJhcml0eUd1YXJkIl0sIkl0ZW1HdWFyZEJhZ1NoYXBlIjpbIkl0ZW1HdWFyZEJhZ1NoYXBlIl0sIk1hcmtldE1ldHJpY3NHdWFyZCI6WyJNYXJrZXRNZXRyaWNzR3VhcmQiXSwiVXBkYXRlTWFya2V0TWV0cmljc0d1YXJkIjpbIlVwZGF0ZU1hcmtldE1ldHJpY3NHdWFyZCJdLCJQdWJsaWNJIjpbIlB1YmxpY0kiXSwiQ3JlYXRvckkiOlsiQ3JlYXRvckkiXSwiQ2hhcmFjdGVySSI6WyJDaGFyYWN0ZXJJIl0sIkl0ZW1JIjpbIkl0ZW1JIl0sIk1hcmtldFJlY29yZGVyR3VhcmQiOlsiTWFya2V0UmVjb3JkZXJHdWFyZCJdLCJNYXJrZXRFbnRyeUd1YXJkIjpbIk1hcmtldEVudHJ5R3VhcmQiXSwiTWFya2V0SSI6WyJNYXJrZXRJIl0sIkhpc3RvcnlHdWFyZCI6WyJIaXN0b3J5R3VhcmQiXSwiQ2hhcmFjdGVyRW50cnlHdWFyZCI6WyJDaGFyYWN0ZXJFbnRyeUd1YXJkIl0sIkNoYXJhY3RlclJlY29yZGVyR3VhcmQiOlsiQ2hhcmFjdGVyUmVjb3JkZXJHdWFyZCJdLCJJdGVtUmVjb3JkZXJHdWFyZCI6WyJJdGVtUmVjb3JkZXJHdWFyZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACyG9hxGQwAABkMAAAiAAAAa3JlYWQtY29udHJhY3QtdjAuMS4wL3NyYy91dGlscy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL2ludGVybmFsIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiYWRkQWxsVG9NYXAiLCJtYWtlQ2hhcmFjdGVyTmZ0T2JqcyIsIm1ha2VDb3B5QmFnQW1vdW50U2hhcGUiLCJtYWtlTmF0QW1vdW50U2hhcGUiLCJwcm92aWRlUmVjb3JkZXJLaXRzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFsbFZhbHVlcyxvYmplY3RNYXAsRSxNLG1hdGNoZXMsZ2V0Q29weU1hcEVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJhbGxWYWx1ZXNcIiwgWyRozY9fYSA9PiAoYWxsVmFsdWVzID0gJGjNj19hKV1dLFtcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXSxbXCJnZXRDb3B5TWFwRW50cmllc1wiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwRW50cmllcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e0ZhaWx9PWFzc2VydDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ2hhcmFjdGVyTmZ0T2Jqcz0oXG5uYW1lLFxucmFuZG9tQ2hhcmFjdGVyQmFzZSxcbm5ld0NoYXJhY3RlcklkLFxuY3VycmVudFRpbWUpPT5cbntcbi8vXG5jb25zdCBuZXdDaGFyYWN0ZXIxPXtcbi4uLnJhbmRvbUNoYXJhY3RlckJhc2UsXG5kYXRlOmN1cnJlbnRUaW1lLFxuaWQ6bmV3Q2hhcmFjdGVySWQsXG5uYW1lLFxua2V5SWQ6MX07XG5cbmNvbnN0IG5ld0NoYXJhY3RlcjI9e1xuLi4ubmV3Q2hhcmFjdGVyMSxcbmtleUlkOjJ9O1xuXG5yZXR1cm5bbmV3Q2hhcmFjdGVyMSxuZXdDaGFyYWN0ZXIyXTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VDaGFyYWN0ZXJOZnRPYmpzKG1ha2VDaGFyYWN0ZXJOZnRPYmpzKTtcbmNvbnN0ICAgICAgICBwcm92aWRlUmVjb3JkZXJLaXRzPWFzeW5jKFxuYmFnZ2FnZSxcbnN0b3JhZ2VOb2RlLFxubWFrZVJlY29yZGVyS2l0LFxucGF0aHMsXG50eXBlTWF0Y2hlcnMpPT5cbntcbi8vXG5jb25zdCBrZXlzPU9iamVjdC5rZXlzKHBhdGhzKTtcbi8vXG5jb25zdCBpbkJhZ2dhZ2U9YmFnZ2FnZS5oYXMoa2V5c1swXSk7XG5pZihpbkJhZ2dhZ2Upe1xuY29uc3Qgb2JqPW9iamVjdE1hcChcbnBhdGhzLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbihfLGspPT5iYWdnYWdlLmdldChrKSk7XG5cbnJldHVybiBQcm9taXNlLnJlc29sdmUoaGFyZGVuKG9iaikpO1xuIH1cblxuY29uc3Qga2V5ZWRQcm9taXNlcz1vYmplY3RNYXAocGF0aHMsYXN5bmMoX3BhdGgsa2V5KT0+e1xuY29uc3Qgbm9kZT1hd2FpdCBFKHN0b3JhZ2VOb2RlKS5tYWtlQ2hpbGROb2RlKHBhdGhzW2tleV0pO1xucmV0dXJuIG1ha2VSZWNvcmRlcktpdChub2RlLHR5cGVNYXRjaGVyc1trZXldKTtcbiB9KTtcblxucmV0dXJuIGFsbFZhbHVlcyhrZXllZFByb21pc2VzKS50aGVuKChrZXllZFZhbHMpPT57XG5mb3IoY29uc3Rbayx2XW9mIE9iamVjdC5lbnRyaWVzKGtleWVkVmFscykpe1xuYmFnZ2FnZS5pbml0KGssdik7XG4gfVxucmV0dXJuIGtleWVkVmFscztcbiB9KTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5wcm92aWRlUmVjb3JkZXJLaXRzKHByb3ZpZGVSZWNvcmRlcktpdHMpO1xuY29uc3QgICAgICAgIG1ha2VOYXRBbW91bnRTaGFwZT0oYnJhbmQsbWluKT0+XG5oYXJkZW4oe2JyYW5kLHZhbHVlOm1pbj9NLmd0ZShtaW4pOk0ubmF0KCl9KTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UubWFrZU5hdEFtb3VudFNoYXBlKG1ha2VOYXRBbW91bnRTaGFwZSk7XG5jb25zdCAgICAgICAgbWFrZUNvcHlCYWdBbW91bnRTaGFwZT0oYnJhbmQsc2hhcGUpPT5cbmhhcmRlbih7YnJhbmQsdmFsdWU6c2hhcGV9KTtcblxuLy9cbi8vXG4kaM2PX29uY2UubWFrZUNvcHlCYWdBbW91bnRTaGFwZShtYWtlQ29weUJhZ0Ftb3VudFNoYXBlKTtjb25zdCBpc0NvcHlNYXA9KG0pPT5tYXRjaGVzKG0sTS5tYXAoKSk7XG5jb25zdCAgICAgICAgYWRkQWxsVG9NYXA9KG1hcCxtYXBFbnRyaWVzKT0+e1xuaWYodHlwZW9mIG1hcEVudHJpZXNbU3ltYm9sLml0ZXJhdG9yXSE9PSdmdW5jdGlvbicpe1xuaWYoT2JqZWN0LmlzRnJvemVuKG1hcEVudHJpZXMpJiZpc0NvcHlNYXAobWFwRW50cmllcykpe1xubWFwRW50cmllcz1nZXRDb3B5TWFwRW50cmllcyhtYXBFbnRyaWVzKTtcbiB9ZWxzZXtcbkZhaWwgYHByb3ZpZGVkIGRhdGEgc291cmNlIGlzIG5vdCBpdGVyYWJsZTogJHttYXBFbnRyaWVzfWA7XG4gfVxuIH1cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgbWFwRW50cmllcyl7XG5pZihtYXAuaGFzKGtleSkpe1xubWFwLnNldChrZXksdmFsdWUpO1xuIH1lbHNle1xubWFwLmluaXQoa2V5LHZhbHVlLHRydWUpO1xuIH1cbiB9XG4gfTskaM2PX29uY2UuYWRkQWxsVG9NYXAoYWRkQWxsVG9NYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUNoYXJhY3Rlck5mdE9ianMiOlsibWFrZUNoYXJhY3Rlck5mdE9ianMiXSwicHJvdmlkZVJlY29yZGVyS2l0cyI6WyJwcm92aWRlUmVjb3JkZXJLaXRzIl0sIm1ha2VOYXRBbW91bnRTaGFwZSI6WyJtYWtlTmF0QW1vdW50U2hhcGUiXSwibWFrZUNvcHlCYWdBbW91bnRTaGFwZSI6WyJtYWtlQ29weUJhZ0Ftb3VudFNoYXBlIl0sImFkZEFsbFRvTWFwIjpbImFkZEFsbFRvTWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwECHgMKAAAAAAAAAAAATkHUMxJHAQASRwEAFAAAAAAAAAAAAAAApIEAAAAAY29tcGFydG1lbnQtbWFwLmpzb25QSwECHgMKAAAAAAAAAAAA5qwbmWsHAABrBwAAOQAAAAAAAAAAAAAApIFERwEAQGFnb3JpYy9hc3NlcnQtdjAuNi4xLWRldi0wNzA1ZjJjLjArMDcwNWYyYy9zcmMvYXNzZXJ0LmpzUEsBAh4DCgAAAAAAAAAAAAULvaB/AQAAfwEAADYAAAAAAAAAAAAAAKSBBk8BAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvaGVhcC5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAA9AAAAAAAAAAAAAACkgdlQAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9leHBvcnRzLmpzUEsBAh4DCgAAAAAAAAAAABLcf+RZCgAAWQoAADoAAAAAAAAAAAAAAKSBflIBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2hlYXAuanNQSwECHgMKAAAAAAAAAAAA7lq3z2sCAABrAgAAOwAAAAAAAAAAAAAApIEvXQEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAdelBrlgCAABYAgAAQQAAAAAAAAAAAAAApIHzXwEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaXMtcGFzc2FibGUuanNQSwECHgMKAAAAAAAAAAAAHmlMGXUDAAB1AwAAOgAAAAAAAAAAAAAApIGqYgEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMva2V5cy5qc1BLAQIeAwoAAAAAAAAAAAAfQoYp4gYAAOIGAAA/AAAAAAAAAAAAAACkgXdmAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9tYWtlLW9uY2UuanNQSwECHgMKAAAAAAAAAAAAWsTixkoKAABKCgAARwAAAAAAAAAAAAAApIG2bQEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvcHJlcGFyZS1yZXZvY2FibGUuanNQSwECHgMKAAAAAAAAAAAA72q0kl8JAABfCQAAQwAAAAAAAAAAAAAApIFleAEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvd2F0Y2gtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAAAx+aYwpgEAAKYBAAA+AAAAAAAAAAAAAACkgSWCAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3pvbmUtaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAABczaqHAB0AAAAdAAA8AAAAAAAAAAAAAACkgSeEAQBAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2Ftb3VudE1hdGguanNQSwECHgMKAAAAAAAAAAAAgUbFhdQDAADUAwAAPQAAAAAAAAAAAAAApIGBoQEAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9hbW91bnRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADood0axwUAAMcFAAA9AAAAAAAAAAAAAACkgbClAQBAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2Rpc3BsYXlJbmZvLmpzUEsBAh4DCgAAAAAAAAAAACOOMmo/AgAAPwIAADcAAAAAAAAAAAAAAKSB0qsBAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAaJTTyWoWAABqFgAAOwAAAAAAAAAAAAAApIFmrgEAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9pc3N1ZXJLaXQuanNQSwECHgMKAAAAAAAAAAAA5Ktj7uEFAADhBQAAUAAAAAAAAAAAAAAApIEpxQEAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAQYWPeJ8FAACfBQAAUAAAAAAAAAAAAAAApIF4ywEAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAlStwyWcEAABnBAAATAAAAAAAAAAAAAAApIGF0QEAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAABHCrnjSAYAAEgGAABMAAAAAAAAAAAAAACkgVbWAQBAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAADY/StV/AwAAfwMAADkAAAAAAAAAAAAAAKSBCN0BAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvcGF5bWVudC5qc1BLAQIeAwoAAAAAAAAAAAC4xE1m7R8AAO0fAAA/AAAAAAAAAAAAAACkgd7gAQBAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3BheW1lbnRMZWRnZXIuanNQSwECHgMKAAAAAAAAAAAAHcTRCroQAAC6EAAANwAAAAAAAAAAAAAApIEoAQIAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9wdXJzZS5qc1BLAQIeAwoAAAAAAAAAAACKmWPI1gUAANYFAABDAAAAAAAAAAAAAACkgTcSAgBAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3RyYW5zaWVudE5vdGlmaWVyLmpzUEsBAh4DCgAAAAAAAAAAABIwcE7MGAAAzBgAADwAAAAAAAAAAAAAAKSBbhgCAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAA9AAAAAAAAAAAAAACkgZQxAgBAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAALUPZ5pmAwAAZgMAAEEAAAAAAAAAAAAAAKSBOTMCAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29uc3RhbnRzLmpzUEsBAh4DCgAAAAAAAAAAAINMyAG3CwAAtwsAAFUAAAAAAAAAAAAAAKSB/jYCAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RHb3Zlcm5hbmNlL2Fzc2VydGlvbnMuanNQSwECHgMKAAAAAAAAAAAAkmCiu2ENAABhDQAAVAAAAAAAAAAAAAAApIEoQwIAQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdEdvdmVybmFuY2UvZ292ZXJuQXBpLmpzUEsBAh4DCgAAAAAAAAAAAP/YTyYxDAAAMQwAAFcAAAAAAAAAAAAAAKSB+1ACAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RHb3Zlcm5hbmNlL2dvdmVybkZpbHRlci5qc1BLAQIeAwoAAAAAAAAAAABDNkTxKhIAACoSAABWAAAAAAAAAAAAAACkgaFdAgBAYWdvcmljL2dvdmVybmFuY2UtdjAuMTAuNC1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0R292ZXJuYW5jZS9nb3Zlcm5QYXJhbS5qc1BLAQIeAwoAAAAAAAAAAACVTh7CXDEAAFwxAABXAAAAAAAAAAAAAACkgT9wAgBAYWdvcmljL2dvdmVybmFuY2UtdjAuMTAuNC1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0R292ZXJuYW5jZS9wYXJhbU1hbmFnZXIuanNQSwECHgMKAAAAAAAAAAAACH92z9UNAADVDQAAXAAAAAAAAAAAAAAApIEQogIAQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdEdvdmVybmFuY2UvdHlwZWRQYXJhbU1hbmFnZXIuanNQSwECHgMKAAAAAAAAAAAAClPVZsoRAADKEQAASAAAAAAAAAAAAAAApIFfsAIAQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdEdvdmVybm9yLmpzUEsBAh4DCgAAAAAAAAAAAK0zzCDZIQAA2SEAAEsAAAAAAAAAAAAAAKSBj8ICAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RHb3Zlcm5vcktpdC5qc1BLAQIeAwoAAAAAAAAAAAA+oc4dOx4AADseAABGAAAAAAAAAAAAAACkgdHkAgBAYWdvcmljL2dvdmVybmFuY2UtdjAuMTAuNC1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0SGVscGVyLmpzUEsBAh4DCgAAAAAAAAAAAE/qxCEvCQAALwkAAD0AAAAAAAAAAAAAAKSBcAMDAEBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAURB5JLgLAAC4CwAAQAAAAAAAAAAAAAAApIH6DAMAQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9xdWVzdGlvbi5qc1BLAQIeAwoAAAAAAAAAAADycNxlZjwAAGY8AABCAAAAAAAAAAAAAACkgRAZAwBAYWdvcmljL2dvdmVybmFuY2UtdjAuMTAuNC1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAAZmpUqkMJAABDCQAAQgAAAAAAAAAAAAAApIHWVQMAQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy92YWxpZGF0b3JzLmpzUEsBAh4DCgAAAAAAAAAAAFbRVxHpGQAA6RkAAD0AAAAAAAAAAAAAAKSBeV8DAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY2FsbGJhY2suanNQSwECHgMKAAAAAAAAAAAAMgP9Gc0FAADNBQAAOwAAAAAAAAAAAAAApIG9eQMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb25maWcuanNQSwECHgMKAAAAAAAAAAAAnKi0l0gEAABIBAAAOgAAAAAAAAAAAAAApIHjfwMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9kZWJ1Zy5qc1BLAQIeAwoAAAAAAAAAAAAC1eDCjgIAAI4CAAA7AAAAAAAAAAAAAACkgYOEAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2Vycm9ycy5qc1BLAQIeAwoAAAAAAAAAAAAf9quECwUAAAsFAAA6AAAAAAAAAAAAAACkgWqHAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAMwvptUfBwAAHwcAAD0AAAAAAAAAAAAAAKSBzYwDAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvanMtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAJm0Uq9MVAADTFQAARQAAAAAAAAAAAAAApIFHlAMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzUEsBAh4DCgAAAAAAAAAAALa9IV5rCAAAawgAAEEAAAAAAAAAAAAAAKSBfaoDAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbWV0aG9kLXRvb2xzLmpzUEsBAh4DCgAAAAAAAAAAAJoFH6+GHQAAhh0AAD4AAAAAAAAAAAAAAKSBR7MDAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvc2VzLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAEn5UEUhBgAAIQYAAEIAAAAAAAAAAAAAAKSBKdEDAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdGVzdGluZy11dGlscy5qc1BLAQIeAwoAAAAAAAAAAACHqlog/QIAAP0CAAA+AAAAAAAAAAAAAACkgarXAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVDaGVjay5qc1BLAQIeAwoAAAAAAAAAAACilQEQTgMAAE4DAAA/AAAAAAAAAAAAAACkgQPbAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAQAAAAAAAAAAAAAAApIGu3gMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlcy1pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACbh0FqEgcAABIHAABAAAAAAAAAAAAAAACkgVbgAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3VwZ3JhZGUtYXBpLmpzUEsBAh4DCgAAAAAAAAAAAK74YwMHCAAABwgAAEkAAAAAAAAAAAAAAKSBxucDAEBhZ29yaWMvbm90aWZpZXItdjAuNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNQSwECHgMKAAAAAAAAAAAAtRbSkN0HAADdBwAAOgAAAAAAAAAAAAAApIE08AMAQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADZW6LCcRAAAHEQAAA9AAAAAAAAAAAAAACkgWn4AwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL25vdGlmaWVyLmpzUEsBAh4DCgAAAAAAAAAAAHR6M6EtKwAALSsAAEAAAAAAAAAAAAAAAKSBNQkEAEBhZ29yaWMvbm90aWZpZXItdjAuNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvcHVibGlzaC1raXQuanNQSwECHgMKAAAAAAAAAAAAqJ0YXBEIAAARCAAARAAAAAAAAAAAAAAApIHANAQAQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zdG9yZWQtbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAApxMCM+0VAADtFQAAPQAAAAAAAAAAAAAApIEzPQQAQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zdG9yZXN1Yi5qc1BLAQIeAwoAAAAAAAAAAAAVB17zIRIAACESAAA+AAAAAAAAAAAAAACkgXtTBABAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N1YnNjcmliZS5qc1BLAQIeAwoAAAAAAAAAAACHaHtf0QcAANEHAAA/AAAAAAAAAAAAAACkgfhlBABAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N1YnNjcmliZXIuanNQSwECHgMKAAAAAAAAAAAAR1oa2u0DAADtAwAAOgAAAAAAAAAAAAAApIEmbgQAQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90b3BpYy5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAABAAAAAAAAAAAAAAACkgWtyBABAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJEsyRGOAQAAjgEAADoAAAAAAAAAAAAAAKSBE3QEAEBhZ29yaWMvbm90aWZpZXItdjAuNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zdWJzY3JpYmUuanNQSwECHgMKAAAAAAAAAAAA8UWFMoIGAACCBgAAQwAAAAAAAAAAAAAApIH5dQQAQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAADIQNAGlA0AAJQNAAA3AAAAAAAAAAAAAACkgdx8BABAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAPAiq641BQAANQUAAEIAAAAAAAAAAAAAAKSBxYoEAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc1BLAQIeAwoAAAAAAAAAAAC6xE3t9wQAAPcEAABGAAAAAAAAAAAAAACkgVqQBABAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzUEsBAh4DCgAAAAAAAAAAADtePIKcEAAAnBAAAEcAAAAAAAAAAAAAAKSBtZUEAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAJgs3yXNCwAAzQsAAEcAAAAAAAAAAAAAAKSBtqYEAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAOkOOdywDQAAsA0AAEsAAAAAAAAAAAAAAKSB6LIEAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAABUfScVcwoAAHMKAABLAAAAAAAAAAAAAACkgQHBBABAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanNQSwECHgMKAAAAAAAAAAAAedsLh6sOAACrDgAARAAAAAAAAAAAAAAApIHdywQAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAANwAAAAAAAAAAAAAApIHq2gQAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADfeBBmIgIAACICAAAyAAAAAAAAAAAAAACkgYncBABAYWdvcmljL3RpbWUtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAxnWLOcRMAAHETAAA5AAAAAAAAAAAAAACkgfveBABAYWdvcmljL3RpbWUtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdGltZU1hdGguanNQSwECHgMKAAAAAAAAAAAAGgbhCQsJAAALCQAAOwAAAAAAAAAAAAAApIHD8gQAQGFnb3JpYy90aW1lLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAPAAAAAAAAAAAAAAApIEn/AQAQGFnb3JpYy90aW1lLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAAORQqJWaFgAAmhYAAD4AAAAAAAAAAAAAAKSBy/0EAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvZXhvLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAALj1FjCoCAAAqAgAADoAAAAAAAAAAAAAAKSBwRQFAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAADBFy6awWAACsFgAARgAAAAAAAAAAAAAApIHBHQUAQGFnb3JpYy92YXQtZGF0YS12MC41LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy92YXQtZGF0YS1iaW5kaW5ncy5qc1BLAQIeAwoAAAAAAAAAAAAIwpyyTAEAAEwBAAA1AAAAAAAAAAAAAACkgdE0BQBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9leHBvcnRlZC5qc1BLAQIeAwoAAAAAAAAAAACZoqjEkhMAAJITAAA+AAAAAAAAAAAAAACkgXA2BQBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY2xlYW5Qcm9wb3NhbC5qc1BLAQIeAwoAAAAAAAAAAACLpZWa+gUAAPoFAABKAAAAAAAAAAAAAACkgV5KBQBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RGYWNldC9vZmZlclNhZmV0eS5qc1BLAQIeAwoAAAAAAAAAAAAX7ZyhOQcAADkHAABPAAAAAAAAAAAAAACkgcBQBQBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L2F0b21pY1RyYW5zZmVyLmpzUEsBAh4DCgAAAAAAAAAAANeFHZ2UDwAAlA8AAE4AAAAAAAAAAAAAAKSBZlgFAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdFN1cHBvcnQvYm9uZGluZ0N1cnZlcy5qc1BLAQIeAwoAAAAAAAAAAACexTJexwkAAMcJAABLAAAAAAAAAAAAAACkgWZoBQBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L2R1cmFiaWxpdHkuanNQSwECHgMKAAAAAAAAAAAAkPjgRUIKAABCCgAARgAAAAAAAAAAAAAApIGWcgUAQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0U3VwcG9ydC9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADvVJbFFggAABYIAABQAAAAAAAAAAAAAACkgTx9BQBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L3ByZXBhcmUtb3duYWJsZS5qc1BLAQIeAwoAAAAAAAAAAACec9JUvCMAALwjAABPAAAAAAAAAAAAAACkgcCFBQBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L3ByaWNlQXV0aG9yaXR5LmpzUEsBAh4DCgAAAAAAAAAAAGzpxhKwBwAAsAcAAEsAAAAAAAAAAAAAAKSB6akFAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdFN1cHBvcnQvcHJpY2VRdW90ZS5qc1BLAQIeAwoAAAAAAAAAAAA1mApEqSkAAKkpAABGAAAAAAAAAAAAAACkgQKyBQBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L3JhdGlvLmpzUEsBAh4DCgAAAAAAAAAAAMlqLINRGAAAURgAAEkAAAAAAAAAAAAAAKSBD9wFAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanNQSwECHgMKAAAAAAAAAAAAw4lsH9kEAADZBAAASQAAAAAAAAAAAAAApIHH9AUAQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0U3VwcG9ydC9zYWZlTWF0aC5qc1BLAQIeAwoAAAAAAAAAAACTc/2CxgMAAMYDAABNAAAAAAAAAAAAAACkgQf6BQBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L3N0YXRlTWFjaGluZS5qc1BLAQIeAwoAAAAAAAAAAAAlHSVSkQMAAJEDAABLAAAAAAAAAAAAAACkgTj+BQBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29udHJhY3RTdXBwb3J0L3N0YXRpc3RpY3MuanNQSwECHgMKAAAAAAAAAAAAq/Evnk0GAABNBgAARwAAAAAAAAAAAAAApIEyAgYAQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0U3VwcG9ydC90b3BpY3MuanNQSwECHgMKAAAAAAAAAAAAtW7/rTAiAAAwIgAASwAAAAAAAAAAAAAApIHkCAYAQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2NvbnRyYWN0U3VwcG9ydC96b2VIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAJty+dFtBAAAbQQAAD8AAAAAAAAAAAAAAKSBfSsGAEBhZ29yaWMvem9lLXYwLjI2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9pbnRlcm5hbC10eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAAzg7JVUQYAAFEGAAA7AAAAAAAAAAAAAACkgUcwBgBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbWFrZUhhbmRsZS5qc1BLAQIeAwoAAAAAAAAAAACLew/ZekMAAHpDAAA7AAAAAAAAAAAAAACkgfE2BgBAYWdvcmljL3pvZS12MC4yNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAADbdTr/iAEAAIgBAAA0AAAAAAAAAAAAAACkgcR6BgBAYWdvcmljL3pvbmUtdjAuMi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9kdXJhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAHHljSIOEQAADhEAADgAAAAAAAAAAAAAAKSBnnwGAEBhZ29yaWMvem9uZS12MC4yLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9kdXJhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAFTiW7jHBAAAxwQAACsAAAAAAAAAAAAAAKSBAo4GAEBlbmRvL2NvbW1vbi12MS4yLjgvYXBwbHktbGFiZWxpbmctZXJyb3IuanNQSwECHgMKAAAAAAAAAAAAkAZXhlwEAABcBAAAKgAAAAAAAAAAAAAApIESkwYAQGVuZG8vY29tbW9uLXYxLjIuOC9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzUEsBAh4DCgAAAAAAAAAAAFFzDaQ3AgAANwIAACQAAAAAAAAAAAAAAKSBtpcGAEBlbmRvL2NvbW1vbi12MS4yLjgvaWRlbnQtY2hlY2tlci5qc1BLAQIeAwoAAAAAAAAAAABhWP6GeAIAAHgCAAAmAAAAAAAAAAAAAACkgS+aBgBAZW5kby9jb21tb24tdjEuMi44L2xpc3QtZGlmZmVyZW5jZS5qc1BLAQIeAwoAAAAAAAAAAAAPm8CoXQMAAF0DAAAqAAAAAAAAAAAAAACkgeucBgBAZW5kby9jb21tb24tdjEuMi44L21ha2UtYXJyYXktaXRlcmF0b3IuanNQSwECHgMKAAAAAAAAAAAAVosJ4zkCAAA5AgAAJAAAAAAAAAAAAAAApIGQoAYAQGVuZG8vY29tbW9uLXYxLjIuOC9tYWtlLWl0ZXJhdG9yLmpzUEsBAh4DCgAAAAAAAAAAAK1XBn4CAwAAAgMAACEAAAAAAAAAAAAAAKSBC6MGAEBlbmRvL2NvbW1vbi12MS4yLjgvb2JqZWN0LW1hcC5qc1BLAQIeAwoAAAAAAAAAAAA7n1+O4QMAAOEDAAAmAAAAAAAAAAAAAACkgUymBgBAZW5kby9jb21tb24tdjEuMi44L29iamVjdC1tZXRhLW1hcC5qc1BLAQIeAwoAAAAAAAAAAADCAhrL4QMAAOEDAAAkAAAAAAAAAAAAAACkgXGqBgBAZW5kby9jb21tb24tdjEuMi44L3Rocm93LWxhYmVsZWQuanNQSwECHgMKAAAAAAAAAAAAxRjnOpQBAACUAQAAIQAAAAAAAAAAAAAApIGUrgYAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJK3R37sDQAA7A0AACsAAAAAAAAAAAAAAKSBZ7AGAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOC9zcmMvZW52LW9wdGlvbnMuanNQSwECHgMKAAAAAAAAAAAA/HBpMd8HAADfBwAAHAAAAAAAAAAAAAAApIGcvgYAQGVuZG8vZXJyb3JzLXYxLjIuOC9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAB+XVUrpRAAAKUQAAAjAAAAAAAAAAAAAACkgbXGBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvRS5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAApAAAAAAAAAAAAAACkgZvXBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAAAQIOOsqgwAAKoMAAAnAAAAAAAAAAAAAACkgSzZBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvbG9jYWwuanNQSwECHgMKAAAAAAAAAAAAAY5wTOkMAADpDAAANQAAAAAAAAAAAAAApIEb5gYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanNQSwECHgMKAAAAAAAAAAAAGWy7RTMDAAAzAwAAKQAAAAAAAAAAAAAApIFX8wYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL25vLXNoaW0uanNQSwECHgMKAAAAAAAAAAAAhqimx18JAABfCQAALQAAAAAAAAAAAAAApIHR9gYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL3RyYWNrLXR1cm5zLmpzUEsBAh4DCgAAAAAAAAAAAD/w5zpWAgAAVgIAACMAAAAAAAAAAAAAAKSBewAHAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3V0aWxzLmpzUEsBAh4DCgAAAAAAAAAAALFYNphSAgAAUgIAABkAAAAAAAAAAAAAAKSBEgMHAEBlbmRvL2V4by12MS41LjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAPoHfvdcUAADXFAAAIgAAAAAAAAAAAAAApIGbBQcAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZXhvLW1ha2Vycy5qc1BLAQIeAwoAAAAAAAAAAADO7lsG5i8AAOYvAAAhAAAAAAAAAAAAAACkgbIaBwBAZW5kby9leG8tdjEuNS43L3NyYy9leG8tdG9vbHMuanNQSwECHgMKAAAAAAAAAAAARpM8bjYCAAA2AgAAJQAAAAAAAAAAAAAApIHXSgcAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZ2V0LWludGVyZmFjZS5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAdAAAAAAAAAAAAAACkgVBNBwBAZW5kby9leG8tdjEuNS43L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAALSpg4VgIAAFYCAAAdAAAAAAAAAAAAAACkgdVOBwBAZW5kby9mYXItdjEuMS45L3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAC4gWnwdAcAAHQHAAAdAAAAAAAAAAAAAACkgWZRBwBAZW5kby9tYXJzaGFsLXYxLjYuMi9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADXbFulWUMAAFlDAAAqAAAAAAAAAAAAAACkgRVZBwBAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvZW5jb2RlUGFzc2FibGUuanNQSwECHgMKAAAAAAAAAAAAX5zwMlIiAABSIgAAKwAAAAAAAAAAAAAApIG2nAcAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL2VuY29kZVRvQ2FwRGF0YS5qc1BLAQIeAwoAAAAAAAAAAAAPShurLiIAAC4iAAAtAAAAAAAAAAAAAACkgVG/BwBAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvZW5jb2RlVG9TbWFsbGNhcHMuanNQSwECHgMKAAAAAAAAAAAARQsy/RAjAAAQIwAAKgAAAAAAAAAAAAAApIHK4QcAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwtanVzdGluLmpzUEsBAh4DCgAAAAAAAAAAAEQSpudcBgAAXAYAAC0AAAAAAAAAAAAAAKSBIgUIAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qc1BLAQIeAwoAAAAAAAAAAAApw1JOKicAAConAAAjAAAAAAAAAAAAAACkgckLCABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC5qc1BLAQIeAwoAAAAAAAAAAAC7402JnCcAAJwnAAAlAAAAAAAAAAAAAACkgTQzCABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvcmFua09yZGVyLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACEAAAAAAAAAAAAAAKSBE1sIAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAABf6k6CWQUAAFkFAAAeAAAAAAAAAAAAAACkgZxcCABAZW5kby9uYXQtdjUuMC4xMy9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAoSmqvD8KAAA/CgAAIAAAAAAAAAAAAAAApIExYggAQGVuZG8vcGFzcy1zdHlsZS12MS40LjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAl6i/JVQGAABUBgAAKAAAAAAAAAAAAAAApIGubAgAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2NvcHlBcnJheS5qc1BLAQIeAwoAAAAAAAAAAAAyz0q1KQgAACkIAAApAAAAAAAAAAAAAACkgUhzCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvY29weVJlY29yZC5qc1BLAQIeAwoAAAAAAAAAAABwIuV6VgoAAFYKAAAuAAAAAAAAAAAAAACkgbh7CABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzUEsBAh4DCgAAAAAAAAAAAEObiqg0EgAANBIAACQAAAAAAAAAAAAAAKSBWoYIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9lcnJvci5qc1BLAQIeAwoAAAAAAAAAAABBT/xPjwUAAI8FAAArAAAAAAAAAAAAAACkgdCYCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvaXRlci1oZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAGTP4m9BEQAAQREAACcAAAAAAAAAAAAAAKSBqJ4IAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9tYWtlLWZhci5qc1BLAQIeAwoAAAAAAAAAAAAr0aC/gAQAAIAEAAApAAAAAAAAAAAAAACkgS6wCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvbWFrZVRhZ2dlZC5qc1BLAQIeAwoAAAAAAAAAAAANIpJ3FBUAABQVAAAwAAAAAAAAAAAAAACkgfW0CABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAFAxNfrAkAACwJAAAKgAAAAAAAAAAAAAApIFXyggAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3Bhc3NTdHlsZU9mLmpzUEsBAh4DCgAAAAAAAAAAAFKEe3qmFwAAphcAACgAAAAAAAAAAAAAAKSBT+8IAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9yZW1vdGFibGUuanNQSwECHgMKAAAAAAAAAAAAxRgAzIYMAACGDAAAKwAAAAAAAAAAAAAApIE7BwkAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3NhZmUtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAACYl18ssgcAALIHAAAlAAAAAAAAAAAAAACkgQoUCQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvc3RyaW5nLmpzUEsBAh4DCgAAAAAAAAAAAGY/WZX8CQAA/AkAACUAAAAAAAAAAAAAAKSB/xsJAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zeW1ib2wuanNQSwECHgMKAAAAAAAAAAAAYNVjnhQHAAAUBwAAJQAAAAAAAAAAAAAApIE+JgkAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3RhZ2dlZC5qc1BLAQIeAwoAAAAAAAAAAAAOvwkt/ggAAP4IAAApAAAAAAAAAAAAAACkgZUtCQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAkAAAAAAAAAAAAAACkgdo2CQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAxYdX6bcOAAC3DgAAHgAAAAAAAAAAAAAApIFmOAkAQGVuZG8vcGF0dGVybnMtdjEuNC43L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAFulOQw5MgAAOTIAACoAAAAAAAAAAAAAAKSBWUcJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jaGVja0tleS5qc1BLAQIeAwoAAAAAAAAAAACEP4sHExUAABMVAAAtAAAAAAAAAAAAAACkgdp5CQBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29tcGFyZUtleXMuanNQSwECHgMKAAAAAAAAAAAATJtmFscNAADHDQAAKQAAAAAAAAAAAAAApIE4jwkAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NvcHlCYWcuanNQSwECHgMKAAAAAAAAAAAAKZ5nbM4LAADOCwAAKQAAAAAAAAAAAAAApIFGnQkAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NvcHlTZXQuanNQSwECHgMKAAAAAAAAAAAATZEiJ+ASAADgEgAAOQAAAAAAAAAAAAAApIFbqQkAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzUEsBAh4DCgAAAAAAAAAAAFs61ctSFgAAUhYAADUAAAAAAAAAAAAAAKSBkrwJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzUEsBAh4DCgAAAAAAAAAAAH1gizOLHAAAixwAADUAAAAAAAAAAAAAAKSBN9MJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzUEsBAh4DCgAAAAAAAAAAAKRDJyjtGAAA7RgAADYAAAAAAAAAAAAAAKSBFfAJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc1BLAQIeAwoAAAAAAAAAAAAdOAyUyK0AAMitAAA1AAAAAAAAAAAAAACkgVYJCgBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAiAAAAAAAAAAAAAACkgXG3CgBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAANIBosRCBgAAQgYAACQAAAAAAAAAAAAAAKSB+7gKAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACzXVtGVQIAAFUCAAAtAAAAAAAAAAAAAACkgX+/CgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEvc3JjL2lzLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAA+mbwkZwHAACcBwAALAAAAAAAAAAAAAAApIEfwgoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xL3NyYy9tZW1vLXJhY2UuanNQSwECHgMKAAAAAAAAAAAAnG3EsnwFAAB8BQAANwAAAAAAAAAAAAAApIEFygoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAoAAAAAAAAAAAAAACkgdbPCgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAANIBosRCBgAAQgYAACUAAAAAAAAAAAAAAKSBZtEKAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAs11bRlUCAABVAgAALgAAAAAAAAAAAAAApIHr1woAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xMy9zcmMvaXMtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAAD6ZvCRnAcAAJwHAAAtAAAAAAAAAAAAAACkgYzaCgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzL3NyYy9tZW1vLXJhY2UuanNQSwECHgMKAAAAAAAAAAAAnG3EsnwFAAB8BQAAOAAAAAAAAAAAAAAApIFz4goAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xMy9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKQAAAAAAAAAAAAAApIFF6AoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xMy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAA0gGixEIGAABCBgAAJQAAAAAAAAAAAAAApIHW6QoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xNC9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACzXVtGVQIAAFUCAAAuAAAAAAAAAAAAAACkgVvwCgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjE0L3NyYy9pcy1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAPpm8JGcBwAAnAcAAC0AAAAAAAAAAAAAAKSB/PIKAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQvc3JjL21lbW8tcmFjZS5qc1BLAQIeAwoAAAAAAAAAAACcbcSyfAUAAHwFAAA4AAAAAAAAAAAAAACkgeP6CgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjE0L3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAApAAAAAAAAAAAAAACkgbUACwBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjE0L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADSAaLEQgYAAEIGAAAkAAAAAAAAAAAAAACkgUYCCwBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjIvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAs11bRlUCAABVAgAALQAAAAAAAAAAAAAApIHKCAsAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4yL3NyYy9pcy1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAPpm8JGcBwAAnAcAACwAAAAAAAAAAAAAAKSBagsLAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMi9zcmMvbWVtby1yYWNlLmpzUEsBAh4DCgAAAAAAAAAAAJxtxLJ8BQAAfAUAADcAAAAAAAAAAAAAAKSBUBMLAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKAAAAAAAAAAAAAAApIEhGQsAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4yL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADSAaLEQgYAAEIGAAAkAAAAAAAAAAAAAACkgbEaCwBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjYvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAs11bRlUCAABVAgAALQAAAAAAAAAAAAAApIE1IQsAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW42L3NyYy9pcy1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAPpm8JGcBwAAnAcAACwAAAAAAAAAAAAAAKSB1SMLAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9zcmMvbWVtby1yYWNlLmpzUEsBAh4DCgAAAAAAAAAAAJxtxLJ8BQAAfAUAADcAAAAAAAAAAAAAAKSBuysLAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKAAAAAAAAAAAAAAApIGMMQsAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW42L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADSAaLEQgYAAEIGAAAkAAAAAAAAAAAAAACkgRwzCwBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAs11bRlUCAABVAgAALQAAAAAAAAAAAAAApIGgOQsAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW43L3NyYy9pcy1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAPpm8JGcBwAAnAcAACwAAAAAAAAAAAAAAKSBQDwLAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNy9zcmMvbWVtby1yYWNlLmpzUEsBAh4DCgAAAAAAAAAAAJxtxLJ8BQAAfAUAADcAAAAAAAAAAAAAAKSBJkQLAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNy9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKAAAAAAAAAAAAAAApIH3SQsAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW43L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADcaPdCkBEAAJARAAAcAAAAAAAAAAAAAACkgYdLCwBAZW5kby9zdHJlYW0tdjEuMi44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAGZXEQnDAQAAwwEAABwAAAAAAAAAAAAAAKSBUV0LAGplc3NpZS5qcy12MC4zLjQvc3JjL21haW4uanNQSwECHgMKAAAAAAAAAAAAkGHPA3MBAABzAQAAHwAAAAAAAAAAAAAApIFOXwsAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvRS5qc1BLAQIeAwoAAAAAAAAAAADg9bkfbwIAAG8CAAAsAAAAAAAAAAAAAACkgf5gCwBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qc1BLAQIeAwoAAAAAAAAAAAD/fh925gEAAOYBAAAiAAAAAAAAAAAAAACkgbdjCwBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9tYWluLmpzUEsBAh4DCgAAAAAAAAAAADcX0E7MBwAAzAcAACQAAAAAAAAAAAAAAKSB3WULAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21ha2Vycy5qc1BLAQIeAwoAAAAAAAAAAACKNuO+SQMAAEkDAAApAAAAAAAAAAAAAACkgettCwBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9hc3luYy10b29scy5qc1BLAQIeAwoAAAAAAAAAAAAGbyZCiAEAAIgBAAAiAAAAAAAAAAAAAACkgXtxCwBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9tYWluLmpzUEsBAh4DCgAAAAAAAAAAAEhYmth2CQAAdgkAACMAAAAAAAAAAAAAAKSBQ3MLAGtyZWFkLWNvbnRyYWN0LXYwLjEuMC9zcmMvZXJyb3JzLmpzUEsBAh4DCgAAAAAAAAAAAKaQpZDRFAAA0RQAACIAAAAAAAAAAAAAAKSB+nwLAGtyZWFkLWNvbnRyYWN0LXYwLjEuMC9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAxYx2ZcWjAADFowAAJQAAAAAAAAAAAAAApIELkgsAa3JlYWQtY29udHJhY3QtdjAuMS4wL3NyYy9rcmVhZEtpdC5qc1BLAQIeAwoAAAAAAAAAAAAR5t+EYwcAAGMHAAArAAAAAAAAAAAAAACkgRM2DABrcmVhZC1jb250cmFjdC12MC4xLjAvc3JjL21hcmtldC1tZXRyaWNzLmpzUEsBAh4DCgAAAAAAAAAAACOWboF+AgAAfgIAACEAAAAAAAAAAAAAAKSBvz0MAGtyZWFkLWNvbnRyYWN0LXYwLjEuMC9zcmMvdGV4dC5qc1BLAQIeAwoAAAAAAAAAAACtGo5xmyIAAJsiAAAoAAAAAAAAAAAAAACkgXxADABrcmVhZC1jb250cmFjdC12MC4xLjAvc3JjL3R5cGUtZ3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAALIb2HEZDAAAGQwAACIAAAAAAAAAAAAAAKSBXWMMAGtyZWFkLWNvbnRyYWN0LXYwLjEuMC9zcmMvdXRpbHMuanNQSwUGAAAAANUA1QA7UgAAtm8MAAAA", + "endoZipBase64Sha512": "1ed215fa6131b937ffe2a73a858e4f246a7e3f63844ef30bb8baf262f125a63ab3c526c021886060c3519060aecac65bdd3da4b6d0cc9cc4a80306a9623c7a91" +} \ No newline at end of file diff --git a/agoric/a3p-integration/proposals/k:kread/submission/b1-3d529cedd24548b7324ee87e1192fa58496932f8187d36545f7bf67d63d3105376492893ff93a8c573a3a641f9fe15f0a39ae07367982e4e6fc461de1f854b2c.json b/agoric/a3p-integration/proposals/k:kread/submission/b1-3d529cedd24548b7324ee87e1192fa58496932f8187d36545f7bf67d63d3105376492893ff93a8c573a3a641f9fe15f0a39ae07367982e4e6fc461de1f854b2c.json new file mode 100644 index 000000000..df28e1a8d --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/submission/b1-3d529cedd24548b7324ee87e1192fa58496932f8187d36545f7bf67d63d3105376492893ff93a8c573a3a641f9fe15f0a39ae07367982e4e6fc461de1f854b2c.json @@ -0,0 +1,5 @@ +{ + "moduleFormat": "endoZipBase64", + "endoZipBase64": "UEsDBAoAAAAAAAAAAADxgRsGP1MBAD9TAQAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAia3JlYWQtY29udHJhY3QtdjAuMS4wIiwKICAgICJtb2R1bGUiOiAiLi9zcmMvcHJvcG9zYWwvc3RhcnQta3JlYWQtcHJvcG9zYWwuanMiCiAgfSwKICAiY29tcGFydG1lbnRzIjogewogICAgIkBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9lcnRwIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3Vic2NyaWJlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZHVyYWJsZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hbW91bnRNYXRoLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hbW91bnRNYXRoLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzAyNzUxMTMwNzdhNTNiM2M2NWE4NmJlNzk0NzIxNWNmZWQ5YTBmNjUyMTY2OTVkODVkNTkxN2I2NTRkYmQyYTNhNTAwODA0YmY4YmY5YmNiYTM5NzIzZDhlNmQ3MDRkYzYwN2IzOTVlNGNjNTI4ZjY4NzczMDU0NjUxNGVmNGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyZGQwZWQwZmY3ZjEwYmE1NDdhNjE0MTEyNGRkMjlmYTcwMTNjZGZkODg0NjUyZDhkMzVjNGRmODk0OTk3NmIzNjljMzJiYzlkMGZiZjg3NzVkZjNhNWE1NmUwYWM1NjViMjk0OTg1ZDllOWRiYjJhODgwNWM1NDU1ZTBlOWU0MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNjZDQwMWQ1MmY3NGFkNTU0NmM2OWJlZjcxNzk1NzdmZmM3ODRhOTcwYTcwNDJhNmVkNWJhMDA3MzZlMzI4MTVhMWMwNDkyM2QxNmUyNGVkNDc4M2MxMWM4NmVmMTMxNTUwOTM3YWQ3YjUxMTQ4OTQ5MDAxZjA2MzJhMGIyNDk4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIzZTBjMjg3NDJhMjUxNTkwZDcxNGVlMzIwYmM3OGNhZjIyNTc1YTRmYzJiNzBkNzY1N2FjZjAzNjk1Yjk1MWQyYzVhMmJhNWFmYTVkODY4MjRlZmZkNmU1NTMwN2RiZTdjY2Q5ZDk0M2RmODAwN2NkOWQ2MWQyNTkzZTNkYTE1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJmMDBlMWI3YTg5NzNjZTNhMzNjMzUwNWE3OTU5ZjI4NTk2YWI0YmZjNTgwMjk5OTlkYWQ0Y2M2YjlkYWJkMjI4OGJmNjc0YzlmOTUxMDU2MGVkZjc1ZDY2NjY3Mjk0M2VlNGIzMjQyODFlY2M3NmQzY2U3MDJlOGI0OGZmODNlIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvaW50ZXJuYWwiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3Rvb2xzLyoiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvKiIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZS96b25lLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vem9uZS1oZWxwZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvZGVidWcuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2RlYnVnLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvbGVnYWN5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sZWdhY3kuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS1idW5kbGUtc291cmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmUtYnVuZGxlLXNvdXJjZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS1yZW1vdGluZy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcHJlLXJlbW90aW5nLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvcHJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC91bnNhZmUtZmFzdC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdW5zYWZlLWZhc3QuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3N0cmVhbSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9zdHJlYW0tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9zdHJlYW0vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJhbnlsb2dnZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiYW55bG9nZ2VyLXYwLjIxLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FueWxvZ2dlci5qcyIKICAgICAgICB9LAogICAgICAgICJqZXNzaWUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21haW4uanMiCiAgICAgICAgfSwKICAgICAgICAiamVzc2llLmpzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29uZmlnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb25maWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NWJiODY4YzI0NWU1MzdkYzUyMWZiNjI3ODBmMDRhOTY5MzJhZDVkYzhjY2EzZjQyMjE5MzNjMmZjNmJhZWZlMzlmNjUzNGU3OTUxZTg1ODM1ZjU2NjU3MTNiOTM2ZmQzNmUwNGIxZjZlOGUwODIyZGQzNWRhNmFlNmJlNzBmZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWJ1Zy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGVidWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiMjJiYWU1YzM2ZDgzOTMxYjNkZjdkZmZkOWNjYjBhMzNiMWYyMWE5NDVhYThiNWVjN2M3ZmRiMjI4ODEzZDBmODg1ODJmMmUyOWZhYTk2NTcxMDE5ODAxOGQ1ZTlhZmE5YzI5MzFlM2IyMmM3MTQxNmFkNDE2ODMyMDk3YTdiMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vycm9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImYzM2Q5NWZmOTNiZTdhYzRiYjdkZWYxZDczZTEwOWFmNTkxOWY0ZDJhZWI1YWYwOGZiMDRkNDBkNmM4NzdkZTgwYTI3ZDViYjFhNzIyY2Q3MTI5NmU0N2QyNjliY2FhYjgwNTRiZWVjZGZhZjFmYzcwZjU0ZjE1ZWFhZDg1ZTE1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJmZjExNWYyYzAyZjBiNTYzNjA0ZWQ2MTE3ZTc4N2M0ZTg3YzI2YWI2MGJjYjEzMzFiNjg3MGQzYTUwN2Q0YjlkMDcxYTZjMjM3MDk4ZGE5ZDhiZjU0OTk1NWE2MDAzNGZiZDhiMGIzNmUxMjA4NGQ5N2U3MmRlN2EwYTg2OTQ4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2pzLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9qcy11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImVjOTkwMzIzNGQzOGI0ZGM0ODNjZmU0ZmFiODA1MzAyZmUyNTQ4ZTJmZjhjNGRkODhmNjcyNTcyZmVkYjVkMGNjNTU4OTdmMmMzMDI2MWU2N2IyYmQ4OTM0MWMxM2MxOGFkNWE0MTI5ZjAxMDVmMTUxM2NhZGQ3MWM3MzJiMTk1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ldGhvZC10b29scy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWV0aG9kLXRvb2xzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODA0NDU2OWRjNzRhNjJlNDIwZGM4ZTM5MTdiNWZhZjFmN2FhMGRlZGVhMDYxNzM0OTM1MmJiYWE3ZTllMDVkZmE5MGY2ZmVkMDA1ODk2NmIxMjExMjFlZGE4MzVjNDE0MDVhYzE2MzA2ZGJmYjA2MjkyNTAzMjE5NDA5YWYwMDAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc2VzLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zZXMtdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmZDJmNjg3MjczZWM1OTE2NTc5MDYyMDU2YzY1YTM4NmYwYzk5Y2RjYTdhNTljYTIxMDgyYTcwMzVhNjQzMDBjY2ZjMDNhMTIzMzYyMmI1YTFhMzFmMzcxOGMwYThlNWFkNjA0YmM2MWFlODI1MTdjNzI5NzQ2YTRhMmNiYmMxNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlQ2hlY2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVDaGVjay5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjcxZTUyMDUwZmQ4OWZlNzgxNWVmZWM2MjhlYWFlYjIwMGI3ZjdjZGRhODRlZTdjZGJjNmYyMDNjMDNlZGVmMDYxNzFiZjJlYzY3YzIwODEyZjgzMjFhNGUyNTljZDk3ZWQ4NTM3N2NmNTY0NWU3MzExNDFjOWMyM2Y3ZWViNTdlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4NmZmN2NkNmI2ZGRhZmY1NzlhNWE2MWY4MjMxYzg0NWZlMzk0MDliMmQ4NGZmZjQ3MWZiYjdjNmZjMjE5ZWFjODhlYTJlNjViZGQ4Mjg5ZGQxZDhhZDg5YTg3Nzc5YjkyYWNiYmU2NzY1OTEyYjdlYzdmMjY5YzZiMzAyN2E2YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3N0b3JlIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWE4YTFlYjNjNWI3MTNmYTkwZDk2NTFiNDY3NzNhNDQwMWNkNTE5MzYxZWJkMGRhNDZlMjAxMWZhYTA3NDI4YTI0ZmJlYjI5NjRhYzgzMmI0MmQ4MmNkMmQ5NGRlZWI4MjFmNTc1Y2ExM2ZhMWFlZDVjZDNmMGQwMTU3MzZjZTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGVnYWN5L2xlZ2FjeU1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU4ODQ4NzMyYTI0OGJmM2Q4MjQxZDE5ZWFiOTQwNjZmZDI5MTEwYzVjYjM3YmJmOGE1YzE1YjZlNDRjN2NkOTEwMjVmMTNjOGJjMmRlOGE1NjYxZjhmMjlmMzRiMjE3YzZmMmJhNWIzYzE0OWU2ZGFiOGE0MWNmYWQ5NmE0YThkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRiMGQzM2MxZDVkMWNjZTc4MjZiMzc5NmZmZmNmYjBmOGU5OWM1MzgwMzNhODNjM2I0ODc3ZTA4YmQ5Nzk2YzJhNGMxZmZmYWRjMzI4Y2EwNGVkZTExNjRkNDZjYjI1ZDliYzcwODQ4ZWFkNzVhMjk4MmZjNWIzNDg2ZWI1NTQyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDhiODZiMWMyYWM1ZGI2MWY1NjBiYzE1ZmYwNWZjYzUzNTViOTk5ZGYxMjhkMWM4MzQzODM5MzViYmY2ODM3OGVlYmEzZDE3YWUyZDM4ZjU2MjAxNDEzNzgxNzg1ODFlNzhjOGIxNGIwZGNiMzdkMDNiZWY3MTE4NGFlMzRhYjAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhNjMxMjBjYzE3NmUyMGE0M2NmOWNkOTg1OWZmMmQyNGJhZTdkZDkyMWMxZTBlODJkYTBkYThlMjVhOTk4NjE2NjA0MGIwYmYyZjYwNWZiYTEzNmU4Zjc3MmM1MmUwMzlhZjgyZTU4YTIyODJjMWNmNmY3ZjM3M2RjMzUyNmE5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTBjZmViMDFlOGYyOWExZWNlYWEyNDEzZDQ3NmRlMzA5NTEzODliNDk3YjM0MmZkNjRjNjJjNWU5Zjc2MGUyOTFmYjY2ZDk3ZWEzYzJhZWFlMjlhNzZkNDA0NDE1MWFkODU0MTU5ODM4MjdmMWUxODllNWI0NmI1ODY1M2E4ODkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNjMTg4NjVkZWU0YjlmMWUxMDU0YWNkNmQxZTRlZmY2ZGMwMGM3N2QxZDBlNTFmZWI3ZjAzM2RmZDQzM2E0MDY2YzA0NjkxNjUwMWJkYjEyZTQ1YjEwY2IwNDIzNTJkYmFlOWQwZWE3ZTU1ZjliMmFjZmJmZjI1MGI1MzNmMjFjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjU4OWE2ODFjMjYzNjFmMWE1MzZiMzMzYWY2NDU0ODcwOTcwM2EyYzgwN2EyNTY2MjdhODhjOTU0YTMzNGYwMzg3YmMzNGIyMWExM2Y2NGI0ZWYwYzUwZjAyN2UwYzdkNzM5MzMzN2MwNTdjMDA3OWZmM2FmNjUxMWYxMWNmMGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2NvbW1vbi12MS4yLjgiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2NvbW1vbiIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImFwcGx5LWxhYmVsaW5nLWVycm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmJhNDdhODlkYmRlYWU0ZDBmY2I3Yzk0NGIyM2FlMTg5ZDU1MGJiMzZkNmFmNDZkMDM3YTA0NGY5NzgwMmFiZWViZjk0MzhkY2M5MTE0YTRmNmQxMjY5OGIwMmRkYTI4YzhjYzQxNzNkMDZhODZmMTZjMTc0OTE3N2RiODc1NGEiCiAgICAgICAgfSwKICAgICAgICAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImZyb20tdW5pcXVlLWVudHJpZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YTQwZmQwYzdiMjlkMmY0NjE3MTUxZTUwM2Y3MjBmZDU1NGI2NDFmMTgyYzFiM2NkNWRhNGY0ZTE3MTNlZjUyMTJiNTc2NThjZThjZjUzNmVhMDg0YjY0ZGExOTg5YTlkZmRhNTViMjQzOGIyYjZhMzA1MmFlYzFjMzM4ZWJmZCIKICAgICAgICB9LAogICAgICAgICIuL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaWRlbnQtY2hlY2tlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEwMDZhM2U0MjEyZDgxNzM3OWI0ZjE3MDIwNzljYWQyODQzNWQ0OTBkOGM1YWIzYmRhMDYwYzE1N2QxOGNhYzAxYzFlMzE0NWY5NDdjYzRjMjQzNjMwOWQwODk1OTAxMTlmOWJkNWE1ZDQyMTE3MjAwYmM4OTc0ZDhiMGYyZDM3IgogICAgICAgIH0sCiAgICAgICAgIi4vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImxpc3QtZGlmZmVyZW5jZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjYxMzYzMWZjNGZhZjhiYWE2NzRiYjQ4Mjg4ZTZhNDZiN2RhYWUyZmRlNzg3YzVmMWEwNTFmOTZkMTFmZDg5YWJkMjVjZDZlODkwMDU1MDEyMWY1NmZlMWY1MTBkMzJmYzllNDQ3MzhjOGZmNzgxY2JhNjdiYmQxYWNlNjUxYjA4IgogICAgICAgIH0sCiAgICAgICAgIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJtYWtlLWFycmF5LWl0ZXJhdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTg5OGM2MjYxNmI0Y2RiM2ZjODFlOTcxMjkwOGEzN2RkYjU3YmVmNmIxZDU4MjNlMDRjZjI4MWNhOTVlODYwNjA1MTAyM2U1NDVkZDZiZGRjMjk2ZmVkZWJlNGU2NjU5NGU5OTg2OTk4MDVlMjA5ZWU3ZGE0MWE5MWFmODE3YzgiCiAgICAgICAgfSwKICAgICAgICAiLi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm1ha2UtaXRlcmF0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiNDM2ZWM0YzY2NmMyYTU1Njc0NWM1ZmE1NGVjODY0OGEzZWNkMGYzMTIwMTA5NmExNTEwY2ExNDMzNDk5ODk2NmE2NDZjMWQwNjNiNjEwMTljY2Y2NDU1MWIzY2I1ZjEyOTBlMDZhNTkxNGQ4YTFkNWYwM2VjNmIxNzFhMzFkZiIKICAgICAgICB9LAogICAgICAgICIuL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAib2JqZWN0LW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmNDM3YjVmM2UzM2I3NzNkZTZjYmVkMTBlNTBhOWUwYjk0OGM3M2E2YWUxNjQ2NjQwMTQ5Y2M4ZjBmODE2OTU4NWFhZjI1N2QxMDI2NmZjMjZiZTVlMWRjMzk0ZjVhMzUxZWM2YTZhZjg1ZDNiOTkyMjg4MTk5ZGI4ZDE2NmU4IgogICAgICAgIH0sCiAgICAgICAgIi4vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm9iamVjdC1tZXRhLW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFhZjA0NTFiMmU2ZDBlZTQxMzA1ODkxZWY2Y2Y1YTllYzRhMDM0NWYxODQ4ZmU5YjJkOWM1MTIzMjQzNjY5YzU0YWM1MWM1Mzg4MjRjMzAxOTBkMjA3ZTQ4ZjUwYzA4NDU2M2Y5MzhkYTVlNjQxZmI3OWJjNDY1MGVkMGVjZjE3IgogICAgICAgIH0sCiAgICAgICAgIi4vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ0aHJvdy1sYWJlbGVkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2I1ZDM0MjZhMTRjMGY3NTYyNTA0ZmI3ODZhOWIwMjQwZGU0Y2I4NTI3OTRhMzhiMDYwMzMwMGE5OTBlNTEwMzlkNTM1ZTUzYWU2N2VjNzEwNWM5YTMyNTNkNDk2YWFmYzczMjA1NGI2YWMyNTUxNzYzYzkwZDc1M2Y1OWY2YmEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZW52LW9wdGlvbnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDE3NzZlZWIyMWIxYzU1MWRhM2Y5YjhkY2RmNWFiZDg4YmNiZjVmOGUzOGNiMDRlZGFiYzhjYjk2NGJiOTc1MThmZjRjYWNiNzQzZThhYmJhYWMyMjg2MTY4MTVmYmU0MGU4NmJlMmQ3ZDQyODE1Nzg5NTJmOGFhODY2YTFiOTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW52LW9wdGlvbnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vudi1vcHRpb25zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWRiMTVkNGI2NjkzMzI1ZDM0NTIzODBjYTYyZGQ5N2E3YWU0ZDAzM2JmNjc1M2FiZjQxNzViZjhmMmE0MDVkY2M5M2Q4NzdkZGRlYzEwYTdiZTViNGZjMzIzNjdkNzJlM2U3NjgwMGY3ZjQ4YzYwOGRhNDUzYzNkMmQxMTQ0ODUiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vycm9ycy12MS4yLjgiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vycm9ycyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uMTIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uMTIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Fzc2VydC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb21wYXJ0bWVudC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29uc29sZS1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29uc29sZS1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uMTIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93bi1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uMTIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MWY4ZjRmNTdmNGY2ZTJjOGI1ZDI5NjczNjdmZmU0ZDA3YzljYjE3NjFhN2M1Yzg4NDg2ZjRiMjdhNGUzZmU1N2QyOTg0YTU5MDgzY2Y1Mjk3MTkxOGZmOTllYmZhNmI4MmE4YzBkOWM1ZDM0ZWM1ZDk0OGIxNWM5OWQyZWIxMyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjlkM2U5MTA0YjZlMjViMDJhNzM0OTc5YWQ0ZjE5Nzg2YmE4NzE2OWU4MGY4YjBkOGE1MTE2NzgxZDkxNmNhMWNhYTBjY2FhZDllY2IzYTQ1YWYxMjAxNTYyZjAwNWVhOGEwYTJlMGFkMjYyMmMwN2E5NThlYzg3ZmU0NTgxMDliIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sb2NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbG9jYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhOTVkZjRjYTMyODIwOTY4ZjEyMDNhYjVlYTI3MmI5NjFhZTMxMTYzNDA3MGNmMTUyMGU4YWFhNjJjYThlYTIyMjk3MDQ0YWM0ZTg4OTI2NzRmYmI5MWEzNDNhNzY1MGRjYmFmNTNiN2M3NDUyMWFkNWU1NTZiOGYzM2EzM2E0ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjkxMTE0NmM4ZTA0NTIyNzAwZTIzYzkzOGU2YmE1NzBhYzdlYTFlOTE1ZDllN2M0ZGNiYzUzZmMwZjdhYjhhY2I4ZGQ3Y2ZjMDdjNTJlMDJmMmM2NTc0MDRlZTg5ZWY3MzExYTMyNzk0YTg3MTFhYTdhYjQzYTU0MjBiMzJjODgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm8tc2hpbS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm8tc2hpbS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5MjA1MWY2OTQ0MmRiMTNmOWUyYjZjMTlkZGQxODljNTFhYjIxYTg0MDQyMTAzMDFmOGQyNjFiM2IzMTk0OGJkNTBjYjZmODUyM2UwMzVjNGYzZGY3NjMxMTU4MjhmYzJlYWRjOWMyYjEyNzE3ZmEzOTM4ZmQ0ZjFkNzg0YjEwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYWNrLXR1cm5zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFjay10dXJucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgwY2JhNzU3OThiZGEzOTIwZDc1ZDY4NWRmMzgzYTZiYmEwNzE1ZTEzMjY0ODRjNjNhZjgxZWJkZTdlODRiMzg1ZjA3YTczNzdmYzUyZmMzYzgwZTgwMzFiYTdmOTFiNWJkMjVjODdjNDk5NDY5ZWExZDEzNzA3Nzc3OWFiMWU4IgogICAgICAgIH0sCiAgICAgICAgIi4vdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmZWEwNDExYjIxNmM3MTQxNTE0Mzk2NjY0ZjhmODIxM2FjZDExMmU5MzBjMGY0ZmFjMDM0MjdmNTczN2Q3MzdkMGU5NDZiNmNjNGM2MDg4NGQwNDA1N2I3N2Y4ODA4YTM5NjczNjg1OTU1ODg3MjQzNWVhZWVlZDJmMTMyNjQ3ZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXhvLXYxLjUuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXhvIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXhvLXYxLjUuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNDI5Yzg1YzJhZmY2NzY5OWQwNmQwN2RkMGE5NzFhYzIwZjc3MjYzNWU2OTY4YTZlYWMwYWFhM2QzN2M3N2Q4OTg2YWIzMjk3Zjk3YzY2MjEzNzQzZWNkMjUzOGZkMmM1ZTg2MTJmMTVlMmJmY2Q1ZDZlNTY1NjdhY2YzN2NiMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tbWFrZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leG8tbWFrZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWI3OTQxNTEyZWRlMDUxMjlmM2IyMGNkNTA4MDdkNWFhMTA1MzliMzA4OWRiNDBlNGJkZWRkZDY2NGI1NzlmN2Q2NDg5MDMyNTdmMGMxNWVkMDY2YmRhOTVlMzZmODkwODAzODJmNmY2YTkzMTFjYTZmMmVlMDg3M2QwNjhhN2EiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhvLXRvb2xzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leG8tdG9vbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0NTBjNjhiYWFlYjEwNjZhOGE1ZTMyMjYwZTQyY2ZhNTc1ZDQ5MzkwODA3NGFmY2EzNmViZjY4MmYxODBkZDAxZmY3YjllZDdhMmQwMGY3NzM0MDg0ZTA4NmZlNmRlMzRlZjdkMWJkZWU4YTAwYzVlZDU2MWI4YzM1ODQwZTYxMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9nZXQtaW50ZXJmYWNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTAwMzM3ODJkNTcwMjM5NjMzYTE5MTk0NzhiNzliNmQxNGZhZTUzOGMxMGU2OTM3ZmYwMmQyZjRhYzY2NGNhMGVjNjliYjIzNDkzMTA1ZDY0YzA4YzNhZjY5ZDBkZmE1YmQ1MWI3MDg1NGRjZWNjNmIwNjE1MTllNzNjZGJjMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Zhci12MS4xLjkiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2ZhciIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMDQzNTNjMWUyODJjN2YwOGE0OWQxNmFjMmVlYTA2OWExYzMyNTM0MDViZTYzZDg1NWE4MzliMDhiODBkOWJkM2MyNzQ0NWFlMWRhMmJjMzFiZjQ2MjEzZDViMmQ0MTQzOTExN2NmMWVjMGYxMWFmMDI0N2Q5NTVhNzYxNzc1NiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vbWFyc2hhbC12MS42LjIiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL21hcnNoYWwiLAogICAgICAibGFiZWwiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOTk3MWE0YmFmOTJiNTQ4ZTI0NzQ4ODBjMDdkYWJmMzYxZjJmZDAzOGM0MDBkYTUxZDBhNDQ2ODA5MmUzNjU1NTc2OTdjOGViMWNhZTMyNWNmZDlmYWY3MmFiODZjMTNmMDQyNDBhNmUxNDczYTdlMzkzODYyZGQwNDExYjU0ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlUGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3OWRkNjRkNmZlMmUyNTg0YTY5YTA2ZjM2Yjk5ZDZiZjgwMmQ0NjQ0M2M1NzU0NGY4ZTVmNDQwYTIwMjY0Y2IwZjhkNGM0MzYyYWYzYzU5NzYwM2YyNDdmZDEzMzRjZTkyYjlhOGEyMTBjOGM2MGMyMzlkYmJmM2I0MzJiYTY5MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEzMmI0OGM3YjBhN2M0YWYxZjA1OGM0NTAzMGNjNTFhMjE2MTE2MDc1YzI0ZTUwOGRhOWVjZWY2YmQ2ZDQxYzRkYjA4MGEyYTgzODMyMjg3ZmY2MjA4NzNlNjdmMzE4ZWNhNDIzMTU0MWQyMTBiOTRiNDQyMWM5ZTM0YTM5ODhjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRjYmRmOWFhZTMxNmJjM2UzNDA1ZWZkZjcwMDNjYWFlMTg3YTkzMjk4OTRkOTI5MmRhYzY2ZDU5OTBjYzVkZmI4MTEyZjQzM2E4N2RjM2QyZDFlYzAyNmRkODU2NjBkZGZhM2QxOWVkZTQ5YWViYmFhMjg0ZDFjMDA5ZWY4MWQ5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLWp1c3Rpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUwYjhjMWE5YzViNjZkN2RmMDYxODQ1YmI3MzhmZWFmMzBkZTc1NDgzZGRkODUzZDJiNTU3ZmFiZDgzMjc5ZDQwNGFjNDlmZjU1M2IyZTMzYTE5MDAxZjUwMTE2NDIzNTg3YTljNDJkMzYzZGQ1ZTlmYzE0NTMxMjI4ZWE5NDY5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNjMmJkMjQxZTIyOTNiYTIxYWU2YWIyYzRmZmUzNjA0NzFmZDViOTE1YTQ5NzZkYTQxZjE2OGY5ODAwMjQwMmZkNDdjZWVhODE4YjhkMGIzNGNiOGM1N2FhOTUwMjkyZjcyOTczYTEwYjQ3YzA4YjA0MTdhNGNjYjNmMDU4MmM3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZWVjNjU2ZDVkNGZkMjNjMjlhNTRiYTY4NWVmYmIwOTJkY2YyZjk0ZTBjYmNjODgxOGExMTI5Y2FjNjgxNmE5M2UxNTA0YzVhZWQwZmZjMzFlNjYyZWY0MDU0MjFiYTVjOWUxYjg0ZDhkNDMzMGMwNjgwM2FjMjJjNTAxYWQxMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yYW5rT3JkZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JhbmtPcmRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMwZDhmY2ZlNGMzN2JiNTdiYTYyMzBkYjY1MWY2ODM1YjZlZDQyOTI0MzYxYzI4NGE4ZmM1ZWRiYTI5YmQ3MWY5MDMwZDFlNWNlMDZmMWIzYWNkNWU0Yzc4NzkyNzkwOTg5OGRkZjY5MmEzYTYxNDBkZmFlOTRiZDMyZmJiY2Q3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9uYXQtdjUuMC4xMyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vbmF0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL25hdC12NS4wLjEzIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL25hdC12NS4wLjEzIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMjBhOTQ3ZjEyZmRkNTI2NjEwMmNmNmUyMDAzODNhNDI4OTdlOWRiMzk5YTI3MmI2Y2NkYzA1MDIzMjM1NjNlMjk5YzlkNjNmZmViZDcwNTFlMWNjNjg4ZWZhNWY5MWQ2OGU0M2U2NGM1YzkzMWYwYjdhNTQ4NTVlNDNhMDQ2ZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Bhc3Mtc3R5bGUiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGZhc3QtY2hlY2svYXZhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBmYXN0LWNoZWNrL2F2YS12MS4yLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpYi9lc20vYXZhLWZhc3QtY2hlY2suanMiCiAgICAgICAgfSwKICAgICAgICAiQGZhc3QtY2hlY2svYXZhL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZmFzdC1jaGVjay9hdmEtdjEuMi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY5OTMyZDU0ZjViNDFhYzdiMjQxYjA0NDdkZWJiNWY3OTM1OWE0Y2FjNTJkN2NiNjg0NTU0ZDI1MTUxOTliOTlhNDVmMDFmZWM5MmFjYTQ3YWE1YjcxNTllNGVkYjk0YWM3Y2M0YjFiYTg2MTViMjM5NDQyODgxZWQ4OTBmZTE1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvcHlBcnJheS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29weUFycmF5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2YwN2FiOWQxNzNjNTAzODM4ZWM1YWM5MzA2MWI5N2JjMWUwMjc5YzZiZTNjNGQ3YmE0NmMxZTlhY2Y0MWMwYzk4MDBkYWRiOWEyNWJiOWU3OWJhNzIyYTBkNDM0NGJjY2ZiOTBiMjBlYjY3ZjFjZjkwODU4ODRmMmM3MmZiYWEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29weVJlY29yZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29weVJlY29yZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImYxYzQ5Y2M2ZDU3N2FhYjJiZWE3OGQ0NDNjZThkZTcxMzhhNDhhZGQwMThhMjIxNTY0ZmExNDQ0YjE1ZWFhNjliNjIyMTYxMTgwODVlZTI2NTU1MmVlNDhjNmVkZjZlYTU5YTAwMzhlODM3NWU1NDE0OTgyZTIxMmE4OTFmZTI4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODNjMGJjMGJlYzE5NGZkOTExYjQ5Yzg3OTM5OTg4NmRmNmQ2NmRiNzlmNzUwZDI0M2Q2NjVkOWJhZmExY2NjNDQ3MmY4NDMzODY0MWIwZTE4NGNhYzM5YzU3N2RmYTExNWU4YjNkYmJmNjkyN2Y5Yjc3YjBkNzI4Mzc0YzcwNmYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXJyb3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vycm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmVjZDBlM2RlYTY0YTkxOTJjNTc4ZDA3OGJhZmRhNjhkMTVmM2JmOGM1ZjdmNzJkZWE1M2JmNjA0MmVkZTI2NjJhMWEzMGU1ZDVkYTRmMTYyNzY0ZTQxMTExZGIwNmRhOWI0YjI1YzQzYTkxNzlkYTI2MTJhYjA2ZDhhNWU4M2YiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXRlci1oZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pdGVyLWhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYThkN2NlMDUxYmVjODc1NjRlN2M0ZjZhZDEyMDM2MjY5ODJmNDFhMzIzOGE1MTAyNWZhYTUzMTAxZDYyN2E1MzAwY2JiNDA2NjFiMzhlOGRiMTIwMDAzMjJkN2FkZjk1OTJjZjBhNWJhN2NkNjMxNjljMjE3YjQwYmM0OGMzMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWtlLWZhci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZS1mYXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZWRhYjU5NjhiNjkxYTI5YTJmZDg1NGNhMzMxYmQ0NzVlMGY0N2Y1NTRiZjFmOWRkNjdjYzE3Y2YyN2ExMmM5ZDc2NTQ2YWQ2ZmI2ZTI5ZWI5OTYxNWY0NGNiNWYwMTU1MTQyODZhOWFiMjNmNDQ4YmJjNDViMDg0MWMxZGFmOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWtlVGFnZ2VkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlVGFnZ2VkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTAxZjgyZjliNDA2NDNmNTlhZGMyMDJkYTcxYTAxYTU3YWY2MDQ0ZmE1ZGU5ZjliZjg5M2I5MzI3OWNhMWExNWNiYTEwYmZkNTZjMGFkOTMwMDYzN2FlMmQ2MmQwOGViODNiYTcwNjNiYTgwNWRmZDFiZWFmMTI0YmMyZmVhMjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2U1NTYwNDdlZjAzMWRiNDM2Yzg0ZmEzMjhiMzczZmI0OGJhOWU0NjZlYzI0MmQ0MGYxZmYyZmZiMmU2ZmUwZDI5MGNiY2NkMDkwNWQxZjI4MTA5NmRkZDUzN2I4MGNmYWQwMTY3Y2EyNjE5NTM1OTk3YTIzMjg4YjM2ODhjYzIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFzc1N0eWxlT2YuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Bhc3NTdHlsZU9mLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQyYTllZmJiMjg1NmU2ZmZjMGYzODljODVkZmRkYTg0ZTYxMWMzYmY0N2JhNDc4MGYyMDc4MWI5NjM3YjYwMjIxYmUxNDgwMzhhODA5ZjJkNmZiNzZlMmRlNjQ2OWZkYWU2M2MwMDUyNTZiYTU0ZTQ5NmU3NGZiZWQ1Mzk3YWUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmVtb3RhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yZW1vdGFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjOTEwMDkzODc0NzVjYjk3MzdiYzhhZDUwZjk4YTQ4OGM4YTUxMTEwMzMyNmI1M2I0Mjk0OTE3YWQ2ODY4ODNhMGE0YmFkNmRiMDZhOTRjMDUwNmJlZjE0YWNiYWRmMzA4NTI4YjkxZGEyNGIyYTUwZTk1ODFhM2VjYTkyMDc1NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zYWZlLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3NhZmUtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFkNmNiZmIzYzNmOWUxOGEwMDU2ODdjNTk3ZjFlZmI3Nzk1ZGIzYWMzNjk3NDQ3Y2FhMmIyODI0Y2MxYmFiMTRjYjFiOGExYTcwNmFkYTEyOWQ3OThiMGE5MmQwOWE5MTNmMDgzYmZjN2I2MzY3NmU3MTM4ZjVmYmZlOWMwYzg1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0cmluZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RyaW5nLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzliMjEwMTcxZGZmMjk2ZjM4YjQ1NzcwNmFiMDIxZWFiYjc1NjBlMjU4ZDkzZmZmNjhiNTZlOTZjNmMyYTZjMmM5ZDk3MTZiOTY2MGVhOThjZWQ5ZmY0YWI2ZGYwMmFhMDFiOGY4MTg2YjcwNmU1ZjcwYmEyN2RmZTk1ZWQ4OWQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3ltYm9sLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zeW1ib2wuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2ODVjNGVhY2E3OWU4MWNlNzMwYzVjY2FjNDEyMGY5MmJmNDhiMzE3ZjM0ZDgzNWFkMjEzOWVjNzExMTU1OTNjZTRlOWY5YWM2OGQ3N2I5ZGQ2YjZiMzk3NWJmMTY2YmY0MWRlMzgyNGVlY2ZlNWJiMTY5ZTU3MWIzM2JhZmVjMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90YWdnZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RhZ2dlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNkZDBjZTkyZWU4YjVlNmQwMDk3YTU3ODgyNDJhODc5ZTcyNmM2N2M1NGZmYjBlM2JhNGVhZTM5OTY0MWRjNGQxYWM1ZTU2MTlmNWY1NjZlNmEzZWRkODQ2Y2Y4NzNiNWMxYzU5Nzg1YjI1MWZkMjA0ZTkwODliMTdhYzAxNDk2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzMjlmYzE1NDA1Mzc3MTVkZjg1NGEzOGE1ZTQ1YWU2ZDIyODZlOWZiMTUxYzUyODU2YzliOWRmYzFlMjJjZDYzMDllZDMyMjIzMGU2ZmVjYzZhMjQ4YTZiMzQ1MGEzZmYxNjRhNjc0ZWVmZjgyOGM5MTVlYzQ4MjAzYmRjNjY0NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcGF0dGVybnMtdjEuNC43IjogewogICAgICAibmFtZSI6ICJAZW5kby9wYXR0ZXJucyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTY5ZWNhOTkyYWUyY2YwOWQ0NmVhZTdlZWEwMDdlOTViYjRjNjRhYWEzN2JhNWU0NjYyNTg2YjlmZGZjZjA5NDQ4ZjlmMWQ1ZGI5ZjQxNjdlMGE3Yjc5NmZlOTIwYTVmZDBhOThkMGM1NDY0OWUyMTc2MzAzZGFmN2VhNDQ5OGYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jaGVja0tleS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk5NzJmYTAwNGJiY2RlYzMzZDJiMWUzYjdkOTE4MDQwZjVmODJhNDhmZjdlMGNjM2EyNGM2MDY2MjI2ZDYxMTFlY2M3NDk0NjRjOGRlZDVhODU4Zjg1ZDlkNjg5NGQ2NzkxZjFiMjU3N2NlODU0NmE1OWQ5NmQ1MjM3YjQyOTI2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29tcGFyZUtleXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzMWQ4NTQ4YjM5MGNjMjY2MTc1Y2M5ZmU2Nzk1ODYxYTQyMzdhOWQ5NDJhM2Q4OWNmZjYyNTk0NjIzMDQ0OTM0MGU0NmM1NzVlMzZhNzNmNmJhMzg1NWUwYmZlNTkyZTJhNWRmYjY3NTJhYzAwZTY3ZTEzYWM1ZDA0MDM4MWI4MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NvcHlCYWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29weUJhZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI1NTk0ODU4ZGU4M2QzNTdjNWNlOGRiMGNlZWQ2ZjFmZWJiZjM1YWRmMGFmNzFjYjY3MGE0OGRmMTQzODk3ZGJiOWNkOWFlYzZmZjdiMWJjNjNlNmQzZTJkNzMyMDE3YTgwODhkOWZkYjRkNzU2ZmIyMGRhOTY5ZDhlNDJlNDc0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29weVNldC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb3B5U2V0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGJiMTNiYTA2YWM4NmNhZTUxOGJjYmI0YmZiNzU2ODk4MDEwYzdmYmYwODE4MGU1NGQ2YjFkZDU0NDc1NjdjODgzZDRlODBmODU1ZjgxNjNiYjk2M2RmOTc5M2MzNDVlOWMzZmYyYjM0YWMwM2M0M2JlMmUyZDU2MGMyYzkzNDYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRkOGZkYzcwMDM0NDU4ODdlZGI3ZGEyMzE3ODc3ZTdkZjUzYzYzYmZjODg0ZmQ1Y2RiNTg3YmI2NmU4N2M3ODBkZjM3ZmRlYmQzMjNkNmViYzBjZDYxMzg2YzkyNTUyNTE5ZDRlZGE5NzBlMmY4YzUwMmExYjdkZWZiYmIzMGY0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjFiM2EyZjQ0OGY5MGYyMzgyOWI0NmM5NzNjYjZjNjk2YTlmZTJjMjM0ZDZmMmUwYmZjY2VlMWU3YzhlNTI3YzQ4NTFmOGJkNWJhODdlMDBlZWVhYWY5Y2M0MjczYWVkZjZmYTM3MTVkZDI3NjQwN2U3MmI4YzYxMzQwNmYwNTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYjg1YjgxMGUzM2EyY2NiOTUzYTAxZmNlYWYwMDM2YjY5MTQxYTFiZTlkODMyOGVlYjU5MGM5NzA5NmRhNmMzZjE1NzQ1YmIwMzc4MzkxZGUyZjc5MDA4NWMwZWE2Y2Y1ODBhZDlkMGQwOTRhMDI0NDI0YjgyZmI4ZmNhNjI4NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjFiOWU4NTdjZWU4ODRhYjA4YjhmOThmOGMyZmQwZWM2MjAxOTJjMmYyMTQwZTcxYTJjOWMyYTRkYmFhZGQ3OGZkZWY3OWE2OTVkN2Y5NjJjZjkxOWJkNjA5MTE1NGJkNWNjYjNiYzQ1ZGIyMzRlZTkwNTU5MGYyMzFjZDU5ZmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNWMwNzViNzRlNzRkNWJiMDg4ODg5MWUzYzNkMjFmNGI2MzI5NTE2ZjQ1YTNjYzU4YWI0N2MxNDQ0ZmQ4MTY4Mjg1MmNiYTliOTEyZThkMTlhZTZjYTEzOGQ5OWUwNDJhZjc5OGVhNDY4OTk4NTM3NDA2ZTIxNjRlNjAzZWMxMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW42IjogewogICAgICAibmFtZSI6ICJAZW5kby9wcm9taXNlLWtpdCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW42IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2Fzc2VydC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hc3NlcnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29tcGFydG1lbnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29uc29sZS1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb25zb2xlLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24tc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAic2VzL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODM3NjUwNWY2OGJkYzNjYjk0ZTY1NzY0ZTJmZTMyZWNlOTAyNmExMzc3ZTcwNDFlZWFkYzc1MDE4MGE5N2U5ODJmN2M0YWI4ZjczMTg4ODQ4NDJkZDIyNTg1MjlkYjQyNTQ0ZjU4YmQwOTkwOTM5NDhiMGM1YzM0MGI4NmVlOWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdjNjJiNTgwNWM0MjU1NzZiZDExYmEzODcxMDZlNzJhZDY5NWE3NDIyM2Y1OGQ2Zjg5MWNiZjE4YTY2Y2U0MjY4MTFiMTJmMzhkYjEzODQ4NzcwYzkyZmU5YTgzNDczYjQyZjE3MGRmNDZjYjg2ZDI1NDg4YjdmNWZkMWQ5ZWE0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lbW8tcmFjZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWVtby1yYWNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDYyMjVmMWI1M2RmMWIyOGIzOWUzNzcyN2JhMGRmNDkxNThjMTI3MmJmYzExNTFlM2VkOTc4ZGU1ZTgwYmI1MzU4MGY5MDVhMzcyNTg2MjJiYWMzZmM4ZjgzZTA5MDQxZWJmNzQxZDgwNTZhZmZiNjFkMmI2MWQyZGI0YzNlYjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2E4YzUyMzQ3NWVlMDVkZTI4MDFiZDM2ZDk3NjdkNjgyNWFhNjBkZGEwNGQ0N2U0NDA0OWVjNGY0OTA4NjM2MWEzOWUzZmIxOThmYWM4NDhjMzU2MGZmNWY1NWM3NzM1MjI1NTM1ZWNhNTYzZWVhMjc2NzViMThhNGY5NDc2ZjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTMiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uMTciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uMTciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Fzc2VydC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb21wYXJ0bWVudC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29uc29sZS1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29uc29sZS1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uMTciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93bi1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uMTciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4Mzc2NTA1ZjY4YmRjM2NiOTRlNjU3NjRlMmZlMzJlY2U5MDI2YTEzNzdlNzA0MWVlYWRjNzUwMTgwYTk3ZTk4MmY3YzRhYjhmNzMxODg4NDg0MmRkMjI1ODUyOWRiNDI1NDRmNThiZDA5OTA5Mzk0OGIwYzVjMzQwYjg2ZWU5ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pcy1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2M2MmI1ODA1YzQyNTU3NmJkMTFiYTM4NzEwNmU3MmFkNjk1YTc0MjIzZjU4ZDZmODkxY2JmMThhNjZjZTQyNjgxMWIxMmYzOGRiMTM4NDg3NzBjOTJmZTlhODM0NzNiNDJmMTcwZGY0NmNiODZkMjU0ODhiN2Y1ZmQxZDllYTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWVtby1yYWNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZW1vLXJhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0NjIyNWYxYjUzZGYxYjI4YjM5ZTM3NzI3YmEwZGY0OTE1OGMxMjcyYmZjMTE1MWUzZWQ5NzhkZTVlODBiYjUzNTgwZjkwNWEzNzI1ODYyMmJhYzNmYzhmODNlMDkwNDFlYmY3NDFkODA1NmFmZmI2MWQyYjYxZDJkYjRjM2ViOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YThjNTIzNDc1ZWUwNWRlMjgwMWJkMzZkOTc2N2Q2ODI1YWE2MGRkYTA0ZDQ3ZTQ0MDQ5ZWM0ZjQ5MDg2MzYxYTM5ZTNmYjE5OGZhYzg0OGMzNTYwZmY1ZjU1Yzc3MzUyMjU1MzVlY2E1NjNlZWEyNzY3NWIxOGE0Zjk0NzZmMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xNCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcHJvbWlzZS1raXQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2Fzc2VydC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjEwLjAtbjE4IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb21wYXJ0bWVudC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb25zb2xlLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjEwLjAtbjE4IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb25zb2xlLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjEwLjAtbjE4IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sb2NrZG93bi1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjEwLjAtbjE4IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAic2VzL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS4xMC4wLW4xOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzNzY1MDVmNjhiZGMzY2I5NGU2NTc2NGUyZmUzMmVjZTkwMjZhMTM3N2U3MDQxZWVhZGM3NTAxODBhOTdlOTgyZjdjNGFiOGY3MzE4ODg0ODQyZGQyMjU4NTI5ZGI0MjU0NGY1OGJkMDk5MDkzOTQ4YjBjNWMzNDBiODZlZTlmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YzYyYjU4MDVjNDI1NTc2YmQxMWJhMzg3MTA2ZTcyYWQ2OTVhNzQyMjNmNThkNmY4OTFjYmYxOGE2NmNlNDI2ODExYjEyZjM4ZGIxMzg0ODc3MGM5MmZlOWE4MzQ3M2I0MmYxNzBkZjQ2Y2I4NmQyNTQ4OGI3ZjVmZDFkOWVhNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZW1vLXJhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lbW8tcmFjZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ2MjI1ZjFiNTNkZjFiMjhiMzllMzc3MjdiYTBkZjQ5MTU4YzEyNzJiZmMxMTUxZTNlZDk3OGRlNWU4MGJiNTM1ODBmOTA1YTM3MjU4NjIyYmFjM2ZjOGY4M2UwOTA0MWViZjc0MWQ4MDU2YWZmYjYxZDJiNjFkMmRiNGMzZWI5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdhOGM1MjM0NzVlZTA1ZGUyODAxYmQzNmQ5NzY3ZDY4MjVhYTYwZGRhMDRkNDdlNDQwNDllYzRmNDkwODYzNjFhMzllM2ZiMTk4ZmFjODQ4YzM1NjBmZjVmNTVjNzczNTIyNTUzNWVjYTU2M2VlYTI3Njc1YjE4YTRmOTQ3NmYxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9zdHJlYW0tdjEuMi44IjogewogICAgICAibmFtZSI6ICJAZW5kby9zdHJlYW0iLAogICAgICAibGFiZWwiOiAiQGVuZG8vc3RyZWFtLXYxLjIuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9zdHJlYW0tdjEuMi44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3N0cmVhbSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9zdHJlYW0tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9zdHJlYW0vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjEwLjAtbjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjEwLjAtbjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbXBhcnRtZW50LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbnNvbGUtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29uc29sZS1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjEwLjAtbjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xvY2tkb3duLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuMTAuMC1uOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJkZGZhM2FlZmFkOTQ2YTJlMWE0ZTNhZGQ3Y2UxOGQxYzNlYzEzZmRjZjFkNWI3NGMxYzlmZGIzYTVkNWY4NmVhMDVmYmExYTQ3NGQ5MDBlN2VmOGEyYWZiNTM3YmU4ZmRjM2M4YmM0MjU0ZjA2MDdjYjQxNmYyZmQ1OTRmYzY5IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJqZXNzaWUuanMtdjAuMy40IjogewogICAgICAibmFtZSI6ICJqZXNzaWUuanMiLAogICAgICAibGFiZWwiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJsb2NhdGlvbiI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiamVzc2llLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgImplc3NpZS5qcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMjdkN2RkNjIzZWZmYWRkZWUwN2Q1ZGEwNmIyMDE4ZTY2Y2YyOGFkMDk0NDRmMWZhNzJkYzFlMGU2OTJlM2JiMzRkOTdiODA1ZjM3NDYwNDlkZWM3ODUxYWJiYmVmMWI4NWIyZmYxMDBmMTY4ZWRlNDBmNDFmMTdhOTM3NGQ2NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTg5MjZhZmRiNTljNWU1YTA4NjNkNDcxMzI0OTNlYThiZTYzOTIxMzEwZWU2N2RhNmZmNDc5ZDU2M2M5NTUyZGQ5YTIyNDI1NWE4MTg3NjRmMjc4MTJiOGNiMzQ0N2ExZmM5Y2RiY2U3Yzc3MTE4YmYwMGI3MmQ5MzM2MzIzZjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDZjZWIxOTgzZmU0ZDEyYWM2MjdkOWYxYmQwNTY1MGRiYWNmMTQ0YjdmMzlmNjFlMGNhNzQyM2Y5OGNmOWIwNjE2NWRmY2Q4OGY2MTdhZjg2NmEwZDE1NzA3MGE5NzRlOGY5MmNlMWM1MDEwOWQwMDc3NDg4ZjQyOGMyZTA3OWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk2ZmVlMTZkYWIzOGEyMWYwYjVjOGEwYjFmMTBjM2I3M2EzMTU3ZjZlOWY1ODkzODA5NmI0Yjg3OWIyYTA5OTNmZDdjOWRkZDdiMzkzMGU4MDI2MGUxYTg3YWIxYTRhYzY3NjFjYjc1Nzk4NThmZTM5ZTAxMDlkYzVhMTYwNTNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL21ha2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFrZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDlhOGUzMzg0MGY1MGE3ZGEyMzJjODgzNmM2ZmJhMjRiM2Y3NTBlZjJiMzMxZGFiMTY1YWZlZDYwNTA4YmY3M2E3ODE4ZTI3OThjMmVlZGIzZDA0ZjNkNjcxN2Y5NDNmYjkzMDg4NmZlNjRlOGE3ODMwNDg2NTk2NzRhOTQyYTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGZmMzE4OTU5NjFmMmM5ZmRmMzE0NDVkZDY4OGYzZGNmN2ZmNTE1MDcyZjgyMjliZTQ1NTE4NTY4NDIyMjJmNzFjNjVjODUzMzFhYmJkYWQ5ZTNkNTU1ZDkxZDVmOWZiNmZmMTgxNmI5MmM2Y2YwOTdjYzlmMmM4Y2NjY2JkYTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzEvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhlZDM5YzQ1ZDk3YzBmZDJhMTQxYmRhMWNjNTQ4NDQ5NGNmNTlmNjYwYjQ3OGM0ZDM5YTNmNzJiZTBkMzRhZTAwMDkyM2U3ODNmNjBlY2IxZTcxMzI5YTMwZGU3MzE1MDQ4OTVhNmQ0Y2YwMjJlNmUxYzcyNmNlOWQ5ZGQ2ZDNkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJrcmVhZC1jb250cmFjdC12MC4xLjAiOiB7CiAgICAgICJuYW1lIjogImtyZWFkLWNvbnRyYWN0IiwKICAgICAgImxhYmVsIjogImtyZWFkLWNvbnRyYWN0LXYwLjEuMCIsCiAgICAgICJsb2NhdGlvbiI6ICJrcmVhZC1jb250cmFjdC12MC4xLjAiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9hc3NlcnQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9hc3NlcnQtdjAuNi4xLWRldi0wNzA1ZjJjLjArMDcwNWYyYyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2Fzc2VydC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Fnb3JpYy8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMS1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL2JhbmsvdjFiZXRhMS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL2JhbmsvdjFiZXRhMS9xdWVyeS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvYmFuay92MWJldGExL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMS1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvYmFuay92MWJldGExL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9kaXN0cmlidXRpb24vdjFiZXRhMS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL2Rpc3RyaWJ1dGlvbi92MWJldGExL3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9kaXN0cmlidXRpb24vdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL2Rpc3RyaWJ1dGlvbi92MWJldGExL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9zdGFraW5nL3YxYmV0YTEvcXVlcnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9zdGFraW5nL3YxYmV0YTEvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL3N0YWtpbmcvdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL3N0YWtpbmcvdjFiZXRhMS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvdHgvdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL3R4L3YxYmV0YTEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vZ29vZ2xlLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2dvb2dsZS8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2dvb2dsZS9wcm90b2J1Zi9hbnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2dvb2dsZS9wcm90b2J1Zi9hbnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy9hcHBsaWNhdGlvbnMvaW50ZXJjaGFpbl9hY2NvdW50cy92MS9wYWNrZXQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9hcHBsaWNhdGlvbnMvaW50ZXJjaGFpbl9hY2NvdW50cy92MS9wYWNrZXQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjL2FwcGxpY2F0aW9ucy90cmFuc2Zlci92MS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjL2FwcGxpY2F0aW9ucy90cmFuc2Zlci92MS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvY29yZS9jaGFubmVsL3YxL2NoYW5uZWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9jb3JlL2NoYW5uZWwvdjEvY2hhbm5lbC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvY29yZS9jb25uZWN0aW9uL3YxL2Nvbm5lY3Rpb24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9jb3JlL2Nvbm5lY3Rpb24vdjEvY29ubmVjdGlvbi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pY3EvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWNxL3YxLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWNxL3YxL3BhY2tldC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWNxL3YxL3BhY2tldC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3N3aW5nc2V0L21zZ3MuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy9zd2luZ3NldC9tc2dzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3N3aW5nc2V0L3F1ZXJ5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMS1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvc3dpbmdzZXQvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vc3dpbmdzZXQvc3dpbmdzZXQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy9zd2luZ3NldC9zd2luZ3NldC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by90ZW5kZXJtaW50LyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL3RlbmRlcm1pbnQvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by90ZW5kZXJtaW50L2FiY2kvdHlwZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4xLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL3RlbmRlcm1pbnQvYWJjaS90eXBlcy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by92c3RvcmFnZS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjEtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljL3ZzdG9yYWdlL3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvZGVwbG95LXNjcmlwdC1zdXBwb3J0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZGVwbG95LXNjcmlwdC1zdXBwb3J0LXYwLjEwLjQtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaGVscGVycy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9lcnRwL3NyYy9hbW91bnRNYXRoLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2Ftb3VudE1hdGguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9nb3Zlcm5hbmNlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL2V4cG9ydGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy90ZXN0U3VwcG9ydHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3RpbWUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy90aW1lLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXRzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0cy12MC4xNS4yLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b2UiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy96b2VTZXJ2aWNlL3pvZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZHVyYWJsZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAY29zbWpzL2NyeXB0byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAY29zbWpzL2NyeXB0by12MC4zMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9idWlsZC9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAY29zbWpzL2VuY29kaW5nIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBjb3NtanMvZW5jb2RpbmctdjAuMzIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYnVpbGQvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGNvc21qcy9tYXRoIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBjb3NtanMvbWF0aC12MC4zMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9idWlsZC9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAY29zbWpzL3Byb3RvLXNpZ25pbmciOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGNvc21qcy9wcm90by1zaWduaW5nLXYwLjMyLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2J1aWxkL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBjb3NtanMvc3RhcmdhdGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGNvc21qcy9zdGFyZ2F0ZS12MC4zMS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9idWlsZC9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9idW5kbGUtc291cmNlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2J1bmRsZS1zb3VyY2UtdjMuNS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYnVuZGxlLXNvdXJjZS9jYWNoZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9idW5kbGUtc291cmNlLXYzLjUuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY2FjaGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYnVuZGxlLXNvdXJjZS9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9idW5kbGUtc291cmNlLXYzLjUuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYnVuZGxlLXNvdXJjZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYnVuZGxlLXNvdXJjZS12My41LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvZGVidWcuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2RlYnVnLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvbGVnYWN5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sZWdhY3kuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS1idW5kbGUtc291cmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmUtYnVuZGxlLXNvdXJjZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS1yZW1vdGluZy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcHJlLXJlbW90aW5nLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvcHJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC91bnNhZmUtZmFzdC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdW5zYWZlLWZhc3QuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9zZXMtYXZhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Nlcy1hdmEtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9zZXMtYXZhL2V4cG9ydGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Nlcy1hdmEtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9leHBvcnRlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9zZXMtYXZhL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9zZXMtYXZhLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Nlcy1hdmEvcHJlcGFyZS1lbmRvLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Nlcy1hdmEtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmVwYXJlLWVuZG8uanMiCiAgICAgICAgfSwKICAgICAgICAiaW1wb3J0LW1ldGEtcmVzb2x2ZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJpbXBvcnQtbWV0YS1yZXNvbHZlLXYyLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAia3JlYWQtY29udHJhY3QiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAia3JlYWQtY29udHJhY3QtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcm9wb3NhbC9iYXNlLWludmVudG9yeS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHJvcG9zYWwvYmFzZS1pbnZlbnRvcnkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYzQ3NjQ0MWU0YWI0MDhmNTRhMTNjZDFjMTVlOGM5ZjM3NWRmYjgzMDQ1YTBhOTA2Yjg3ZTVhNjE4MWFiYzNkYjQzOGI4NjQwMmY5ODgwMmY5ODBkZDZlYWM1YzFiODA5NWM0YjlmYzYzMmRmNzRkNDA2ODViZTFmZDZlY2RjMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcm9wb3NhbC9zdGFydC1rcmVhZC1wcm9wb3NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHJvcG9zYWwvc3RhcnQta3JlYWQtcHJvcG9zYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyZTcyM2U0MDIyMTRkYzk1YTVkYmU2MDg1ZTQ5Y2M4NzZmYTgwY2JjNmFlMTVmY2VhNjgwMWU4ZmM1NWFmYmQ1NDJkZmE3OGY3YjA3ODlmMzVlOWZmZWIxODE2MDE5NzU3ODg3MzRkNTgzNjVjN2RjODg5ZDA3ZTQ3YmMwNDVhNiIKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn1QSwMECgAAAAAAAAAAAFzNqocAHQAAAB0AADwAAABAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2Ftb3VudE1hdGguanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiLCIuL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJBbW91bnRNYXRoIiwiQXNzZXRLaW5kIiwiYXNzZXJ0QXNzZXRLaW5kIiwiYXNzZXJ0VmFsdWVHZXRIZWxwZXJzIiwiZ2V0QXNzZXRLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxwYXNzU3R5bGVPZixhc3NlcnRSZW1vdGFibGUsYXNzZXJ0UmVjb3JkLE0sbWF0Y2hlcyxuYXRNYXRoSGVscGVycyxzZXRNYXRoSGVscGVycyxjb3B5U2V0TWF0aEhlbHBlcnMsY29weUJhZ01hdGhIZWxwZXJzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UmVtb3RhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFJlbW90YWJsZSA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanNcIiwgW1tcIm5hdE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKG5hdE1hdGhIZWxwZXJzID0gJGjNj19hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc1wiLCBbW1wic2V0TWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoc2V0TWF0aEhlbHBlcnMgPSAkaM2PX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1wiLCBbW1wiY29weVNldE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKGNvcHlTZXRNYXRoSGVscGVycyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzXCIsIFtbXCJjb3B5QmFnTWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoY29weUJhZ01hdGhIZWxwZXJzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEFzc2V0S2luZD0vKiAgICAgICAgICAgICAgICAqL3tcbk5BVDonbmF0JyxcblNFVDonc2V0JyxcbkNPUFlfU0VUOidjb3B5U2V0JyxcbkNPUFlfQkFHOidjb3B5QmFnJ307JGjNj19vbmNlLkFzc2V0S2luZChBc3NldEtpbmQpO1xuXG5oYXJkZW4oQXNzZXRLaW5kKTtcbmNvbnN0IGFzc2V0S2luZE5hbWVzPWhhcmRlbihPYmplY3QudmFsdWVzKEFzc2V0S2luZCkuc29ydCgpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRBc3NldEtpbmQ9KGFsbGVnZWRBSyk9PntcbmFzc2V0S2luZE5hbWVzLmluY2x1ZGVzKGFsbGVnZWRBSyl8fFxuRmFpbCBgVGhlIGFzc2V0S2luZCAke2FsbGVnZWRBS30gbXVzdCBiZSBvbmUgb2YgJHtxKGFzc2V0S2luZE5hbWVzKX1gO1xuIH07JGjNj19vbmNlLmFzc2VydEFzc2V0S2luZChhc3NlcnRBc3NldEtpbmQpO1xuaGFyZGVuKGFzc2VydEFzc2V0S2luZCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBoZWxwZXJzPXtcbm5hdDpuYXRNYXRoSGVscGVycyxcbnNldDpzZXRNYXRoSGVscGVycyxcbmNvcHlTZXQ6Y29weVNldE1hdGhIZWxwZXJzLFxuY29weUJhZzpjb3B5QmFnTWF0aEhlbHBlcnN9O1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhc3NlcnRWYWx1ZUdldEFzc2V0S2luZD0odmFsdWUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsdWUpO1xuaWYocGFzc1N0eWxlPT09J2JpZ2ludCcpe1xucmV0dXJuJ25hdCc7XG4gfVxuaWYocGFzc1N0eWxlPT09J2NvcHlBcnJheScpe1xucmV0dXJuJ3NldCc7XG4gfVxuaWYobWF0Y2hlcyh2YWx1ZSxNLnNldCgpKSl7XG5yZXR1cm4nY29weVNldCc7XG4gfVxuaWYobWF0Y2hlcyh2YWx1ZSxNLmJhZygpKSl7XG5yZXR1cm4nY29weUJhZyc7XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG50aHJvdyBGYWlsIGB2YWx1ZSAke3ZhbHVlfSBtdXN0IGJlIGEgYmlnaW50LCBjb3B5U2V0LCBjb3B5QmFnLCBvciBhbiBhcnJheSwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRWYWx1ZUdldEhlbHBlcnM9KHZhbHVlKT0+XG4vL1xuaGVscGVyc1thc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSldO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5hc3NlcnRWYWx1ZUdldEhlbHBlcnMoYXNzZXJ0VmFsdWVHZXRIZWxwZXJzKTtcbmNvbnN0IG9wdGlvbmFsQnJhbmRDaGVjaz0oYWxsZWdlZEJyYW5kLGJyYW5kKT0+e1xuaWYoYnJhbmQhPT11bmRlZmluZWQpe1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYWxsZWdlZEJyYW5kPT09YnJhbmR8fFxuRmFpbCBgYW1vdW50J3MgYnJhbmQgJHtxKGFsbGVnZWRCcmFuZCl9IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfWA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja0xSQW5kR2V0SGVscGVycz0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5hc3NlcnRSZWNvcmQobGVmdEFtb3VudCwnbGVmdEFtb3VudCcpO1xuYXNzZXJ0UmVjb3JkKHJpZ2h0QW1vdW50LCdyaWdodEFtb3VudCcpO1xuY29uc3R7dmFsdWU6bGVmdFZhbHVlLGJyYW5kOmxlZnRCcmFuZH09bGVmdEFtb3VudDtcbmNvbnN0e3ZhbHVlOnJpZ2h0VmFsdWUsYnJhbmQ6cmlnaHRCcmFuZH09cmlnaHRBbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUobGVmdEJyYW5kLCdsZWZ0QnJhbmQnKTtcbmFzc2VydFJlbW90YWJsZShyaWdodEJyYW5kLCdyaWdodEJyYW5kJyk7XG5vcHRpb25hbEJyYW5kQ2hlY2sobGVmdEJyYW5kLGJyYW5kKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhyaWdodEJyYW5kLGJyYW5kKTtcbmxlZnRCcmFuZD09PXJpZ2h0QnJhbmR8fFxuRmFpbCBgQnJhbmRzIGluIGxlZnQgJHtxKGxlZnRCcmFuZCl9IGFuZCByaWdodCAke3EoXG5yaWdodEJyYW5kKVxuIH0gc2hvdWxkIG1hdGNoIGJ1dCBkbyBub3RgO1xuY29uc3QgbGVmdEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKGxlZnRWYWx1ZSk7XG5jb25zdCByaWdodEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKHJpZ2h0VmFsdWUpO1xubGVmdEhlbHBlcnM9PT1yaWdodEhlbHBlcnN8fFxuRmFpbCBgVGhlIGxlZnQgJHtsZWZ0QW1vdW50fSBhbmQgcmlnaHQgYW1vdW50ICR7cmlnaHRBbW91bnR9IGhhZCBkaWZmZXJlbnQgYXNzZXRLaW5kc2A7XG5yZXR1cm4gbGVmdEhlbHBlcnM7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvZXJjZUxSPShoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpPT57XG4vL1xucmV0dXJuW2guZG9Db2VyY2UobGVmdEFtb3VudC52YWx1ZSksaC5kb0NvZXJjZShyaWdodEFtb3VudC52YWx1ZSldO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBpc0dURT0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xucmV0dXJuIGguZG9Jc0dURSguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQW1vdW50TWF0aD17XG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5tYWtlOihicmFuZCxhbGxlZ2VkVmFsdWUpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5jb25zdCBoPWFzc2VydFZhbHVlR2V0SGVscGVycyhhbGxlZ2VkVmFsdWUpO1xuY29uc3QgdmFsdWU9aC5kb0NvZXJjZShhbGxlZ2VkVmFsdWUpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb2VyY2U6KGJyYW5kLGFsbGVnZWRBbW91bnQpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hc3NlcnRSZWNvcmQoYWxsZWdlZEFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZDphbGxlZ2VkQnJhbmQsdmFsdWU6YWxsZWdlZFZhbHVlfT1hbGxlZ2VkQW1vdW50O1xuYnJhbmQ9PT1hbGxlZ2VkQnJhbmR8fFxuRmFpbCBgVGhlIGJyYW5kIGluIHRoZSBhbGxlZ2VkQW1vdW50ICR7YWxsZWdlZEFtb3VudH0gaW4gJ2NvZXJjZScgZGlkbid0IG1hdGNoIHRoZSBzcGVjaWZpZWQgYnJhbmQgJHticmFuZH0uYDtcbi8vXG4vL1xucmV0dXJuIEFtb3VudE1hdGgubWFrZShicmFuZCxhbGxlZ2VkVmFsdWUpO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmdldFZhbHVlOihicmFuZCxhbW91bnQpPT5BbW91bnRNYXRoLmNvZXJjZShicmFuZCxhbW91bnQpLnZhbHVlLFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1ha2VFbXB0eTooYnJhbmQsYXNzZXRLaW5kPS8qICAgICAgICAgICAgICAgICovJ25hdCcpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hc3NlcnRBc3NldEtpbmQoYXNzZXRLaW5kKTtcbmNvbnN0IHZhbHVlPWhlbHBlcnNbYXNzZXRLaW5kXS5kb01ha2VFbXB0eSgpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG4gICAqL1xubWFrZUVtcHR5RnJvbUFtb3VudDooYW1vdW50KT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZCx2YWx1ZX09YW1vdW50O1xuY29uc3QgYXNzZXRLaW5kPWFzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKTtcbi8vXG5yZXR1cm4gQW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcbiB9LFxuLypcblxuXG5cblxuXG4gICAqL1xuaXNFbXB0eTooYW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQ6YWxsZWdlZEJyYW5kLHZhbHVlfT1hbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUoYWxsZWdlZEJyYW5kLCdicmFuZCcpO1xub3B0aW9uYWxCcmFuZENoZWNrKGFsbGVnZWRCcmFuZCxicmFuZCk7XG5jb25zdCBoPWFzc2VydFZhbHVlR2V0SGVscGVycyh2YWx1ZSk7XG5yZXR1cm4gaC5kb0lzRW1wdHkoaC5kb0NvZXJjZSh2YWx1ZSkpO1xuIH0sXG5pc0dURSxcbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmlzRXF1YWw6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbnJldHVybiBoLmRvSXNFcXVhbCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuYWRkOihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5jb25zdCB2YWx1ZT1oLmRvQWRkKC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kOmxlZnRBbW91bnQuYnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5zdWJ0cmFjdDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xuY29uc3QgdmFsdWU9aC5kb1N1YnRyYWN0KC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kOmxlZnRBbW91bnQuYnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1pbjooeCx5LGJyYW5kPXVuZGVmaW5lZCk9PlxuLy9cbmlzR1RFKHgseSxicmFuZCk/XG55OlxuaXNHVEUoeSx4LGJyYW5kKT9cbng6XG5GYWlsIGAke3h9IGFuZCAke3l9IGFyZSBpbmNvbXBhcmFibGVgLFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1heDooeCx5LGJyYW5kPXVuZGVmaW5lZCk9PlxuLy9cbmlzR1RFKHgseSxicmFuZCk/XG54OlxuaXNHVEUoeSx4KT9cbnk6XG5GYWlsIGAke3h9IGFuZCAke3l9IGFyZSBpbmNvbXBhcmFibGVgfTskaM2PX29uY2UuQW1vdW50TWF0aChBbW91bnRNYXRoKTtcblxuaGFyZGVuKEFtb3VudE1hdGgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGdldEFzc2V0S2luZD0oYW1vdW50KT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHt2YWx1ZX09YW1vdW50O1xucmV0dXJuIGFzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKTtcbiB9OyRozY9fb25jZS5nZXRBc3NldEtpbmQoZ2V0QXNzZXRLaW5kKTtcbmhhcmRlbihnZXRBc3NldEtpbmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQXNzZXRLaW5kIjpbIkFzc2V0S2luZCJdLCJhc3NlcnRBc3NldEtpbmQiOlsiYXNzZXJ0QXNzZXRLaW5kIl0sImFzc2VydFZhbHVlR2V0SGVscGVycyI6WyJhc3NlcnRWYWx1ZUdldEhlbHBlcnMiXSwiQW1vdW50TWF0aCI6WyJBbW91bnRNYXRoIl0sImdldEFzc2V0S2luZCI6WyJnZXRBc3NldEtpbmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA5Ktj7uEFAADhBQAAUAAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJjb3B5QmFnTWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlCYWcsbXVzdE1hdGNoLE0sZ2V0Q29weUJhZ0VudHJpZXMsYmFnSXNTdXBlcmJhZyxiYWdVbmlvbixiYWdEaXNqb2ludFN1YnRyYWN0OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlCYWdcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlCYWcgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiZ2V0Q29weUJhZ0VudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wiYmFnSXNTdXBlcmJhZ1wiLCBbJGjNj19hID0+IChiYWdJc1N1cGVyYmFnID0gJGjNj19hKV1dLFtcImJhZ1VuaW9uXCIsIFskaM2PX2EgPT4gKGJhZ1VuaW9uID0gJGjNj19hKV1dLFtcImJhZ0Rpc2pvaW50U3VidHJhY3RcIiwgWyRozY9fYSA9PiAoYmFnRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW1wdHk9bWFrZUNvcHlCYWcoW10pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5QmFnTWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihiYWcpPT57XG5tdXN0TWF0Y2goYmFnLE0uYmFnKCksJ2JhZyBvZiBhbW91bnQnKTtcbnJldHVybiBiYWc7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooYmFnKT0+Z2V0Q29weUJhZ0VudHJpZXMoYmFnKS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpiYWdJc1N1cGVyYmFnLFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6YmFnVW5pb24sXG5kb1N1YnRyYWN0OmJhZ0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2UuY29weUJhZ01hdGhIZWxwZXJzKGNvcHlCYWdNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5QmFnTWF0aEhlbHBlcnMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEGFj3ifBQAAnwUAAFAAAABAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiY29weVNldE1hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGtleUVRLG1ha2VDb3B5U2V0LG11c3RNYXRjaCxNLGdldENvcHlTZXRLZXlzLHNldElzU3VwZXJzZXQsc2V0RGlzam9pbnRVbmlvbixzZXREaXNqb2ludFN1YnRyYWN0OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlTZXQgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiZ2V0Q29weVNldEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaM2PX2EpXV0sW1wic2V0SXNTdXBlcnNldFwiLCBbJGjNj19hID0+IChzZXRJc1N1cGVyc2V0ID0gJGjNj19hKV1dLFtcInNldERpc2pvaW50VW5pb25cIiwgWyRozY9fYSA9PiAoc2V0RGlzam9pbnRVbmlvbiA9ICRozY9fYSldXSxbXCJzZXREaXNqb2ludFN1YnRyYWN0XCIsIFskaM2PX2EgPT4gKHNldERpc2pvaW50U3VidHJhY3QgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW1wdHk9bWFrZUNvcHlTZXQoW10pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGNvcHlTZXRNYXRoSGVscGVycz1oYXJkZW4oe1xuZG9Db2VyY2U6KHNldCk9Pntcbm11c3RNYXRjaChzZXQsTS5zZXQoKSwnc2V0IG9mIGFtb3VudCcpO1xucmV0dXJuIHNldDtcbiB9LFxuZG9NYWtlRW1wdHk6KCk9PmVtcHR5LFxuZG9Jc0VtcHR5OihzZXQpPT5nZXRDb3B5U2V0S2V5cyhzZXQpLmxlbmd0aD09PTAsXG5kb0lzR1RFOnNldElzU3VwZXJzZXQsXG5kb0lzRXF1YWw6a2V5RVEsXG5kb0FkZDpzZXREaXNqb2ludFVuaW9uLFxuZG9TdWJ0cmFjdDpzZXREaXNqb2ludFN1YnRyYWN0fSk7JGjNj19vbmNlLmNvcHlTZXRNYXRoSGVscGVycyhjb3B5U2V0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29weVNldE1hdGhIZWxwZXJzIjpbImNvcHlTZXRNYXRoSGVscGVycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACVK3DJZwQAAGcEAABMAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9uYXQiXSwiZXhwb3J0cyI6WyJuYXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLE5hdCxpc05hdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dLFtcImlzTmF0XCIsIFskaM2PX2EgPT4gKGlzTmF0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IGVtcHR5PTBuO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbmF0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihuYXQpPT57XG4vL1xuYXNzZXJ0LnR5cGVvZihuYXQsJ2JpZ2ludCcpO1xuaXNOYXQobmF0KXx8RmFpbCBgdmFsdWUgJHtuYXR9IG11c3QgYmUgYSBuYXR1cmFsIG51bWJlcmA7XG5yZXR1cm4gTmF0KG5hdCk7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eToobmF0KT0+bmF0PT09ZW1wdHksXG5kb0lzR1RFOihsZWZ0LHJpZ2h0KT0+bGVmdD49cmlnaHQsXG5kb0lzRXF1YWw6KGxlZnQscmlnaHQpPT5sZWZ0PT09cmlnaHQsXG4vL1xuZG9BZGQ6KGxlZnQscmlnaHQpPT5sZWZ0K3JpZ2h0LFxuZG9TdWJ0cmFjdDoobGVmdCxyaWdodCk9Pk5hdChsZWZ0LXJpZ2h0KX0pOyRozY9fb25jZS5uYXRNYXRoSGVscGVycyhuYXRNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJuYXRNYXRoSGVscGVycyI6WyJuYXRNYXRoSGVscGVycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABHCrnjSAYAAEgGAABMAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbInNldE1hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGFzc2VydEtleSxlbGVtZW50c0lzU3VwZXJzZXQsZWxlbWVudHNEaXNqb2ludFVuaW9uLGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCxjb2VyY2VUb0VsZW1lbnRzLGVsZW1lbnRzQ29tcGFyZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJlbGVtZW50c0lzU3VwZXJzZXRcIiwgWyRozY9fYSA9PiAoZWxlbWVudHNJc1N1cGVyc2V0ID0gJGjNj19hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRVbmlvblwiLCBbJGjNj19hID0+IChlbGVtZW50c0Rpc2pvaW50VW5pb24gPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0XCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXSxbXCJjb2VyY2VUb0VsZW1lbnRzXCIsIFskaM2PX2EgPT4gKGNvZXJjZVRvRWxlbWVudHMgPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNDb21wYXJlXCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzQ29tcGFyZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PWhhcmRlbihbXSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgc2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihsaXN0KT0+e1xubGlzdD1jb2VyY2VUb0VsZW1lbnRzKGxpc3QpO1xuLy9cbi8vXG4vL1xuLy9cbmFzc2VydEtleShsaXN0KTtcbnJldHVybiBsaXN0O1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KGxpc3QpPT5wYXNzU3R5bGVPZihsaXN0KT09PSdjb3B5QXJyYXknJiZsaXN0Lmxlbmd0aD09PTAsXG5kb0lzR1RFOmVsZW1lbnRzSXNTdXBlcnNldCxcbmRvSXNFcXVhbDooeCx5KT0+ZWxlbWVudHNDb21wYXJlKHgseSk9PT0wLFxuZG9BZGQ6ZWxlbWVudHNEaXNqb2ludFVuaW9uLFxuZG9TdWJ0cmFjdDplbGVtZW50c0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2Uuc2V0TWF0aEhlbHBlcnMoc2V0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0TWF0aEhlbHBlcnMiOlsic2V0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMgP9Gc0FAADNBQAAOwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvY29uZmlnLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJCcmlkZ2VJZCIsIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIiwiVkJhbmtBY2NvdW50IiwiV2FsbGV0TmFtZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEJyaWRnZUlkPS8qICAgICAgICAgICAgICAgICove1xuQkFOSzonYmFuaycsXG5DT1JFOidjb3JlJyxcbkRJQkM6J2RpYmMnLFxuU1RPUkFHRTonc3RvcmFnZScsXG5QUk9WSVNJT046J3Byb3Zpc2lvbicsXG5QUk9WSVNJT05fU01BUlRfV0FMTEVUOidwcm92aXNpb25XYWxsZXQnLFxuVkxPQ0FMQ0hBSU46J3Zsb2NhbGNoYWluJyxcblZUUkFOU0ZFUjondnRyYW5zZmVyJyxcbldBTExFVDond2FsbGV0J307JGjNj19vbmNlLkJyaWRnZUlkKEJyaWRnZUlkKTtcblxuaGFyZGVuKEJyaWRnZUlkKTtcblxuY29uc3QgICAgICAgIENvc21vc0luaXRLZXlUb0JyaWRnZUlkPXtcbnZiYW5rUG9ydDpCcmlkZ2VJZC5CQU5LLFxudmliY1BvcnQ6QnJpZGdlSWQuRElCQ307JGjNj19vbmNlLkNvc21vc0luaXRLZXlUb0JyaWRnZUlkKENvc21vc0luaXRLZXlUb0JyaWRnZUlkKTtcblxuXG5jb25zdCAgICAgICAgV2FsbGV0TmFtZT0vKiAgICAgICAgICAgICAgICAqL3tcbmRlcG9zaXRGYWNldDonZGVwb3NpdEZhY2V0J307JGjNj19vbmNlLldhbGxldE5hbWUoV2FsbGV0TmFtZSk7XG5cbmhhcmRlbihXYWxsZXROYW1lKTtcblxuLy9cbmNvbnN0ICAgICAgICBWQmFua0FjY291bnQ9LyogICAgICAgICAgICAgICAgKi97XG5yZXNlcnZlOntcbm1vZHVsZTondmJhbmsvcmVzZXJ2ZScsXG5hZGRyZXNzOidhZ29yaWMxYWUwbG10emxncmNubGE5eGprcGFhcnE1ZDVkZmV6NjNoM251Y2wnfSxcblxucHJvdmlzaW9uOntcbm1vZHVsZTondmJhbmsvcHJvdmlzaW9uJyxcbmFkZHJlc3M6J2Fnb3JpYzFtZWd6eXRnNjVjeXJnenM2ZnZ6eGdyY3F2d3dsN3VncHQ2MjM0Nid9fTskaM2PX29uY2UuVkJhbmtBY2NvdW50KFZCYW5rQWNjb3VudCk7XG5cblxuaGFyZGVuKFZCYW5rQWNjb3VudCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJCcmlkZ2VJZCI6WyJCcmlkZ2VJZCJdLCJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCI6WyJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCJdLCJXYWxsZXROYW1lIjpbIldhbGxldE5hbWUiXSwiVkJhbmtBY2NvdW50IjpbIlZCYW5rQWNjb3VudCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACcqLSXSAQAAEgEAAA6AAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9kZWJ1Zy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVRyYWNlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxubGV0IGRlYnVnSW5zdGFuY2U9MTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVHJhY2VyPShuYW1lLGVuYWJsZT10cnVlKT0+e1xuZGVidWdJbnN0YW5jZSs9MTtcbmxldCBkZWJ1Z0NvdW50PTE7XG5jb25zdCBrZXk9IGAtLS0tLSAke25hbWV9LiR7ZGVidWdJbnN0YW5jZX0gYDtcbi8vXG5zd2l0Y2goZW5hYmxlKXtcbmNhc2UgZmFsc2U6e1xuY29uc3QgbG9nRGlzYWJsZWQ9KC4uLl9hcmdzKT0+eyB9O1xucmV0dXJuIGxvZ0Rpc2FibGVkO1xuIH1cbmNhc2UndmVyYm9zZSc6e1xuY29uc3QgaW5mb1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsLi4uYXJncyk7XG4gfWVsc2V7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsb3B0TG9nLC4uLmFyZ3MpO1xuIH1cbiB9O1xucmV0dXJuIGluZm9UaWNrO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgZGVidWdUaWNrPShvcHRMb2csLi4uYXJncyk9PntcbmlmKG9wdExvZy5sb2cpe1xub3B0TG9nLmxvZyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gZGVidWdUaWNrO1xuIH19XG5cbiB9OyRozY9fb25jZS5tYWtlVHJhY2VyKG1ha2VUcmFjZXIpO1xuaGFyZGVuKG1ha2VUcmFjZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYWNlciI6WyJtYWtlVHJhY2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAALV4MKOAgAAjgIAADsAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2Vycm9ycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJOb25OdWxsaXNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIE5vbk51bGxpc2g9KHZhbCxvcHREZXRhaWxzPSBgdW5leHBlY3RlZCAke3EodmFsKX1gKT0+e1xuaWYodmFsIT1udWxsKXtcbi8vXG5yZXR1cm4gdmFsO1xuIH1cbmFzc2VydC5mYWlsKG9wdERldGFpbHMpO1xuIH07JGjNj19vbmNlLk5vbk51bGxpc2goTm9uTnVsbGlzaCk7XG5oYXJkZW4oTm9uTnVsbGlzaCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJOb25OdWxsaXNoIjpbIk5vbk51bGxpc2giXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAH/arhAsFAAALBQAAOgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9jb25maWcuanMiLCIuL2RlYnVnLmpzIiwiLi9lcnJvcnMuanMiLCIuL2pzLXV0aWxzLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3Nlcy11dGlscy5qcyIsIi4vdHlwZUNoZWNrLmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIl0sImV4cG9ydHMiOltudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL2NvbmZpZy5qcyIsIi4vZGVidWcuanMiLCIuL2Vycm9ycy5qcyIsIi4vanMtdXRpbHMuanMiLCIuL21ldGhvZC10b29scy5qcyIsIi4vc2VzLXV0aWxzLmpzIiwiLi90eXBlQ2hlY2suanMiLCIuL3R5cGVHdWFyZHMuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2NvbmZpZy5qc1wiLCBbXV0sW1wiLi9kZWJ1Zy5qc1wiLCBbXV0sW1wiLi9lcnJvcnMuanNcIiwgW11dLFtcIi4vanMtdXRpbHMuanNcIiwgW11dLFtcIi4vbWV0aG9kLXRvb2xzLmpzXCIsIFtdXSxbXCIuL3Nlcy11dGlscy5qc1wiLCBbXV0sW1wiLi90eXBlQ2hlY2suanNcIiwgW11dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOltbIm9iamVjdE1hcCIsIm9iamVjdE1hcCJdXSwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6W1sib2JqZWN0TWV0YU1hcCIsIm9iamVjdE1ldGFNYXAiXV0sIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjpbWyJmcm9tVW5pcXVlRW50cmllcyIsImZyb21VbmlxdWVFbnRyaWVzIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADML6bVHwcAAB8HAAA9AAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9qcy11dGlscy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVlcENvcHlKc29uYWJsZSIsImRlZXBNYXBPYmplY3QiLCJtYWtlTWVhc3VyZVNlY29uZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcENvcHlKc29uYWJsZT0odmFsdWUpPT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZXBDb3B5SnNvbmFibGUoZGVlcENvcHlKc29uYWJsZSk7XG5jb25zdCBkZWVwTWFwT2JqZWN0SW50ZXJuYWw9KHZhbHVlLG5hbWUsY29udGFpbmVyLG1hcHBlcik9PntcbmlmKGNvbnRhaW5lciYmdHlwZW9mIG5hbWU9PT0nc3RyaW5nJyl7XG5jb25zdCBtYXBwZWQ9bWFwcGVyKHZhbHVlLG5hbWUsY29udGFpbmVyKTtcbmlmKG1hcHBlZCE9PXZhbHVlKXtcbnJldHVybiBtYXBwZWQ7XG4gfVxuIH1cblxuaWYodHlwZW9mIHZhbHVlIT09J29iamVjdCd8fCF2YWx1ZSl7XG5yZXR1cm4gdmFsdWU7XG4gfVxuXG5sZXQgd2FzTWFwcGVkPWZhbHNlO1xuY29uc3QgbWFwcGVkRW50cmllcz1PYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChbaW5uZXJOYW1lLGlubmVyVmFsdWVdKT0+e1xuY29uc3QgbWFwcGVkSW5uZXJWYWx1ZT1kZWVwTWFwT2JqZWN0SW50ZXJuYWwoXG5pbm5lclZhbHVlLFxuaW5uZXJOYW1lLFxudmFsdWUsXG5tYXBwZXIpO1xuXG53YXNNYXBwZWR8fD1tYXBwZWRJbm5lclZhbHVlIT09aW5uZXJWYWx1ZTtcbnJldHVybltpbm5lck5hbWUsbWFwcGVkSW5uZXJWYWx1ZV07XG4gfSk7XG5cbnJldHVybiB3YXNNYXBwZWQ/T2JqZWN0LmZyb21FbnRyaWVzKG1hcHBlZEVudHJpZXMpOnZhbHVlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcE1hcE9iamVjdD0ob2JqLG1hcHBlcik9PlxuZGVlcE1hcE9iamVjdEludGVybmFsKG9iaix1bmRlZmluZWQsdW5kZWZpbmVkLG1hcHBlcik7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZXBNYXBPYmplY3QoZGVlcE1hcE9iamVjdCk7XG5jb25zdCAgICAgICAgbWFrZU1lYXN1cmVTZWNvbmRzPShjdXJyZW50VGltZU1pbGxpc2VjKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBtZWFzdXJlU2Vjb25kcz1hc3luYyhmbik9PntcbmNvbnN0IHQwPWN1cnJlbnRUaW1lTWlsbGlzZWMoKTtcbmNvbnN0IHJlc3VsdD1hd2FpdCBmbigpO1xuY29uc3QgZHVyYXRpb25NaWxsaXNlYz1jdXJyZW50VGltZU1pbGxpc2VjKCktdDA7XG5yZXR1cm57cmVzdWx0LGR1cmF0aW9uOmR1cmF0aW9uTWlsbGlzZWMvMTAwMH07XG4gfTtcbnJldHVybiBtZWFzdXJlU2Vjb25kcztcbiB9OyRozY9fb25jZS5tYWtlTWVhc3VyZVNlY29uZHMobWFrZU1lYXN1cmVTZWNvbmRzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBDb3B5SnNvbmFibGUiOlsiZGVlcENvcHlKc29uYWJsZSJdLCJkZWVwTWFwT2JqZWN0IjpbImRlZXBNYXBPYmplY3QiXSwibWFrZU1lYXN1cmVTZWNvbmRzIjpbIm1ha2VNZWFzdXJlU2Vjb25kcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC2vSFeawgAAGsIAABBAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9tZXRob2QtdG9vbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCJdLCJleHBvcnRzIjpbImJpbmRBbGxNZXRob2RzIiwiZ2V0TWV0aG9kTmFtZXMiLCJnZXRTdHJpbmdNZXRob2ROYW1lcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpc09iamVjdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixjcmVhdGUsZnJvbUVudHJpZXMsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309XG5PYmplY3Q7XG5jb25zdHtvd25LZXlzLGFwcGx5fT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29tcGFyZVN0cmluZ2lmaWVkPShhLGIpPT57XG5pZih0eXBlb2YgYT09PXR5cGVvZiBiKXtcbmNvbnN0IGxlZnQ9U3RyaW5nKGEpO1xuY29uc3QgcmlnaHQ9U3RyaW5nKGIpO1xuLy9cbnJldHVybiBsZWZ0PHJpZ2h0Py0xOmxlZnQ+cmlnaHQ/MTowO1xuIH1cbmlmKHR5cGVvZiBhPT09J3N5bWJvbCcpe1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N0cmluZycpO1xucmV0dXJuLTE7XG4gfVxuYXNzZXJ0KHR5cGVvZiBhPT09J3N0cmluZycpO1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N5bWJvbCcpO1xucmV0dXJuIDE7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2ROYW1lcz0odmFsKT0+e1xubGV0IGxheWVyPXZhbDtcbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTsvL1xud2hpbGUobGF5ZXIhPT1udWxsJiZsYXllciE9PU9iamVjdC5wcm90b3R5cGUpe1xuLy9cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobGF5ZXIpO1xuY29uc3Qgb3duTmFtZXM9LyogICAgICAgICAgICAgICovb3duS2V5cyhkZXNjcyk7XG5mb3IoY29uc3QgbmFtZSBvZiBvd25OYW1lcyl7XG4vL1xuLy9cbmlmKHR5cGVvZiB2YWxbbmFtZV09PT0nZnVuY3Rpb24nKXtcbm5hbWVzLmFkZChuYW1lKTtcbiB9XG4gfVxuaWYoIWlzT2JqZWN0KHZhbCkpe1xuYnJlYWs7XG4gfVxubGF5ZXI9Z2V0UHJvdG90eXBlT2YobGF5ZXIpO1xuIH1cbnJldHVybiBoYXJkZW4oWy4uLm5hbWVzXS5zb3J0KGNvbXBhcmVTdHJpbmdpZmllZCkpO1xuIH07JGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtcbmhhcmRlbihnZXRNZXRob2ROYW1lcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0U3RyaW5nTWV0aG9kTmFtZXM9KHZhbCk9PlxuLyogICAgICAgICAgICAgICAgICAgKi9cbmdldE1ldGhvZE5hbWVzKHZhbCkuZmlsdGVyKChuYW1lKT0+dHlwZW9mIG5hbWU9PT0nc3RyaW5nJyk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5nZXRTdHJpbmdNZXRob2ROYW1lcyhnZXRTdHJpbmdNZXRob2ROYW1lcyk7XG5jb25zdCAgICAgICAgYmluZEFsbE1ldGhvZHM9KG9iaik9PlxuaGFyZGVuKFxuY3JlYXRlKFxub2JqLFxuZnJvbUVudHJpZXMoXG5nZXRNZXRob2ROYW1lcyhvYmopLm1hcCgobmFtZSk9Pltcbm5hbWUsXG57XG52YWx1ZTooLyogICAgICAgICAgICAgICAgICAgICovLi4uYXJncyk9PlxuYXBwbHkob2JqW25hbWVdLG9iaixhcmdzKSxcbmVudW1lcmFibGU6dHJ1ZX1dKSkpKTskaM2PX29uY2UuYmluZEFsbE1ldGhvZHMoYmluZEFsbE1ldGhvZHMpO1xuXG5cblxuXG5cbmhhcmRlbihiaW5kQWxsTWV0aG9kcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJnZXRTdHJpbmdNZXRob2ROYW1lcyI6WyJnZXRTdHJpbmdNZXRob2ROYW1lcyJdLCJiaW5kQWxsTWV0aG9kcyI6WyJiaW5kQWxsTWV0aG9kcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACaBR+vhh0AAIYdAAA+AAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zZXMtdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vc3RyZWFtIiwiamVzc2llLmpzIl0sImV4cG9ydHMiOlsiUHJvbWlzZUFsbE9yRXJyb3JzIiwiYWdncmVnYXRlVHJ5RmluYWxseSIsImFsbFZhbHVlcyIsImFzc2VydEFsbERlZmluZWQiLCJkZWVwbHlGdWxmaWxsZWRPYmplY3QiLCJmb3JldmVyIiwic3luY2hyb25pemVkVGVlIiwidW50aWxUcnVlIiwid2hpbGVUcnVlIiwid2l0aERlZmVycmVkQ2xlYW51cCIsInppcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsbWFrZUVycm9yLGFubm90YXRlRXJyb3IsWCxkZWVwbHlGdWxmaWxsZWQsaXNPYmplY3QsbWFrZVByb21pc2VLaXQsbWFrZVF1ZXVlLGFzeW5jR2VuZXJhdGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiZGVlcGx5RnVsZmlsbGVkXCIsIFskaM2PX2EgPT4gKGRlZXBseUZ1bGZpbGxlZCA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3N0cmVhbVwiLCBbW1wibWFrZVF1ZXVlXCIsIFskaM2PX2EgPT4gKG1ha2VRdWV1ZSA9ICRozY9fYSldXV1dLFtcImplc3NpZS5qc1wiLCBbW1wiYXN5bmNHZW5lcmF0ZVwiLCBbJGjNj19hID0+IChhc3luY0dlbmVyYXRlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2Zyb21FbnRyaWVzLGtleXMsdmFsdWVzfT1PYmplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwbHlGdWxmaWxsZWRPYmplY3Q9YXN5bmMob2JqKT0+e1xuaXNPYmplY3Qob2JqKXx8RmFpbCBgcGFyYW0gbXVzdCBiZSBhbiBvYmplY3RgO1xucmV0dXJuIGRlZXBseUZ1bGZpbGxlZChvYmopO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkT2JqZWN0KGRlZXBseUZ1bGZpbGxlZE9iamVjdCk7XG5jb25zdCBtYWtlQWdncmVnYXRlRXJyb3I9XG50eXBlb2YgQWdncmVnYXRlRXJyb3I9PT0nZnVuY3Rpb24nP1xuKGVycm9ycyxtZXNzYWdlLG9wdGlvbnMpPT5BZ2dyZWdhdGVFcnJvcihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKTpcbihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKT0+e1xucmV0dXJuIG1ha2VFcnJvcihtZXNzYWdlPz8nbXVsdGlwbGUgZXJyb3JzJyx1bmRlZmluZWQse1xuLi4ub3B0aW9ucyxcbmVycm9yc30pO1xuXG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFByb21pc2VBbGxPckVycm9ycz1hc3luYyhpdGVtcyk9PntcbnJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoaXRlbXMpLnRoZW4oKHJlc3VsdHMpPT57XG5jb25zdCBlcnJvcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlc3VsdHMuZmlsdGVyKCh7c3RhdHVzfSk9PnN0YXR1cz09PSdyZWplY3RlZCcpLlxubWFwKChyZXN1bHQpPT5yZXN1bHQucmVhc29uKTtcbmlmKCFlcnJvcnMubGVuZ3RoKXtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0cy5tYXAoXG4ocmVzdWx0KT0+cmVzdWx0LnZhbHVlKSk7XG5cbiB9ZWxzZSBpZihlcnJvcnMubGVuZ3RoPT09MSl7XG50aHJvdyBlcnJvcnNbMF07XG4gfWVsc2V7XG50aHJvdyBtYWtlQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiB9XG4gfSk7XG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLlByb21pc2VBbGxPckVycm9ycyhQcm9taXNlQWxsT3JFcnJvcnMpO1xuY29uc3QgICAgICAgIGFnZ3JlZ2F0ZVRyeUZpbmFsbHk9YXN5bmModHJpZXIsZmluYWxpemVyKT0+XG50cmllcigpLnRoZW4oXG5hc3luYyhyZXN1bHQpPT5maW5hbGl6ZXIoKS50aGVuKCgpPT5yZXN1bHQpLFxuYXN5bmModHJ5RXJyb3IpPT5cbmZpbmFsaXplcih0cnlFcnJvcikuXG50aGVuKFxuKCk9PnRyeUVycm9yLFxuKGZpbmFsaXplRXJyb3IpPT5tYWtlQWdncmVnYXRlRXJyb3IoW3RyeUVycm9yLGZpbmFsaXplRXJyb3JdKSkuXG5cbnRoZW4oKGVycm9yKT0+UHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmFnZ3JlZ2F0ZVRyeUZpbmFsbHkoYWdncmVnYXRlVHJ5RmluYWxseSk7XG5jb25zdCAgICAgICAgd2l0aERlZmVycmVkQ2xlYW51cD1hc3luYyhmbik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2xlYW51cHNMSUZPPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhZGRDbGVhbnVwPShjbGVhbnVwKT0+e1xuY2xlYW51cHNMSUZPLnVuc2hpZnQoY2xlYW51cCk7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBmaW5hbGl6ZXI9YXN5bmMoZXJyKT0+e1xuLy9cbmNvbnN0IGNsZWFudXBSZXN1bHRzPWNsZWFudXBzTElGTy5tYXAoYXN5bmMoY2xlYW51cCk9PntcbmF3YWl0IG51bGw7XG5yZXR1cm4gY2xlYW51cChlcnIpO1xuIH0pO1xuYXdhaXQgUHJvbWlzZUFsbE9yRXJyb3JzKGNsZWFudXBSZXN1bHRzKTtcbiB9O1xucmV0dXJuIGFnZ3JlZ2F0ZVRyeUZpbmFsbHkoKCk9PmZuKGFkZENsZWFudXApLGZpbmFsaXplcik7XG4gfTtcblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLndpdGhEZWZlcnJlZENsZWFudXAod2l0aERlZmVycmVkQ2xlYW51cCk7XG5jb25zdCAgICAgICAgYXNzZXJ0QWxsRGVmaW5lZD0ob2JqKT0+e1xuY29uc3QgbWlzc2luZz1bXTtcbmZvcihjb25zdFtrZXksdmFsXW9mIE9iamVjdC5lbnRyaWVzKG9iaikpe1xuaWYodmFsPT09dW5kZWZpbmVkKXtcbm1pc3NpbmcucHVzaChrZXkpO1xuIH1cbiB9XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbkZhaWwgYG1pc3NpbmcgJHtxKG1pc3NpbmcpfWA7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLmFzc2VydEFsbERlZmluZWQoYXNzZXJ0QWxsRGVmaW5lZCk7XG5jb25zdCBub3REb25lPWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTp1bmRlZmluZWR9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbHdheXNEb25lPWhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuXG5jb25zdCAgICAgICAgZm9yZXZlcj1hc3luY0dlbmVyYXRlKCgpPT5ub3REb25lKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZm9yZXZlcihmb3JldmVyKTtcbmNvbnN0ICAgICAgICB3aGlsZVRydWU9KHByb2R1Y2UpPT5cbmFzeW5jR2VuZXJhdGUoYXN5bmMoKT0+e1xuY29uc3QgdmFsdWU9YXdhaXQgcHJvZHVjZSgpO1xuaWYoIXZhbHVlKXtcbnJldHVybiBhbHdheXNEb25lO1xuIH1cbnJldHVybiBoYXJkZW4oe1xuZG9uZTpmYWxzZSxcbnZhbHVlfSk7XG5cbiB9KTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2Uud2hpbGVUcnVlKHdoaWxlVHJ1ZSk7XG5jb25zdCAgICAgICAgdW50aWxUcnVlPShwcm9kdWNlKT0+XG5hc3luY0dlbmVyYXRlKGFzeW5jKCk9PntcbmNvbnN0IHZhbHVlPWF3YWl0IHByb2R1Y2UoKTtcbmlmKHZhbHVlKXtcbnJldHVybiBoYXJkZW4oe1xuZG9uZTp0cnVlLFxudmFsdWV9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oe1xuZG9uZTpmYWxzZSxcbnZhbHVlfSk7XG5cbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnVudGlsVHJ1ZSh1bnRpbFRydWUpO1xuY29uc3QgICAgICAgIHppcD0oeHMseXMpPT5oYXJkZW4oeHMubWFwKCh4LGkpPT5beCx5c1sraV1dKSk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuemlwKHppcCk7XG5jb25zdCAgICAgICAgYWxsVmFsdWVzPWFzeW5jKG9iaik9PntcbmNvbnN0IHJlc29sdmVkPWF3YWl0IFByb21pc2UuYWxsKHZhbHVlcyhvYmopKTtcbi8vXG5yZXR1cm4gaGFyZGVuKGZyb21FbnRyaWVzKHppcChrZXlzKG9iaikscmVzb2x2ZWQpKSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmFsbFZhbHVlcyhhbGxWYWx1ZXMpO1xuY29uc3QgICAgICAgIHN5bmNocm9uaXplZFRlZT0oc291cmNlU3RyZWFtLHJlYWRlckNvdW50KT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lUmVzdWx0O1xuXG4vKlxuXG5cblxuICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHF1ZXVlcz1bXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVsbE5leHQ9YXN5bmMoKT0+e1xuY29uc3QgcmVxdWVzdHM9YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHF1ZXVlcy5tYXAoKHF1ZXVlKT0+cXVldWUuZ2V0KCkpKTtcbmNvbnN0IHJlamVjdGlvbnM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmVycz1bXTtcbmxldCBkb25lPWZhbHNlO1xuZm9yKGNvbnN0IHNldHRsZWRSZXN1bHQgb2YgcmVxdWVzdHMpe1xuaWYoc2V0dGxlZFJlc3VsdC5zdGF0dXM9PT0ncmVqZWN0ZWQnKXtcbnJlamVjdGlvbnMucHVzaChzZXR0bGVkUmVzdWx0LnJlYXNvbik7XG4gfWVsc2V7XG5kb25lfHw9ISFzZXR0bGVkUmVzdWx0LnZhbHVlLmRvbmU7XG5yZXNvbHZlcnMucHVzaChzZXR0bGVkUmVzdWx0LnZhbHVlLnZhbHVlKTtcbiB9XG4gfVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5pZihkb25lUmVzdWx0KXtcbnJlc3VsdD1Qcm9taXNlLnJlc29sdmUoZG9uZVJlc3VsdCk7XG4gfWVsc2UgaWYocmVqZWN0aW9ucy5sZW5ndGgpe1xuY29uc3QgZXJyb3I9bWFrZUVycm9yKFggYFRlZWQgc3RyZWFtIHRocmV3YCk7XG5hbm5vdGF0ZUVycm9yKGVycm9yLFggYFRlZWQgcmVqZWN0aW9uczogJHtyZWplY3Rpb25zfWApO1xucmVzdWx0PVxuc291cmNlU3RyZWFtLnRocm93Py4oZXJyb3IpfHxcblByb21pc2UucmVzb2x2ZShzb3VyY2VTdHJlYW0ucmV0dXJuPy4oKSkudGhlbigoKT0+XG5Qcm9taXNlLnJlamVjdChlcnJvcikpO1xuXG4gfWVsc2UgaWYoZG9uZSl7XG5yZXN1bHQ9XG5zb3VyY2VTdHJlYW0ucmV0dXJuPy4oKXx8XG5Qcm9taXNlLnJlc29sdmUoe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9ZWxzZXtcbnJlc3VsdD1zb3VyY2VTdHJlYW0ubmV4dCgpO1xuIH1cbnJlc3VsdC50aGVuKFxuKHIpPT57XG5pZihyLmRvbmUpe1xuZG9uZVJlc3VsdD1yO1xuIH1cbiB9LFxuKCk9PntcbmRvbmVSZXN1bHQ9e2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9O1xuIH0pO1xuXG5mb3IoY29uc3QgcmVzb2x2ZSBvZiByZXNvbHZlcnMpe1xucmVzb2x2ZShyZXN1bHQpO1xuIH1cbnJldHVybiBwdWxsTmV4dCgpO1xuIH07XG5cbmNvbnN0IHJlYWRlcnM9QXJyYXkuZnJvbSh7bGVuZ3RoOnJlYWRlckNvdW50fSkubWFwKCgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcXVldWU9bWFrZVF1ZXVlKCk7XG5xdWV1ZXMucHVzaChxdWV1ZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWFkZXI9aGFyZGVuKHtcbiAgICAgIGFzeW5jIG5leHQoKXtcbi8qXG5cblxuXG4gICAgICAgICAqL1xuY29uc3R7cHJvbWlzZSxyZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucXVldWUucHV0KHt2YWx1ZTpyZXNvbHZlLGRvbmU6ZmFsc2V9KTtcbnJldHVybiBwcm9taXNlO1xuIH0sXG4gICAgICBhc3luYyByZXR1cm4oKXtcbi8qXG5cblxuXG4gICAgICAgICAqL1xuY29uc3R7cHJvbWlzZSxyZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucXVldWUucHV0KHt2YWx1ZTpyZXNvbHZlLGRvbmU6dHJ1ZX0pO1xucmV0dXJuIHByb21pc2U7XG4gfSxcbiAgICAgIGFzeW5jIHRocm93KHJlYXNvbil7XG5jb25zdCByZWplY3Rpb249UHJvbWlzZS5yZWplY3QocmVhc29uKTtcbnF1ZXVlLnB1dChyZWplY3Rpb24pO1xucmV0dXJuIHJlamVjdGlvbjtcbiB9LFxuLy9cbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiByZWFkZXI7XG4gfSxcbi8vXG4gICAgICBhc3luY1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpe1xuYXdhaXQgcmVhZGVyLnJldHVybigpO1xuIH19KTtcblxucmV0dXJuIHJlYWRlcjtcbiB9KTtcblxudm9pZCBwdWxsTmV4dCgpO1xucmV0dXJuIHJlYWRlcnM7XG4gfTskaM2PX29uY2Uuc3luY2hyb25pemVkVGVlKHN5bmNocm9uaXplZFRlZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWVwbHlGdWxmaWxsZWRPYmplY3QiOlsiZGVlcGx5RnVsZmlsbGVkT2JqZWN0Il0sIlByb21pc2VBbGxPckVycm9ycyI6WyJQcm9taXNlQWxsT3JFcnJvcnMiXSwiYWdncmVnYXRlVHJ5RmluYWxseSI6WyJhZ2dyZWdhdGVUcnlGaW5hbGx5Il0sIndpdGhEZWZlcnJlZENsZWFudXAiOlsid2l0aERlZmVycmVkQ2xlYW51cCJdLCJhc3NlcnRBbGxEZWZpbmVkIjpbImFzc2VydEFsbERlZmluZWQiXSwiZm9yZXZlciI6WyJmb3JldmVyIl0sIndoaWxlVHJ1ZSI6WyJ3aGlsZVRydWUiXSwidW50aWxUcnVlIjpbInVudGlsVHJ1ZSJdLCJ6aXAiOlsiemlwIl0sImFsbFZhbHVlcyI6WyJhbGxWYWx1ZXMiXSwic3luY2hyb25pemVkVGVlIjpbInN5bmNocm9uaXplZFRlZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHqlog/QIAAP0CAAA+AAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlQ2hlY2suanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJjYXN0IiwibXVzdE1hdGNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHR5cGVsZXNzTXVzdE1hdGNoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+ICh0eXBlbGVzc011c3RNYXRjaCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG11c3RNYXRjaD10eXBlbGVzc011c3RNYXRjaDtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpO1xuY29uc3QgICAgICAgIGNhc3Q9KHNwZWNpbWVuLHBhdHQpPT57XG4vL1xuLy9cbi8vXG5tdXN0TWF0Y2goc3BlY2ltZW4scGF0dCk7XG5yZXR1cm4gc3BlY2ltZW47XG4gfTskaM2PX29uY2UuY2FzdChjYXN0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im11c3RNYXRjaCI6WyJtdXN0TWF0Y2giXSwiY2FzdCI6WyJjYXN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKKVARBOAwAATgMAAD8AAABAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJTdG9yYWdlTm9kZVNoYXBlIiwiVW5ndWFyZGVkSGVscGVySSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5jb25zdCAgICAgICAgU3RvcmFnZU5vZGVTaGFwZT1NLnJlbW90YWJsZSgnU3RvcmFnZU5vZGUnKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlN0b3JhZ2VOb2RlU2hhcGUoU3RvcmFnZU5vZGVTaGFwZSk7XG5jb25zdCAgICAgICAgVW5ndWFyZGVkSGVscGVyST1NLmludGVyZmFjZShcbidoZWxwZXInLFxue30sXG4vL1xue3Nsb3BweTp0cnVlfSk7JGjNj19vbmNlLlVuZ3VhcmRlZEhlbHBlckkoVW5ndWFyZGVkSGVscGVySSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJTdG9yYWdlTm9kZVNoYXBlIjpbIlN0b3JhZ2VOb2RlU2hhcGUiXSwiVW5ndWFyZGVkSGVscGVySSI6WyJVbmd1YXJkZWRIZWxwZXJJIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAAEAAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3R5cGVzLWluZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADIQNAGlA0AAJQNAAA3AAAAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyIsIi4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsIkBlbmRvL2V4byIsIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyIsIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLCIuL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5IiwiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyIsIm11c3RNYXRjaCIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHR5cGVsZXNzTXVzdE1hdGNoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+ICh0eXBlbGVzc011c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3N0b3JlLXV0aWxzLmpzXCIsIFtdXSxbXCJAZW5kby9leG9cIiwgW11dLFtcIi4vbGVnYWN5L2xlZ2FjeU1hcC5qc1wiLCBbXV0sW1wiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qc1wiLCBbXV0sW1wiLi90eXBlcy5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtdXN0TWF0Y2g9dHlwZWxlc3NNdXN0TWF0Y2g7JGjNj19vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzIjpbWyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIiwibWFrZVNjYWxhcldlYWtTZXRTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiOltbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTY2FsYXJTZXRTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIjpbWyJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhcldlYWtNYXBTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiOltbIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdXSwiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanMiOltbInByb3ZpZGVMYXp5IiwicHJvdmlkZUxhenkiXV0sIkBlbmRvL3BhdHRlcm5zIjpbWyJpc0tleSIsImlzS2V5Il0sWyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiXSxbImFzc2VydFNjYWxhcktleSIsImFzc2VydFNjYWxhcktleSJdLFsibWFrZUNvcHlTZXQiLCJtYWtlQ29weVNldCJdLFsiZ2V0Q29weVNldEtleXMiLCJnZXRDb3B5U2V0S2V5cyJdLFsibWFrZUNvcHlCYWciLCJtYWtlQ29weUJhZyJdLFsibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLFsiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5QmFnRW50cmllcyJdLFsibWFrZUNvcHlNYXAiLCJtYWtlQ29weU1hcCJdLFsiZ2V0Q29weU1hcEVudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyJdLFsiY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXSxbImNvZXJjZVRvQmFnRW50cmllcyIsImNvZXJjZVRvQmFnRW50cmllcyJdLFsiY29tcGFyZUtleXMiLCJjb21wYXJlS2V5cyJdLFsia2V5TFQiLCJrZXlMVCJdLFsia2V5TFRFIiwia2V5TFRFIl0sWyJrZXlFUSIsImtleUVRIl0sWyJrZXlHVEUiLCJrZXlHVEUiXSxbImtleUdUIiwia2V5R1QiXSxbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSJdLFsic2V0VW5pb24iLCJzZXRVbmlvbiJdLFsic2V0RGlzam9pbnRVbmlvbiIsInNldERpc2pvaW50VW5pb24iXSxbInNldEludGVyc2VjdGlvbiIsInNldEludGVyc2VjdGlvbiJdLFsic2V0RGlzam9pbnRTdWJ0cmFjdCIsInNldERpc2pvaW50U3VidHJhY3QiXSxbImJhZ0lzU3VwZXJiYWciLCJiYWdJc1N1cGVyYmFnIl0sWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdLFsiTSIsIk0iXSxbImdldFJhbmtDb3ZlciIsImdldFJhbmtDb3ZlciJdLFsiaXNQYXR0ZXJuIiwiaXNQYXR0ZXJuIl0sWyJhc3NlcnRQYXR0ZXJuIiwiYXNzZXJ0UGF0dGVybiJdLFsibWF0Y2hlcyIsIm1hdGNoZXMiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiaXNDb3B5TWFwIiwiaXNDb3B5TWFwIl1dLCJAZW5kby9leG8iOltbImluaXRFbXB0eSIsImluaXRFbXB0eSJdLFsiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyJdLFsiZGVmaW5lRXhvQ2xhc3NLaXQiLCJkZWZpbmVFeG9DbGFzc0tpdCJdLFsibWFrZUV4byIsIm1ha2VFeG8iXV0sIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyI6W1sibWFrZUxlZ2FjeU1hcCIsIm1ha2VMZWdhY3lNYXAiXV0sIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiOltbIm1ha2VMZWdhY3lXZWFrTWFwIiwibWFrZUxlZ2FjeVdlYWtNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADwIquuNQUAADUFAABCAAAAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9sZWdhY3kvbGVnYWN5TWFwLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VMZWdhY3lNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUxlZ2FjeU1hcD0odGFnPSdrZXknKT0+e1xuY29uc3QgbT1uZXcgTWFwKCk7XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIW0uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxubS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IG5vdCBmb3VuZDogJHtrZXl9YDtcbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4gbS5oYXMoa2V5KTtcbiB9LFxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5tLnNldChrZXksdmFsdWUpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xucmV0dXJuIG0uZ2V0KGtleSk7XG4gfSxcbnNldDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5tLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xubS5kZWxldGUoa2V5KTtcbiB9LFxua2V5czooKT0+bS5rZXlzKCksXG52YWx1ZXM6KCk9Pm0udmFsdWVzKCksXG5lbnRyaWVzOigpPT5tLmVudHJpZXMoKSxcbmdldFNpemU6KCk9Pm0uc2l6ZSxcbmNsZWFyOigpPT5tLmNsZWFyKCl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VMZWdhY3lNYXAobWFrZUxlZ2FjeU1hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeU1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTGVnYWN5TWFwIjpbIm1ha2VMZWdhY3lNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAusRN7fcEAAD3BAAARgAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZUxlZ2FjeVdlYWtNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMZWdhY3lXZWFrTWFwPSh0YWc9J2tleScpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3bT1uZXcgV2Vha01hcCgpO1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiF3bS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG53bS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IG5vdCBmb3VuZDogJHtrZXl9YDtcbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4gd20uaGFzKGtleSk7XG4gfSxcbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xud20uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmdldDooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICovd20uZ2V0KGtleSkpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xud20uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG53bS5kZWxldGUoa2V5KTtcbiB9fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTGVnYWN5V2Vha01hcChtYWtlTGVnYWN5V2Vha01hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeVdlYWtNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUxlZ2FjeVdlYWtNYXAiOlsibWFrZUxlZ2FjeVdlYWtNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAO148gpwQAACcEAAARwAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiLCIuL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsIi4vc3RvcmUtdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlTWFwU3RvcmVNZXRob2RzIiwibWFrZVNjYWxhck1hcFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFyLGFzc2VydFBhc3NhYmxlLGZpbHRlckl0ZXJhYmxlLG1hcEl0ZXJhYmxlLGNvbXBhcmVSYW5rLGFzc2VydFNjYWxhcktleSxtYWtlQ29weU1hcCxtYXRjaGVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzLG1ha2VDdXJyZW50S2V5c0tpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjNj19hID0+IChmaWx0ZXJJdGVyYWJsZSA9ICRozY9fYSldXSxbXCJtYXBJdGVyYWJsZVwiLCBbJGjNj19hID0+IChtYXBJdGVyYWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImFzc2VydFNjYWxhcktleVwiLCBbJGjNj19hID0+IChhc3NlcnRTY2FsYXJLZXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiLi9zY2FsYXJXZWFrTWFwU3RvcmUuanNcIiwgW1tcIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzXCIsIFskaM2PX2EgPT4gKG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZS11dGlscy5qc1wiLCBbW1wibWFrZUN1cnJlbnRLZXlzS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VDdXJyZW50S2V5c0tpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXBTdG9yZU1ldGhvZHM9KFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbnRhZz0na2V5Jyk9Plxue1xuY29uc3R7YXNzZXJ0VXBkYXRlT25BZGQsYXNzZXJ0VXBkYXRlT25EZWxldGUsaXRlcmFibGVLZXlzfT1cbm1ha2VDdXJyZW50S2V5c0tpdChcbigpPT5qc21hcC5rZXlzKCksXG4oayk9PmpzbWFwLmhhcyhrKSxcbmNvbXBhcmVSYW5rLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZSxcbnRhZyk7XG5cblxuLypcblxuXG5cbiAgICovXG5jb25zdCBrZXlzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+e1xuaWYoa2V5UGF0dD09PXVuZGVmaW5lZCYmdmFsdWVQYXR0PT09dW5kZWZpbmVkKXtcbnJldHVybiBpdGVyYWJsZUtleXM7XG4gfVxuY29uc3QgZmlsdGVyPShrKT0+e1xuaWYoa2V5UGF0dCE9PXVuZGVmaW5lZCYmIW1hdGNoZXMoayxrZXlQYXR0KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbmlmKHZhbHVlUGF0dCE9PXVuZGVmaW5lZCYmIW1hdGNoZXMoanNtYXAuZ2V0KGspLHZhbHVlUGF0dCkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnJldHVybiB0cnVlO1xuIH07XG5yZXR1cm4gZmlsdGVySXRlcmFibGUoaXRlcmFibGVLZXlzLGZpbHRlcik7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCB2YWx1ZXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbm1hcEl0ZXJhYmxlKGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpLChrKT0+LyogICAgICAgICAgICAqL2pzbWFwLmdldChrKSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgZW50cmllcz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFwSXRlcmFibGUoa2V5cyhrZXlQYXR0LHZhbHVlUGF0dCksKGspPT5bXG5rLFxuLyogICAgICAgICAgICAqL2pzbWFwLmdldChrKV0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuLi4ubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMoXG5qc21hcCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbnRhZyksXG5cbmtleXMsXG52YWx1ZXMsXG5lbnRyaWVzLFxuXG5zbmFwc2hvdDooa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFrZUNvcHlNYXAoZW50cmllcyhrZXlQYXR0LHZhbHVlUGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5rZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQ/XG5qc21hcC5zaXplOlxuWy4uLmtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+e1xuaWYoa2V5UGF0dD09PXVuZGVmaW5lZCYmdmFsdWVQYXR0PT09dW5kZWZpbmVkKXtcbmpzbWFwLmNsZWFyKCk7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiBrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSl7XG5qc21hcC5kZWxldGUoa2V5KTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VNYXBTdG9yZU1ldGhvZHMobWFrZU1hcFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhck1hcFN0b3JlPShcbnRhZz0na2V5JyxcbntrZXlTaGFwZT11bmRlZmluZWQsdmFsdWVTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc21hcD1uZXcgTWFwKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4odmFsdWVTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLVk9rVG9TZXQ9KF9rZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbih2YWx1ZSk7XG5cbmFzc2VydFBhc3NhYmxlKHZhbHVlKTtcbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUsJ21hcFN0b3JlIHZhbHVlJyk7XG4gfVxuIH07XG5cbmNvbnN0IGFzc2VydEtWT2tUb0FkZD0oa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4oa2V5KTtcblxuYXNzZXJ0U2NhbGFyS2V5KGtleSk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2goa2V5LGtleVNoYXBlLCdtYXBTdG9yZSBrZXknKTtcbiB9XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIE1hcFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZU1hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxudW5kZWZpbmVkLFxudGFnKX0pO1xuXG5cbiB9OyRozY9fb25jZS5tYWtlU2NhbGFyTWFwU3RvcmUobWFrZVNjYWxhck1hcFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyTWFwU3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1hcFN0b3JlTWV0aG9kcyI6WyJtYWtlTWFwU3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJNYXBTdG9yZSI6WyJtYWtlU2NhbGFyTWFwU3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmCzfJc0LAADNCwAARwAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiLCIuL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmUtdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyU2V0U3RvcmUiLCJtYWtlU2V0U3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFyLGZpbHRlckl0ZXJhYmxlLGNvbXBhcmVSYW5rLGFzc2VydFNjYWxhcktleSxtYWtlQ29weVNldCxtYXRjaGVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzLG1ha2VDdXJyZW50S2V5c0tpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjNj19hID0+IChmaWx0ZXJJdGVyYWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImFzc2VydFNjYWxhcktleVwiLCBbJGjNj19hID0+IChhc3NlcnRTY2FsYXJLZXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlTZXQgPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanNcIiwgW1tcIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzXCIsIFskaM2PX2EgPT4gKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZS11dGlscy5qc1wiLCBbW1wibWFrZUN1cnJlbnRLZXlzS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VDdXJyZW50S2V5c0tpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNldFN0b3JlTWV0aG9kcz0oXG5qc3NldCxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0e2Fzc2VydFVwZGF0ZU9uQWRkLGFzc2VydFVwZGF0ZU9uRGVsZXRlLGl0ZXJhYmxlS2V5c309XG5tYWtlQ3VycmVudEtleXNLaXQoXG4oKT0+anNzZXQua2V5cygpLFxuKGspPT5qc3NldC5oYXMoayksXG5jb21wYXJlUmFuayxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxua2V5TmFtZSk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qga2V5cz0oa2V5UGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQ/XG5pdGVyYWJsZUtleXM6XG5maWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsKGspPT5tYXRjaGVzKGssa2V5UGF0dCkpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKFxuanNzZXQsXG5hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxua2V5TmFtZSksXG5cblxua2V5cyxcblxudmFsdWVzOmtleXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCk9Pm1ha2VDb3B5U2V0KGtleXMoa2V5UGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCk9Plxua2V5UGF0dD09PXVuZGVmaW5lZD9qc3NldC5zaXplOlsuLi5rZXlzKGtleVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCk9PntcbmlmKGtleVBhdHQ9PT11bmRlZmluZWQpe1xuanNzZXQuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCkpe1xuanNzZXQuZGVsZXRlKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTZXRTdG9yZU1ldGhvZHMobWFrZVNldFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhclNldFN0b3JlPShcbnRhZz0na2V5JyxcbntrZXlTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc3NldD1uZXcgU2V0KCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5cbmFzc2VydFNjYWxhcktleShrZXkpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnc2V0U3RvcmUga2V5Jyk7XG4gfVxuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgU2V0U3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJTZXRTdG9yZShtYWtlU2NhbGFyU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU2V0U3RvcmVNZXRob2RzIjpbIm1ha2VTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhclNldFN0b3JlIjpbIm1ha2VTY2FsYXJTZXRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADpDjncsA0AALANAABLAAAAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsRmFyLGFzc2VydFBhc3NhYmxlLHBhc3NTdHlsZU9mLGdldENvcHlNYXBFbnRyaWVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLGlzQ29weU1hcDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0Q29weU1hcEVudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJpZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV0sW1wiaXNDb3B5TWFwXCIsIFskaM2PX2EgPT4gKGlzQ29weU1hcCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzPShcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIWpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcblxuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbmpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IG5vdCBmb3VuZDogJHtrZXl9YDtcblxucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBqc21hcC5oYXMoa2V5KTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi9qc21hcC5nZXQoa2V5KSk7XG4gfSxcblxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuYXNzZXJ0S1ZPa1RvU2V0KGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmlmKGFzc2VydEtleU9rVG9EZWxldGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0S2V5T2tUb0RlbGV0ZShrZXkpO1xuIH1cbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH0sXG5cbmFkZEFsbDooZW50cmllcyk9PntcbmlmKHR5cGVvZiBlbnRyaWVzW1N5bWJvbC5pdGVyYXRvcl0hPT0nZnVuY3Rpb24nKXtcbmlmKE9iamVjdC5pc0Zyb3plbihlbnRyaWVzKSYmaXNDb3B5TWFwKGVudHJpZXMpKXtcbi8vXG5lbnRyaWVzPWdldENvcHlNYXBFbnRyaWVzKGVudHJpZXMpO1xuIH1lbHNle1xuRmFpbCBgcHJvdmlkZWQgZGF0YSBzb3VyY2UgaXMgbm90IGl0ZXJhYmxlOiAke2VudHJpZXN9YDtcbiB9XG4gfVxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9lbnRyaWVzKXtcbi8vXG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMobWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJXZWFrTWFwU3RvcmU9KFxudGFnPSdrZXknLFxue2xvbmdMaXZlZD10cnVlLGtleVNoYXBlPXVuZGVmaW5lZCx2YWx1ZVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzbWFwPW5ldyhsb25nTGl2ZWQ/V2Vha01hcDpNYXApKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4odmFsdWVTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLVk9rVG9TZXQ9KF9rZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbih2YWx1ZSk7XG5cbmFzc2VydFBhc3NhYmxlKHZhbHVlKTtcbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUsJ3dlYWtNYXBTdG9yZSB2YWx1ZScpO1xuIH1cbiB9O1xuXG5jb25zdCBhc3NlcnRLVk9rVG9BZGQ9KGtleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5wYXNzU3R5bGVPZihrZXkpPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgT25seSByZW1vdGFibGVzIGNhbiBiZSBrZXlzIG9mIHNjYWxhciBXZWFrTWFwU3RvcmVzOiAke2tleX1gO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnd2Vha01hcFN0b3JlIGtleScpO1xuIH1cbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgV2Vha01hcFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMoXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbnVuZGVmaW5lZCxcbnRhZyl9KTtcblxuXG4gfTskaM2PX29uY2UubWFrZVNjYWxhcldlYWtNYXBTdG9yZShtYWtlU2NhbGFyV2Vha01hcFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyV2Vha01hcFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIjpbIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiOlsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABUfScVcwoAAHMKAABLAAAAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsRmFyLHBhc3NTdHlsZU9mLGdldENvcHlTZXRLZXlzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLGlzQ29weVNldDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0Q29weVNldEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV0sW1wiaXNDb3B5U2V0XCIsIFskaM2PX2EgPT4gKGlzQ29weVNldCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzPShcbmpzc2V0LFxuYXNzZXJ0S2V5T2tUb0FkZCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbmpzc2V0LmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IG5vdCBmb3VuZDogJHtrZXl9YDtcblxucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBqc3NldC5oYXMoa2V5KTtcbiB9LFxuXG5hZGQ6KGtleSk9PntcbmFzc2VydEtleU9rVG9BZGQoa2V5KTtcbmpzc2V0LmFkZChrZXkpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuaWYoYXNzZXJ0S2V5T2tUb0RlbGV0ZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRLZXlPa1RvRGVsZXRlKGtleSk7XG4gfVxuanNzZXQuZGVsZXRlKGtleSk7XG4gfSxcblxuYWRkQWxsOihrZXlzKT0+e1xuaWYodHlwZW9mIGtleXNbU3ltYm9sLml0ZXJhdG9yXSE9PSdmdW5jdGlvbicpe1xuaWYoT2JqZWN0LmlzRnJvemVuKGtleXMpJiZpc0NvcHlTZXQoa2V5cykpe1xuLy9cbmtleXM9Z2V0Q29weVNldEtleXMoa2V5cyk7XG4gfWVsc2V7XG5GYWlsIGBwcm92aWRlZCBkYXRhIHNvdXJjZSBpcyBub3QgaXRlcmFibGU6ICR7a2V5c31gO1xuIH1cbiB9XG5mb3IoY29uc3Qga2V5IG9mLyogICAgICAgICAgICAgICAgICAgICAgKi9rZXlzKXtcbmFzc2VydEtleU9rVG9BZGQoa2V5KTtcbmpzc2V0LmFkZChrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyV2Vha1NldFN0b3JlPShcbnRhZz0na2V5Jyxcbntsb25nTGl2ZWQ9dHJ1ZSxrZXlTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc3NldD1uZXcobG9uZ0xpdmVkP1dlYWtTZXQ6U2V0KSgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLZXlPa1RvQWRkPShrZXkpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xucGFzc1N0eWxlT2Yoa2V5KT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYE9ubHkgcmVtb3RhYmxlcyBjYW4gYmUga2V5cyBvZiBzY2FsYXIgV2Vha1N0b3JlczogJHtrZXl9YDtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3dlYWtTZXRTdG9yZSBrZXknKTtcbiB9XG4gfTtcblxucmV0dXJuIEZhciggYHNjYWxhciBXZWFrU2V0U3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlV2Vha1NldFN0b3JlTWV0aG9kcyhqc3NldCxhc3NlcnRLZXlPa1RvQWRkLHVuZGVmaW5lZCx0YWcpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlU2NhbGFyV2Vha1NldFN0b3JlKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiOlsibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhcldlYWtTZXRTdG9yZSI6WyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHnbC4erDgAAqw4AAEQAAABAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJhcHBlbmRUb1N0b3JlZEFycmF5IiwiaXNDb3B5TWFwIiwiaXNDb3B5U2V0IiwibWFrZUF0b21pY1Byb3ZpZGVyIiwibWFrZUN1cnJlbnRLZXlzS2l0IiwicHJvdmlkZUxhenkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEZhcixNLG1hdGNoZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9Pm1hdGNoZXMocyxNLnNldCgpKTtcblxuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9Pm1hdGNoZXMobSxNLm1hcCgpKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzQ29weU1hcChpc0NvcHlNYXApO1xuY29uc3QgICAgICAgIG1ha2VDdXJyZW50S2V5c0tpdD0oXG5nZXRSYXdLZXlzLFxuY2hlY2tIYXMsXG5jb21wYXJlLFxuYXNzZXJ0T2tUb0FkZCxcbmFzc2VydE9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xubGV0IHVwZGF0ZUNvdW50PTA7XG5sZXQgc29ydGVkS2V5c01lbW87XG5cbmNvbnN0IGFzc2VydFVwZGF0ZU9uQWRkPShrLHY9dW5kZWZpbmVkKT0+e1xuYXNzZXJ0T2tUb0FkZChrLHYpO1xudXBkYXRlQ291bnQrPTE7XG5zb3J0ZWRLZXlzTWVtbz11bmRlZmluZWQ7XG4gfTtcblxuY29uc3QgYXNzZXJ0VXBkYXRlT25EZWxldGU9KGspPT5hc3NlcnRPa1RvRGVsZXRlJiZhc3NlcnRPa1RvRGVsZXRlKGspO1xuXG5jb25zdCBnZXRTb3J0ZWRLZXlzPSgpPT57XG5pZihzb3J0ZWRLZXlzTWVtbz09PXVuZGVmaW5lZCl7XG5zb3J0ZWRLZXlzTWVtbz1oYXJkZW4oWy4uLmdldFJhd0tleXMoKV0uc29ydChjb21wYXJlKSk7XG4gfVxucmV0dXJuIHNvcnRlZEtleXNNZW1vO1xuIH07XG5cbmNvbnN0IGl0ZXJhYmxlS2V5cz1GYXIoJ0l0ZXJhYmxlIG9mIGtleXMnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBnZW5lcmF0aW9uPXVwZGF0ZUNvdW50O1xuZ2V0U29ydGVkS2V5cygpO1xuY29uc3QgbGVuPXNvcnRlZEtleXNNZW1vLmxlbmd0aDtcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdJdGVyYXRvciBvZiBrZXlzJyx7XG5uZXh0OigpPT57XG5nZW5lcmF0aW9uPT09dXBkYXRlQ291bnR8fEZhaWwgYFN0b3JlICR7cShrZXlOYW1lKX0gY3Vyc29yIHN0YWxlYDtcbi8vXG4vL1xuZm9yKDs7KXtcbmlmKGk8bGVuKXtcbmNvbnN0IHZhbHVlPXNvcnRlZEtleXNNZW1vW2ldO1xuaSs9MTtcbmlmKGNoZWNrSGFzKHZhbHVlKSl7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH1cbiB9XG4gfX0pO1xuXG4gfX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbml0ZXJhYmxlS2V5c30pO1xuXG4gfTskaM2PX29uY2UubWFrZUN1cnJlbnRLZXlzS2l0KG1ha2VDdXJyZW50S2V5c0tpdCk7XG5oYXJkZW4obWFrZUN1cnJlbnRLZXlzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJvdmlkZUxhenk9KG1hcFN0b3JlLGtleSxtYWtlVmFsdWUpPT57XG5pZighbWFwU3RvcmUuaGFzKGtleSkpe1xubWFwU3RvcmUuaW5pdChrZXksbWFrZVZhbHVlKGtleSkpO1xuIH1cbnJldHVybiBtYXBTdG9yZS5nZXQoa2V5KTtcbiB9OyRozY9fb25jZS5wcm92aWRlTGF6eShwcm92aWRlTGF6eSk7XG5oYXJkZW4ocHJvdmlkZUxhenkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXRvbWljUHJvdmlkZXI9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwZW5kaW5nPW5ldyBNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUFzeW5jPShrZXksbWFrZVZhbHVlLGZpbmlzaFZhbHVlKT0+e1xuaWYoc3RvcmUuaGFzKGtleSkpe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShzdG9yZS5nZXQoa2V5KSk7XG4gfVxuaWYoIXBlbmRpbmcuaGFzKGtleSkpe1xuY29uc3QgdmFsUD1tYWtlVmFsdWUoa2V5KS5cbnRoZW4oKHYpPT57XG5zdG9yZS5pbml0KGtleSx2KTtcbnJldHVybiB2O1xuIH0pLlxudGhlbigodik9PntcbmlmKGZpbmlzaFZhbHVlKXtcbnJldHVybiBmaW5pc2hWYWx1ZShrZXksdikudGhlbigoKT0+dik7XG4gfVxucmV0dXJuIHY7XG4gfSkuXG5maW5hbGx5KCgpPT57XG5wZW5kaW5nLmRlbGV0ZShrZXkpO1xuIH0pO1xucGVuZGluZy5zZXQoa2V5LHZhbFApO1xuIH1cbmNvbnN0IHZhbFA9cGVuZGluZy5nZXQoa2V5KTtcbmFzc2VydCh2YWxQKTtcbnJldHVybiB2YWxQO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Byb3ZpZGVBc3luY30pO1xuIH07JGjNj19vbmNlLm1ha2VBdG9taWNQcm92aWRlcihtYWtlQXRvbWljUHJvdmlkZXIpO1xuaGFyZGVuKG1ha2VBdG9taWNQcm92aWRlcik7XG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXBwZW5kVG9TdG9yZWRBcnJheT0obWFwU3RvcmUsa2V5LGl0ZW0pPT57XG5pZihtYXBTdG9yZS5oYXMoa2V5KSl7XG5jb25zdCBleHRhbnQ9bWFwU3RvcmUuZ2V0KGtleSk7XG5tYXBTdG9yZS5zZXQoa2V5LGhhcmRlbihbLi4uZXh0YW50LGl0ZW1dKSk7XG4gfWVsc2V7XG5tYXBTdG9yZS5pbml0KGtleSxoYXJkZW4oW2l0ZW1dKSk7XG4gfVxuIH07JGjNj19vbmNlLmFwcGVuZFRvU3RvcmVkQXJyYXkoYXBwZW5kVG9TdG9yZWRBcnJheSk7XG5oYXJkZW4oYXBwZW5kVG9TdG9yZWRBcnJheSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlTZXQiOlsiaXNDb3B5U2V0Il0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwibWFrZUN1cnJlbnRLZXlzS2l0IjpbIm1ha2VDdXJyZW50S2V5c0tpdCJdLCJwcm92aWRlTGF6eSI6WyJwcm92aWRlTGF6eSJdLCJtYWtlQXRvbWljUHJvdmlkZXIiOlsibWFrZUF0b21pY1Byb3ZpZGVyIl0sImFwcGVuZFRvU3RvcmVkQXJyYXkiOlsiYXBwZW5kVG9TdG9yZWRBcnJheSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAA3AAAAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVOJbuMcEAADHBAAAKwAAAEBlbmRvL2NvbW1vbi12MS4yLjgvYXBwbHktbGFiZWxpbmctZXJyb3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi90aHJvdy1sYWJlbGVkLmpzIl0sImV4cG9ydHMiOlsiYXBwbHlMYWJlbGluZ0Vycm9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsaXNQcm9taXNlLHRocm93TGFiZWxlZDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiLi90aHJvdy1sYWJlbGVkLmpzXCIsIFtbXCJ0aHJvd0xhYmVsZWRcIiwgWyRozY9fYSA9PiAodGhyb3dMYWJlbGVkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFwcGx5TGFiZWxpbmdFcnJvcj0oZnVuYyxhcmdzLGxhYmVsPXVuZGVmaW5lZCk9PntcbmlmKGxhYmVsPT09dW5kZWZpbmVkKXtcbnJldHVybiBmdW5jKC4uLmFyZ3MpO1xuIH1cbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbnRocm93TGFiZWxlZChlcnIsbGFiZWwpO1xuIH1cbmlmKGlzUHJvbWlzZShyZXN1bHQpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBFLndoZW4ocmVzdWx0LHVuZGVmaW5lZCwocmVhc29uKT0+dGhyb3dMYWJlbGVkKHJlYXNvbixsYWJlbCkpO1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfTskaM2PX29uY2UuYXBwbHlMYWJlbGluZ0Vycm9yKGFwcGx5TGFiZWxpbmdFcnJvcik7XG5oYXJkZW4oYXBwbHlMYWJlbGluZ0Vycm9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFwcGx5TGFiZWxpbmdFcnJvciI6WyJhcHBseUxhYmVsaW5nRXJyb3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkAZXhlwEAABcBAAAKgAAAEBlbmRvL2NvbW1vbi12MS4yLjgvZnJvbS11bmlxdWUtZW50cmllcy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJmcm9tVW5pcXVlRW50cmllcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtmcm9tRW50cmllc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZnJvbVVuaXF1ZUVudHJpZXM9KGFsbEVudHJpZXMpPT57XG5jb25zdCBlbnRyaWVzQXJyYXk9Wy4uLmFsbEVudHJpZXNdO1xuY29uc3QgcmVzdWx0PWhhcmRlbihmcm9tRW50cmllcyhlbnRyaWVzQXJyYXkpKTtcbmlmKG93bktleXMocmVzdWx0KS5sZW5ndGg9PT1lbnRyaWVzQXJyYXkubGVuZ3RoKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuY29uc3QgbmFtZXM9bmV3IFNldCgpO1xuZm9yKGNvbnN0W25hbWUsX11vZiBlbnRyaWVzQXJyYXkpe1xuaWYobmFtZXMuaGFzKG5hbWUpKXtcbkZhaWwgYGNvbGxpc2lvbiBvbiBwcm9wZXJ0eSBuYW1lICR7cShuYW1lKX06ICR7ZW50cmllc0FycmF5fWA7XG4gfVxubmFtZXMuYWRkKG5hbWUpO1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBmYWlsZWQgdG8gY3JlYXRlIG9iamVjdCBmcm9tIHVuaXF1ZSBlbnRyaWVzYDtcbiB9OyRozY9fb25jZS5mcm9tVW5pcXVlRW50cmllcyhmcm9tVW5pcXVlRW50cmllcyk7XG5oYXJkZW4oZnJvbVVuaXF1ZUVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZnJvbVVuaXF1ZUVudHJpZXMiOlsiZnJvbVVuaXF1ZUVudHJpZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAUXMNpDcCAAA3AgAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjgvaWRlbnQtY2hlY2tlci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaWRlbnRDaGVja2VyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaWRlbnRDaGVja2VyPShjb25kLF9kZXRhaWxzKT0+Y29uZDskaM2PX29uY2UuaWRlbnRDaGVja2VyKGlkZW50Q2hlY2tlcik7XG5oYXJkZW4oaWRlbnRDaGVja2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlkZW50Q2hlY2tlciI6WyJpZGVudENoZWNrZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAYVj+hngCAAB4AgAAJgAAAEBlbmRvL2NvbW1vbi12MS4yLjgvbGlzdC1kaWZmZXJlbmNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJsaXN0RGlmZmVyZW5jZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGxpc3REaWZmZXJlbmNlPShsZWZ0TGlzdCxyaWdodExpc3QpPT57XG5jb25zdCByaWdodFNldD1uZXcgU2V0KHJpZ2h0TGlzdCk7XG5yZXR1cm4gbGVmdExpc3QuZmlsdGVyKChlbGVtZW50KT0+IXJpZ2h0U2V0LmhhcyhlbGVtZW50KSk7XG4gfTskaM2PX29uY2UubGlzdERpZmZlcmVuY2UobGlzdERpZmZlcmVuY2UpO1xuaGFyZGVuKGxpc3REaWZmZXJlbmNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imxpc3REaWZmZXJlbmNlIjpbImxpc3REaWZmZXJlbmNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA+bwKhdAwAAXQMAACoAAABAZW5kby9jb21tb24tdjEuMi44L21ha2UtYXJyYXktaXRlcmF0b3IuanN7ImltcG9ydHMiOlsiLi9tYWtlLWl0ZXJhdG9yLmpzIl0sImV4cG9ydHMiOlsibWFrZUFycmF5SXRlcmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZUl0ZXJhdG9yOyRozY9faW1wb3J0cyhbW1wiLi9tYWtlLWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlSXRlcmF0b3JcIiwgWyRozY9fYSA9PiAobWFrZUl0ZXJhdG9yID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXJyYXlJdGVyYXRvcj0oYXJyKT0+e1xuY29uc3R7bGVuZ3RofT1hcnI7XG5sZXQgaT0wO1xucmV0dXJuIG1ha2VJdGVyYXRvcigoKT0+e1xuLyogICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoaTxsZW5ndGgpe1xudmFsdWU9YXJyW2ldO1xuaSs9MTtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9XG4vL1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlfSk7XG4gfSk7XG4gfTskaM2PX29uY2UubWFrZUFycmF5SXRlcmF0b3IobWFrZUFycmF5SXRlcmF0b3IpO1xuaGFyZGVuKG1ha2VBcnJheUl0ZXJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VBcnJheUl0ZXJhdG9yIjpbIm1ha2VBcnJheUl0ZXJhdG9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFaLCeM5AgAAOQIAACQAAABAZW5kby9jb21tb24tdjEuMi44L21ha2UtaXRlcmF0b3IuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VJdGVyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSXRlcmF0b3I9KG5leHQpPT57XG5jb25zdCBpdGVyPWhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+aXRlcixcbm5leHR9KTtcblxucmV0dXJuIGl0ZXI7XG4gfTskaM2PX29uY2UubWFrZUl0ZXJhdG9yKG1ha2VJdGVyYXRvcik7XG5oYXJkZW4obWFrZUl0ZXJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJdGVyYXRvciI6WyJtYWtlSXRlcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAArVcGfgIDAAACAwAAIQAAAEBlbmRvL2NvbW1vbi12MS4yLjgvb2JqZWN0LW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBjb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1hcD0ob3JpZ2luYWwsbWFwRm4pPT57XG5jb25zdCBlbnRzPWVudHJpZXMob3JpZ2luYWwpO1xuY29uc3QgbWFwRW50cz1lbnRzLm1hcChcbihbayx2XSk9Pi8qICAgICAgICAgICAgICAgICAgICAgICAqL1trLG1hcEZuKHYsayldKTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cykpKTtcbiB9OyRozY9fb25jZS5vYmplY3RNYXAob2JqZWN0TWFwKTtcbmhhcmRlbihvYmplY3RNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsib2JqZWN0TWFwIjpbIm9iamVjdE1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA7n1+O4QMAAOEDAAAmAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9vYmplY3QtbWV0YS1tYXAuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm9iamVjdE1ldGFNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIGNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsY3JlYXRlLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1ldGFNYXA9KFxub3JpZ2luYWwsXG5tZXRhTWFwRm4sXG5wcm90bz1PYmplY3QucHJvdG90eXBlKT0+XG57XG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9yaWdpbmFsKTtcbmNvbnN0IGtleXM9b3duS2V5cyhvcmlnaW5hbCk7XG5cbmNvbnN0IGRlc2NFbnRyaWVzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmtleXMuXG5tYXAoKGtleSk9PltrZXksbWV0YU1hcEZuKGRlc2NzW2tleV0sa2V5KV0pLlxuZmlsdGVyKChbX2tleSxvcHREZXNjXSk9Pm9wdERlc2MhPT11bmRlZmluZWQpO1xuXG5yZXR1cm4gaGFyZGVuKGNyZWF0ZShwcm90byxmcm9tRW50cmllcyhkZXNjRW50cmllcykpKTtcbiB9OyRozY9fb25jZS5vYmplY3RNZXRhTWFwKG9iamVjdE1ldGFNYXApO1xuaGFyZGVuKG9iamVjdE1ldGFNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsib2JqZWN0TWV0YU1hcCI6WyJvYmplY3RNZXRhTWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMICGsvhAwAA4QMAACQAAABAZW5kby9jb21tb24tdjEuMi44L3Rocm93LWxhYmVsZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsidGhyb3dMYWJlbGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsbWFrZUVycm9yLGFubm90YXRlRXJyb3I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0aHJvd0xhYmVsZWQ9KFxuaW5uZXJFcnIsXG5sYWJlbCxcbmVyckNvbnN0cnVjdG9yPXVuZGVmaW5lZCxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG57XG5pZih0eXBlb2YgbGFiZWw9PT0nbnVtYmVyJyl7XG5sYWJlbD0gYFske2xhYmVsfV1gO1xuIH1cbmNvbnN0IG91dGVyRXJyPW1ha2VFcnJvcihcbiBgJHtsYWJlbH06ICR7aW5uZXJFcnIubWVzc2FnZX1gLFxuZXJyQ29uc3RydWN0b3IsXG5vcHRpb25zKTtcblxuYW5ub3RhdGVFcnJvcihvdXRlckVycixYIGBDYXVzZWQgYnkgJHtpbm5lckVycn1gKTtcbnRocm93IG91dGVyRXJyO1xuIH07JGjNj19vbmNlLnRocm93TGFiZWxlZCh0aHJvd0xhYmVsZWQpO1xuaGFyZGVuKHRocm93TGFiZWxlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0aHJvd0xhYmVsZWQiOlsidGhyb3dMYWJlbGVkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMUY5zqUAQAAlAEAACEAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9lbnYtb3B0aW9ucy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW52LW9wdGlvbnMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkrdHfuwNAADsDQAAKwAAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOC9zcmMvZW52LW9wdGlvbnMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiLCJnZXRFbnZpcm9ubWVudE9wdGlvbiIsImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiLCJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuXG5jb25zdHtmcmVlemV9PU9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuXG4vL1xuLy9cbmNvbnN0IHVuY3VycnlUaGlzPVxuKGZuKT0+XG4ocmVjZWl2ZXIsLi4uYXJncyk9PlxuYXBwbHkoZm4scmVjZWl2ZXIsYXJncyk7XG5jb25zdCBhcnJheVB1c2g9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuY29uc3QgYXJyYXlJbmNsdWRlcz11bmN1cnJ5VGhpcyhBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xuY29uc3Qgc3RyaW5nU3BsaXQ9dW5jdXJyeVRoaXMoU3RyaW5nLnByb3RvdHlwZS5zcGxpdCk7XG5cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbmNvbnN0IEZhaWw9KGxpdGVyYWxzLC4uLmFyZ3MpPT57XG5sZXQgbXNnPWxpdGVyYWxzWzBdO1xuZm9yKGxldCBpPTA7aTxhcmdzLmxlbmd0aDtpKz0xKXtcbm1zZz0gYCR7bXNnfSR7YXJnc1tpXX0ke2xpdGVyYWxzW2krMV19YDtcbiB9XG50aHJvdyBFcnJvcihtc2cpO1xuIH07XG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW52aXJvbm1lbnRDYXB0b3I9KGFHbG9iYWwsZHJvcE5hbWVzPWZhbHNlKT0+e1xuY29uc3QgY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPVtdO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBnZXRFbnZpcm9ubWVudE9wdGlvbj0oXG5vcHRpb25OYW1lLFxuZGVmYXVsdFNldHRpbmcsXG5vcHRPdGhlclZhbHVlcz11bmRlZmluZWQpPT5cbntcbnR5cGVvZiBvcHRpb25OYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWUgJHtxKG9wdGlvbk5hbWUpfSBtdXN0IGJlIGEgc3RyaW5nLmA7XG50eXBlb2YgZGVmYXVsdFNldHRpbmc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gZGVmYXVsdCBzZXR0aW5nICR7cShcbmRlZmF1bHRTZXR0aW5nKVxuIH0gbXVzdCBiZSBhIHN0cmluZy5gO1xuXG4vKiAgICAgICAgICAgICAgICAgKi9cbmxldCBzZXR0aW5nPWRlZmF1bHRTZXR0aW5nO1xuY29uc3QgZ2xvYmFsUHJvY2Vzcz1hR2xvYmFsLnByb2Nlc3N8fHVuZGVmaW5lZDtcbmNvbnN0IGdsb2JhbEVudj1cbnR5cGVvZiBnbG9iYWxQcm9jZXNzPT09J29iamVjdCcmJmdsb2JhbFByb2Nlc3MuZW52fHx1bmRlZmluZWQ7XG5pZih0eXBlb2YgZ2xvYmFsRW52PT09J29iamVjdCcpe1xuaWYob3B0aW9uTmFtZSBpbiBnbG9iYWxFbnYpe1xuaWYoIWRyb3BOYW1lcyl7XG5hcnJheVB1c2goY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzLG9wdGlvbk5hbWUpO1xuIH1cbmNvbnN0IG9wdGlvblZhbHVlPWdsb2JhbEVudltvcHRpb25OYW1lXTtcbi8vXG50eXBlb2Ygb3B0aW9uVmFsdWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gbmFtZWQgJHtxKFxub3B0aW9uTmFtZSlcbiB9LCBpZiBwcmVzZW50LCBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIHN0cmluZyB2YWx1ZSwgZ290ICR7cShcbm9wdGlvblZhbHVlKVxuIH1gO1xuc2V0dGluZz1vcHRpb25WYWx1ZTtcbiB9XG4gfVxub3B0T3RoZXJWYWx1ZXM9PT11bmRlZmluZWR8fFxuc2V0dGluZz09PWRlZmF1bHRTZXR0aW5nfHxcbmFycmF5SW5jbHVkZXMob3B0T3RoZXJWYWx1ZXMsc2V0dGluZyl8fFxuRmFpbCBgVW5yZWNvZ25pemVkICR7cShvcHRpb25OYW1lKX0gdmFsdWUgJHtxKFxuc2V0dGluZylcbiB9LiBFeHBlY3RlZCBvbmUgb2YgJHtxKFtkZWZhdWx0U2V0dGluZywuLi5vcHRPdGhlclZhbHVlc10pfWA7XG5yZXR1cm4gc2V0dGluZztcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdD0ob3B0aW9uTmFtZSk9PntcbmNvbnN0IG9wdGlvbj1nZXRFbnZpcm9ubWVudE9wdGlvbihvcHRpb25OYW1lLCcnKTtcbnJldHVybiBmcmVlemUob3B0aW9uPT09Jyc/W106c3RyaW5nU3BsaXQob3B0aW9uLCcsJykpO1xuIH07XG5mcmVlemUoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCk7XG5cbmNvbnN0IGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXM9KG9wdGlvbk5hbWUsZWxlbWVudCk9PlxuYXJyYXlJbmNsdWRlcyhnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KG9wdGlvbk5hbWUpLGVsZW1lbnQpO1xuXG5jb25zdCBnZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXM9KCk9PntcbnJldHVybiBmcmVlemUoWy4uLmNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc10pO1xuIH07XG5mcmVlemUoZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzKTtcblxucmV0dXJuIGZyZWV6ZSh7XG5nZXRFbnZpcm9ubWVudE9wdGlvbixcbmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QsXG5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzLFxuZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRW52aXJvbm1lbnRDYXB0b3IobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcbmZyZWV6ZShtYWtlRW52aXJvbm1lbnRDYXB0b3IpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAge1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc309XG5tYWtlRW52aXJvbm1lbnRDYXB0b3IoZ2xvYmFsVGhpcyx0cnVlKTskaM2PX29uY2UuZ2V0RW52aXJvbm1lbnRPcHRpb24oZ2V0RW52aXJvbm1lbnRPcHRpb24pOyRozY9fb25jZS5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpOyRozY9fb25jZS5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVudmlyb25tZW50Q2FwdG9yIjpbIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbiI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbiJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IjpbImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiXSwiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPxwaTHfBwAA3wcAABwAAABAZW5kby9lcnJvcnMtdjEuMi44L2luZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJGYWlsIiwiWCIsImFubm90YXRlRXJyb3IiLCJhc3NlcnQiLCJiIiwiYmFyZSIsIm1ha2VFcnJvciIsIm5vdGUiLCJxIiwicXVvdGUiLCJyZWRhY3RlZCIsInRocm93UmVkYWN0ZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG5cbmNvbnN0IGdsb2JhbEFzc2VydD1nbG9iYWxUaGlzLmFzc2VydDtcblxuaWYoZ2xvYmFsQXNzZXJ0PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQsIGltcG9ydCAnc2VzJyBiZWZvcmUgJ0BlbmRvL2Vycm9ycydgKTtcblxuIH1cblxuY29uc3QgbWlzc2luZz0vKiAgICAgICAgICAgICAgICAqL1tcbid0eXBlb2YnLFxuJ2Vycm9yJyxcbidmYWlsJyxcbidlcXVhbCcsXG4nc3RyaW5nJyxcbidub3RlJyxcbidkZXRhaWxzJyxcbidGYWlsJyxcbidxdW90ZScsXG4vL1xuLy9cbi8vXG4vL1xuJ21ha2VBc3NlcnQnXS5cbmZpbHRlcigobmFtZSk9Pmdsb2JhbEFzc2VydFtuYW1lXT09PXVuZGVmaW5lZCk7XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQgbWV0aG9kcyAke21pc3Npbmcuam9pbihcbicsICcpXG4gfWApO1xuXG4gfVxuXG4vL1xuLy9cbi8vXG5jb25zdHtcbmJhcmUsXG5kZXRhaWxzOnJlZGFjdGVkLFxuZXJyb3I6bWFrZUVycm9yLFxuRmFpbDp0aHJvd1JlZGFjdGVkLFxubWFrZUFzc2VydDpfb21pdHRlZE1ha2VBc3NlcnQsXG5ub3RlLFxucXVvdGUsXG4uLi5hc3NlcnRpb25zfT1cbmdsb2JhbEFzc2VydDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbiRozY9fb25jZS5yZWRhY3RlZChyZWRhY3RlZCk7JGjNj19vbmNlLm1ha2VFcnJvcihtYWtlRXJyb3IpOyRozY9fb25jZS50aHJvd1JlZGFjdGVkKHRocm93UmVkYWN0ZWQpOyRozY9fb25jZS5ub3RlKG5vdGUpOyRozY9fb25jZS5xdW90ZShxdW90ZSk7Y29uc3QgYXNzZXJ0PSh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk9PlxuZ2xvYmFsQXNzZXJ0KHZhbHVlLG9wdERldGFpbHMsZXJyQ29udHJ1Y3RvcixvcHRpb25zKTskaM2PX29uY2UuYXNzZXJ0KGFzc2VydCk7XG5PYmplY3QuYXNzaWduKGFzc2VydCxhc3NlcnRpb25zKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgYmFyZU9yUXVvdGU9YmFyZXx8cXVvdGU7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYmFyZU9yUXVvdGUoYmFyZU9yUXVvdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVkYWN0ZWQiOlsicmVkYWN0ZWQiXSwiWCI6WyJyZWRhY3RlZCJdLCJtYWtlRXJyb3IiOlsibWFrZUVycm9yIl0sInRocm93UmVkYWN0ZWQiOlsidGhyb3dSZWRhY3RlZCJdLCJGYWlsIjpbInRocm93UmVkYWN0ZWQiXSwibm90ZSI6WyJub3RlIl0sImFubm90YXRlRXJyb3IiOlsibm90ZSJdLCJxdW90ZSI6WyJxdW90ZSJdLCJxIjpbInF1b3RlIl0sImFzc2VydCI6WyJhc3NlcnQiXSwiYmFyZSI6WyJiYXJlT3JRdW90ZSJdLCJiIjpbImJhcmVPclF1b3RlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAH5dVSulEAAApRAAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvRS5qc3siaW1wb3J0cyI6WyIuL3RyYWNrLXR1cm5zLmpzIiwiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCB0cmFja1R1cm5zLG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcjskaM2PX2ltcG9ydHMoW1tcIi4vdHJhY2stdHVybnMuanNcIiwgW1tcInRyYWNrVHVybnNcIiwgWyRozY9fYSA9PiAodHJhY2tUdXJucyA9ICRozY9fYSldXV1dLFtcIi4vbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbW1wibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyXCIsIFskaM2PX2EgPT4gKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuY29uc3R7ZGV0YWlsczpYLHF1b3RlOnEsRmFpbCxlcnJvcjptYWtlRXJyb3J9PWFzc2VydDtcbmNvbnN0e2Fzc2lnbixjcmVhdGV9PU9iamVjdDtcblxuLypcblxuICovXG5cbmNvbnN0IG9uU2VuZD1tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIoJ0VORE9fU0VORF9CUkVBS1BPSU5UUycpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcj17XG5zZXQoX3RhcmdldCxfcHJvcCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5pc0V4dGVuc2libGUoX3RhcmdldCl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbnNldFByb3RvdHlwZU9mKF90YXJnZXQsX3ZhbHVlKXtcbnJldHVybiBmYWxzZTtcbiB9LFxuZGVsZXRlUHJvcGVydHkoX3RhcmdldCxfcHJvcCl7XG5yZXR1cm4gZmFsc2U7XG4gfX07XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVByb3h5SGFuZGxlcj0ocmVjaXBpZW50LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmdldDooX3RhcmdldCxwcm9wZXJ0eUtleSxyZWNlaXZlcik9PntcbnJldHVybiBoYXJkZW4oXG57XG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuaWYodGhpcyE9PXJlY2VpdmVyKXtcbi8vXG5yZXR1cm4gSGFuZGxlZFByb21pc2UucmVqZWN0KFxubWFrZUVycm9yKFxuWCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EocHJvcGVydHlLZXkpfVwiIG1ldGhvZCBvZiBFKCR7cShcbnJlY2lwaWVudClcbiB9KWApKTtcblxuXG4gfVxuXG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5hcHBseU1ldGhvZChyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG4gfVxuLy9cbn1bcHJvcGVydHlLZXldKTtcblxuIH0sXG5hcHBseTooX3RhcmdldCxfdGhpc0FyZyxhcmdBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ0FycmF5KTtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW3Byb3BlcnR5S2V5XSguLi5hcmdzKXtcbi8vXG50aGlzPT09cmVjZWl2ZXJ8fFxuRmFpbCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EoXG5wcm9wZXJ0eUtleSlcbiB9XCIgbWV0aG9kIG9mIEUuc2VuZE9ubHkoJHtxKHJlY2lwaWVudCl9KWA7XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbkhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kU2VuZE9ubHkocmVjaXBpZW50LHByb3BlcnR5S2V5LGFyZ3MpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ3NBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvblNlbmRPbmx5KHJlY2lwaWVudCxhcmdzQXJyYXkpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRUdldFByb3h5SGFuZGxlcj0oeCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5oYXM6KF90YXJnZXQsX3Byb3ApPT50cnVlLFxuZ2V0OihfdGFyZ2V0LHByb3ApPT5IYW5kbGVkUHJvbWlzZS5nZXQoeCxwcm9wKX0pO1xuXG5cbi8qXG5cbiAqL1xuY29uc3QgbWFrZUU9KEhhbmRsZWRQcm9taXNlKT0+e1xucmV0dXJuIGhhcmRlbihcbmFzc2lnbihcbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuLy9cbih4KT0+aGFyZGVuKG5ldyBQcm94eSgoKT0+eyB9LG1ha2VFUHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldDooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eShjcmVhdGUobnVsbCksbWFrZUVHZXRQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xucmVzb2x2ZTpIYW5kbGVkUHJvbWlzZS5yZXNvbHZlLFxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuc2VuZE9ubHk6KHgpPT5cbi8vXG5oYXJkZW4oXG5uZXcgUHJveHkoKCk9PnsgfSxtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbndoZW46KHgsb25mdWxmaWxsZWQsb25yZWplY3RlZCk9PlxuSGFuZGxlZFByb21pc2UucmVzb2x2ZSh4KS50aGVuKFxuLi4udHJhY2tUdXJucyhbb25mdWxmaWxsZWQsb25yZWplY3RlZF0pKX0pKTtcblxuXG5cblxuIH07XG5cbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDptYWtlRX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAECDjrKoMAACqDAAAJwAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9sb2NhbC5qc3siaW1wb3J0cyI6WyIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6WyJnZXRNZXRob2ROYW1lcyIsImxvY2FsQXBwbHlGdW5jdGlvbiIsImxvY2FsQXBwbHlNZXRob2QiLCJsb2NhbEdldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsZ2V0UHJvdG90eXBlT2YsZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuXG5jb25zdCBudHlwZW9mPShzcGVjaW1lbik9PnNwZWNpbWVuPT09bnVsbD8nbnVsbCc6dHlwZW9mIHNwZWNpbWVuO1xuXG5jb25zdCBvbkRlbGl2ZXJ5PW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19ERUxJVkVSWV9CUkVBS1BPSU5UUycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzT2JqZWN0PSh2YWwpPT5PYmplY3QodmFsKT09PXZhbDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoZGVzY3MpKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTtcbi8vXG4vL1xuJGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtmcmVlemUoZ2V0TWV0aG9kTmFtZXMpO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseUZ1bmN0aW9uPShyZWNpcGllbnQsYXJncyk9PntcbnR5cGVvZiByZWNpcGllbnQ9PT0nZnVuY3Rpb24nfHxcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGludm9rZSB0YXJnZXQgYXMgYSBmdW5jdGlvbjsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShyZWNpcGllbnQsdW5kZWZpbmVkLGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5RnVuY3Rpb24obG9jYWxBcHBseUZ1bmN0aW9uKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlNZXRob2Q9KHJlY2lwaWVudCxtZXRob2ROYW1lLGFyZ3MpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGxvY2FsQXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJncyk7XG4gfVxuaWYocmVjaXBpZW50PT09dW5kZWZpbmVkfHxyZWNpcGllbnQ9PT1udWxsKXtcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGRlbGl2ZXIgJHtxKG1ldGhvZE5hbWUpfSB0byB0YXJnZXQ7IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZuPXJlY2lwaWVudFttZXRob2ROYW1lXTtcbmlmKGZuPT09dW5kZWZpbmVkKXtcbmFzc2VydC5mYWlsKFxuWCBgdGFyZ2V0IGhhcyBubyBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSwgaGFzICR7cShcbmdldE1ldGhvZE5hbWVzKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZnR5cGU9bnR5cGVvZihmbik7XG50eXBlb2YgZm49PT0nZnVuY3Rpb24nfHxcbkZhaWwgYGludm9rZWQgbWV0aG9kICR7cShtZXRob2ROYW1lKX0gaXMgbm90IGEgZnVuY3Rpb247IGl0IGlzIGEgJHtxKFxuZnR5cGUpXG4gfWA7XG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LG1ldGhvZE5hbWUpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkoZm4scmVjaXBpZW50LGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5TWV0aG9kKGxvY2FsQXBwbHlNZXRob2QpO1xuXG5jb25zdCAgICAgICAgbG9jYWxHZXQ9KHQsa2V5KT0+dFtrZXldOyRozY9fb25jZS5sb2NhbEdldChsb2NhbEdldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJsb2NhbEFwcGx5RnVuY3Rpb24iOlsibG9jYWxBcHBseUZ1bmN0aW9uIl0sImxvY2FsQXBwbHlNZXRob2QiOlsibG9jYWxBcHBseU1ldGhvZCJdLCJsb2NhbEdldCI6WyJsb2NhbEdldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAABjnBM6QwAAOkMAAA1AAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRozY9fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtxdW90ZTpxLEZhaWx9PWFzc2VydDtcblxuY29uc3R7aGFzT3duLGZyZWV6ZSxlbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuICovXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0IGlzSlNPTlJlY29yZD0odmFsKT0+XG50eXBlb2YgdmFsPT09J29iamVjdCcmJnZhbCE9PW51bGwmJiFBcnJheS5pc0FycmF5KHZhbCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNpbXBsaWZ5VGFnPSh0YWcpPT57XG5mb3IoY29uc3QgcHJlZml4IG9mWydBbGxlZ2VkOiAnLCdEZWJ1Z05hbWU6ICddKXtcbmlmKHRhZy5zdGFydHNXaXRoKHByZWZpeCkpe1xucmV0dXJuIHRhZy5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiB9XG4gfVxucmV0dXJuIHRhZztcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcj0ob3B0aW9uTmFtZSk9PntcbmxldCBicmVha3BvaW50cz1KU09OLnBhcnNlKGdldEVudmlyb25tZW50T3B0aW9uKG9wdGlvbk5hbWUsJ251bGwnKSk7XG5cbmlmKGJyZWFrcG9pbnRzPT09bnVsbCl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgYnJlYWtwb2ludHNUYWJsZTtcblxuY29uc3QgZ2V0QnJlYWtwb2ludHM9KCk9PmJyZWFrcG9pbnRzO1xuZnJlZXplKGdldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2V0QnJlYWtwb2ludHM9KG5ld0JyZWFrcG9pbnRzPWJyZWFrcG9pbnRzKT0+e1xuaXNKU09OUmVjb3JkKG5ld0JyZWFrcG9pbnRzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbiB0byBiZSBhIEpTT04gYnJlYWtwb2ludHMgcmVjb3JkYDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgbmV3QnJlYWtwb2ludHNUYWJsZT17X19wcm90b19fOm51bGx9O1xuXG5mb3IoY29uc3RbdGFnLG1ldGhvZEJQc11vZiBlbnRyaWVzKG5ld0JyZWFrcG9pbnRzKSl7XG50YWc9PT1zaW1wbGlmeVRhZyh0YWcpfHxcbkZhaWwgYEp1c3QgdXNlIHNpbXBsZSB0YWcgJHtxKHNpbXBsaWZ5VGFnKHRhZykpfSByYXRoZXIgdGhhbiAke3EodGFnKX1gO1xuaXNKU09OUmVjb3JkKG1ldGhvZEJQcyl8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24ncyAke3EoXG50YWcpXG4gfSB0byBiZSBhIEpTT04gbWV0aG9kcyBicmVha3BvaW50cyByZWNvcmRgO1xuZm9yKGNvbnN0W21ldGhvZE5hbWUsY291bnRdb2YgZW50cmllcyhtZXRob2RCUHMpKXtcbmNvdW50PT09JyonfHxcbnR5cGVvZiBjb3VudD09PSdudW1iZXInJiZcbk51bWJlci5pc1NhZmVJbnRlZ2VyKGNvdW50KSYmXG5jb3VudD49MHx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cSh0YWcpfS4ke3EoXG5tZXRob2ROYW1lKVxuIH0gdG8gYmUgXCIqXCIgb3IgYSBub24tbmVnYXRpdmUgaW50ZWdlcmA7XG5cbmNvbnN0IGNsYXNzQlBzPWhhc093bihuZXdCcmVha3BvaW50c1RhYmxlLG1ldGhvZE5hbWUpP1xubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXTpcbm5ld0JyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV09e1xuLy9cbl9fcHJvdG9fXzpudWxsfTtcblxuY2xhc3NCUHNbdGFnXT1jb3VudDtcbiB9XG4gfVxuYnJlYWtwb2ludHM9bmV3QnJlYWtwb2ludHM7XG5icmVha3BvaW50c1RhYmxlPW5ld0JyZWFrcG9pbnRzVGFibGU7XG4gfTtcbmZyZWV6ZShzZXRCcmVha3BvaW50cyk7XG5cbmNvbnN0IHNob3VsZEJyZWFrcG9pbnQ9KHJlY2lwaWVudCxtZXRob2ROYW1lKT0+e1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8bWV0aG9kTmFtZT09PW51bGwpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBjbGFzc0JQcz1icmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdfHxicmVha3BvaW50c1RhYmxlWycqJ107XG5pZihjbGFzc0JQcz09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxubGV0IHRhZz1zaW1wbGlmeVRhZyhyZWNpcGllbnRbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG5sZXQgY291bnQ9Y2xhc3NCUHNbdGFnXTtcbmlmKGNvdW50PT09dW5kZWZpbmVkKXtcbnRhZz0nKic7XG5jb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5pZihjb3VudD09PScqJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjb3VudD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuYXNzZXJ0KHR5cGVvZiBjb3VudD09PSdudW1iZXInJiZjb3VudD49MSk7XG5jbGFzc0JQc1t0YWddPWNvdW50LTE7XG5yZXR1cm4gZmFsc2U7XG4gfTtcbmZyZWV6ZShzaG91bGRCcmVha3BvaW50KTtcblxuY29uc3QgYnJlYWtwb2ludFRlc3Rlcj1mcmVlemUoe1xuZ2V0QnJlYWtwb2ludHMsXG5zZXRCcmVha3BvaW50cyxcbnNob3VsZEJyZWFrcG9pbnR9KTtcblxuYnJlYWtwb2ludFRlc3Rlci5zZXRCcmVha3BvaW50cygpO1xucmV0dXJuIGJyZWFrcG9pbnRUZXN0ZXI7XG4gfTskaM2PX29uY2UubWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcik7XG5mcmVlemUobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGWy7RTMDAAAzAwAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9uby1zaGltLmpzeyJpbXBvcnRzIjpbIi4vRS5qcyIsIi4vZXhwb3J0cy5qcyJdLCJleHBvcnRzIjpbIkUiLCJIYW5kbGVkUHJvbWlzZSJdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VFOyRozY9faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKG1ha2VFID0gJGjNj19hKV1dXV0sW1wiLi9leHBvcnRzLmpzXCIsIFtdXV0pOyAgIFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgaHA9SGFuZGxlZFByb21pc2U7JGjNj19vbmNlLmhwKGhwKTtcbmNvbnN0ICAgICAgICBFPW1ha2VFKGhwKTskaM2PX29uY2UuRShFKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkhhbmRsZWRQcm9taXNlIjpbImhwIl0sIkUiOlsiRSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACGqKbHXwkAAF8JAAAtAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL3RyYWNrLXR1cm5zLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vudi1vcHRpb25zIl0sImV4cG9ydHMiOlsidHJhY2tUdXJucyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dLFtcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxubGV0IGhpZGRlblByaW9yRXJyb3I7XG5sZXQgaGlkZGVuQ3VycmVudFR1cm49MDtcbmxldCBoaWRkZW5DdXJyZW50RXZlbnQ9MDtcblxuLy9cbmNvbnN0IFZFUkJPU0U9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCd0cmFjay10dXJucycpO1xuXG4vL1xuLy9cbmNvbnN0IEVOQUJMRUQ9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignVFJBQ0tfVFVSTlMnLCdkaXNhYmxlZCcsWydlbmFibGVkJ10pPT09J2VuYWJsZWQnO1xuXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBhZGRSZWplY3Rpb25Ob3RlPShkZXRhaWxzTm90ZSk9PihyZWFzb24pPT57XG5pZihyZWFzb24gaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKHJlYXNvbixkZXRhaWxzTm90ZSk7XG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnUkVKRUNURUQgYXQgdG9wIG9mIGV2ZW50IGxvb3AnLHJlYXNvbik7XG4gfVxuIH07XG5cbmNvbnN0IHdyYXBGdW5jdGlvbj1cbihmdW5jLHNlbmRpbmdFcnJvcixYKT0+XG4oLi4uYXJncyk9PntcbmhpZGRlblByaW9yRXJyb3I9c2VuZGluZ0Vycm9yO1xuaGlkZGVuQ3VycmVudFR1cm4rPTE7XG5oaWRkZW5DdXJyZW50RXZlbnQ9MDtcbnRyeXtcbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbmlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUoXG5lcnIsXG5YIGBUaHJvd24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1RIUk9XTiB0byB0b3Agb2YgZXZlbnQgbG9vcCcsZXJyKTtcbiB9XG50aHJvdyBlcnI7XG4gfVxuLy9cbmNvbnN0IGRldGFpbHNOb3RlPVggYFJlamVjdGlvbiBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWA7XG5Qcm9taXNlLnJlc29sdmUocmVzdWx0KS5jYXRjaChhZGRSZWplY3Rpb25Ob3RlKGRldGFpbHNOb3RlKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH1maW5hbGx5e1xuaGlkZGVuUHJpb3JFcnJvcj11bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRyYWNrVHVybnM9KGZ1bmNzKT0+e1xuaWYoIUVOQUJMRUR8fHR5cGVvZiBnbG9iYWxUaGlzPT09J3VuZGVmaW5lZCd8fCFnbG9iYWxUaGlzLmFzc2VydCl7XG5yZXR1cm4gZnVuY3M7XG4gfVxuY29uc3R7ZGV0YWlsczpYLG5vdGU6YW5ub3RhdGVFcnJvcn09Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmhpZGRlbkN1cnJlbnRFdmVudCs9MTtcbmNvbnN0IHNlbmRpbmdFcnJvcj1FcnJvcihcbiBgRXZlbnQ6ICR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG5pZihoaWRkZW5QcmlvckVycm9yIT09dW5kZWZpbmVkKXtcbmFubm90YXRlRXJyb3Ioc2VuZGluZ0Vycm9yLFggYENhdXNlZCBieTogJHtoaWRkZW5QcmlvckVycm9yfWApO1xuIH1cblxucmV0dXJuICgvKiAgICAgICAgICAgICovXG5mdW5jcy5tYXAoKGZ1bmMpPT5mdW5jJiZ3cmFwRnVuY3Rpb24oZnVuYyxzZW5kaW5nRXJyb3IsWCkpKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS50cmFja1R1cm5zKHRyYWNrVHVybnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJhY2tUdXJucyI6WyJ0cmFja1R1cm5zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAD/w5zpWAgAAVgIAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC91dGlscy5qc3siaW1wb3J0cyI6WyIuL3NyYy9sb2NhbC5qcyIsIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9sb2NhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2xvY2FsLmpzIjpbWyJnZXRNZXRob2ROYW1lcyIsImdldE1ldGhvZE5hbWVzIl1dLCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjpbWyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiLCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALFYNphSAgAAUgIAABkAAABAZW5kby9leG8tdjEuNS43L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2V4by1tYWtlcnMuanMiLCIuL3NyYy90eXBlcy5qcyIsIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiXSwiZXhwb3J0cyI6W251bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZXhvLW1ha2Vycy5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9leG8tbWFrZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiLi9zcmMvZ2V0LWludGVyZmFjZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2dldC1pbnRlcmZhY2UuanMiOltbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiLCJHRVRfSU5URVJGQUNFX0dVQVJEIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA+gd+91xQAANcUAAAiAAAAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZXhvLW1ha2Vycy5qc3siaW1wb3J0cyI6WyJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2Vudi1vcHRpb25zIiwiQGVuZG8vZXJyb3JzIiwiLi9leG8tdG9vbHMuanMiXSwiZXhwb3J0cyI6WyJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzS2l0IiwiaW5pdEVtcHR5IiwibWFrZUV4byJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBvYmplY3RNYXAsZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxGYWlsLHEsZGVmZW5kUHJvdG90eXBlLGRlZmVuZFByb3RvdHlwZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZXhvLXRvb2xzLmpzXCIsIFtbXCJkZWZlbmRQcm90b3R5cGVcIiwgWyRozY9fYSA9PiAoZGVmZW5kUHJvdG90eXBlID0gJGjNj19hKV1dLFtcImRlZmVuZFByb3RvdHlwZUtpdFwiLCBbJGjNj19hID0+IChkZWZlbmRQcm90b3R5cGVLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtjcmVhdGUsc2VhbCxmcmVlemUsZGVmaW5lUHJvcGVydHksdmFsdWVzfT1PYmplY3Q7XG5cbi8vXG5jb25zdCBMQUJFTF9JTlNUQU5DRVM9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCdsYWJlbC1pbnN0YW5jZXMnKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlU2VsZj0ocHJvdG8saW5zdGFuY2VDb3VudCk9PntcbmNvbnN0IHNlbGY9Y3JlYXRlKHByb3RvKTtcbmlmKExBQkVMX0lOU1RBTkNFUyl7XG5kZWZpbmVQcm9wZXJ0eShzZWxmLFN5bWJvbC50b1N0cmluZ1RhZyx7XG52YWx1ZTogYCR7cHJvdG9bU3ltYm9sLnRvU3RyaW5nVGFnXX0jJHtpbnN0YW5jZUNvdW50fWAsXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oc2VsZik7XG4gfTtcblxuY29uc3QgZW1wdHlSZWNvcmQ9aGFyZGVuKHt9KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaW5pdEVtcHR5PSgpPT5lbXB0eVJlY29yZDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaW5pdEVtcHR5KGluaXRFbXB0eSk7XG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3M9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzKTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xucmVjZWl2ZUFtcGxpZmllcj09PXVuZGVmaW5lZHx8XG5GYWlsIGBPbmx5IGZhY2V0cyBvZiBhbiBleG8gY2xhc3Mga2l0IGNhbiBiZSBhbXBsaWZpZWQgJHtxKHRhZyl9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0TWFwPW5ldyBXZWFrTWFwKCk7XG5jb25zdCBwcm90bz1kZWZlbmRQcm90b3R5cGUoXG50YWcsXG4oc2VsZik9Pi8qICAgICAgICAgICAgICAqL2NvbnRleHRNYXAuZ2V0KHNlbGYpLFxubWV0aG9kcyxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlPSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG5pbnN0YW5jZUNvdW50Kz0xO1xuY29uc3Qgc2VsZj1tYWtlU2VsZihwcm90byxpbnN0YW5jZUNvdW50KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0PWZyZWV6ZSh7c3RhdGUsc2VsZn0pO1xuY29udGV4dE1hcC5zZXQoc2VsZixjb250ZXh0KTtcbmlmKGZpbmlzaCl7XG5maW5pc2goY29udGV4dCk7XG4gfVxucmV0dXJuIHNlbGY7XG4gfTtcblxuaWYocmVjZWl2ZUluc3RhbmNlVGVzdGVyKXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzSW5zdGFuY2U9KGV4byxmYWNldE5hbWU9dW5kZWZpbmVkKT0+e1xuZmFjZXROYW1lPT09dW5kZWZpbmVkfHxcbkZhaWwgYGZhY2V0TmFtZSBjYW4gb25seSBiZSB1c2VkIHdpdGggYW4gZXhvIGNsYXNzIGtpdDogJHtxKFxudGFnKVxuIH0gaGFzIG5vIGZhY2V0ICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvKTtcbiB9O1xuaGFyZGVuKGlzSW5zdGFuY2UpO1xucmVjZWl2ZUluc3RhbmNlVGVzdGVyKGlzSW5zdGFuY2UpO1xuIH1cblxucmV0dXJuIGhhcmRlbihtYWtlSW5zdGFuY2UpO1xuIH07JGjNj19vbmNlLmRlZmluZUV4b0NsYXNzKGRlZmluZUV4b0NsYXNzKTtcbmhhcmRlbihkZWZpbmVFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3NLaXQ9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxubWV0aG9kc0tpdCxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzS2l0KTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xuY29uc3QgY29udGV4dE1hcEtpdD1vYmplY3RNYXAobWV0aG9kc0tpdCwoKT0+bmV3IFdlYWtNYXAoKSk7XG5jb25zdCBnZXRDb250ZXh0S2l0PW9iamVjdE1hcChcbmNvbnRleHRNYXBLaXQsXG4oY29udGV4dE1hcCk9PihmYWNldCk9PmNvbnRleHRNYXAuZ2V0KGZhY2V0KSk7XG5cbmNvbnN0IHByb3RvdHlwZUtpdD1kZWZlbmRQcm90b3R5cGVLaXQoXG50YWcsXG5nZXRDb250ZXh0S2l0LFxubWV0aG9kc0tpdCxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlS2l0PSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGV4dD17c3RhdGUsZmFjZXRzOm51bGx9O1xuaW5zdGFuY2VDb3VudCs9MTtcbmNvbnN0IGZhY2V0cz1vYmplY3RNYXAocHJvdG90eXBlS2l0LChwcm90byxmYWNldE5hbWUpPT57XG5jb25zdCBzZWxmPW1ha2VTZWxmKHByb3RvLGluc3RhbmNlQ291bnQpO1xuY29udGV4dE1hcEtpdFtmYWNldE5hbWVdLnNldChzZWxmLGNvbnRleHQpO1xucmV0dXJuIHNlbGY7XG4gfSk7XG5jb250ZXh0LmZhY2V0cz1mYWNldHM7XG4vL1xuZnJlZXplKGNvbnRleHQpO1xuaWYoZmluaXNoKXtcbmZpbmlzaChjb250ZXh0KTtcbiB9XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9jb250ZXh0LmZhY2V0cyk7XG4gfTtcblxuaWYocmVjZWl2ZUFtcGxpZmllcil7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbXBsaWZ5PShleG9GYWNldCk9PntcbmZvcihjb25zdCBjb250ZXh0TWFwIG9mIHZhbHVlcyhjb250ZXh0TWFwS2l0KSl7XG5pZihjb250ZXh0TWFwLmhhcyhleG9GYWNldCkpe1xuY29uc3R7ZmFjZXRzfT1jb250ZXh0TWFwLmdldChleG9GYWNldCk7XG5yZXR1cm4gZmFjZXRzO1xuIH1cbiB9XG50aHJvdyBGYWlsIGBNdXN0IGJlIGEgZmFjZXQgb2YgJHtxKHRhZyl9OiAke2V4b0ZhY2V0fWA7XG4gfTtcbmhhcmRlbihhbXBsaWZ5KTtcbnJlY2VpdmVBbXBsaWZpZXIoYW1wbGlmeSk7XG4gfVxuXG5pZihyZWNlaXZlSW5zdGFuY2VUZXN0ZXIpe1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNJbnN0YW5jZT0oZXhvRmFjZXQsZmFjZXROYW1lPXVuZGVmaW5lZCk9PntcbmlmKGZhY2V0TmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdmFsdWVzKGNvbnRleHRNYXBLaXQpLnNvbWUoKGNvbnRleHRNYXApPT5cbmNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KSk7XG5cbiB9XG5hc3NlcnQudHlwZW9mKGZhY2V0TmFtZSwnc3RyaW5nJyk7XG5jb25zdCBjb250ZXh0TWFwPWNvbnRleHRNYXBLaXRbZmFjZXROYW1lXTtcbmNvbnRleHRNYXAhPT11bmRlZmluZWR8fFxuRmFpbCBgZXhvIGNsYXNzIGtpdCAke3EodGFnKX0gaGFzIG5vIGZhY2V0IG5hbWVkICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpO1xuIH07XG5oYXJkZW4oaXNJbnN0YW5jZSk7XG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXIoaXNJbnN0YW5jZSk7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKG1ha2VJbnN0YW5jZUtpdCk7XG4gfTskaM2PX29uY2UuZGVmaW5lRXhvQ2xhc3NLaXQoZGVmaW5lRXhvQ2xhc3NLaXQpO1xuaGFyZGVuKGRlZmluZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRXhvPSh0YWcsaW50ZXJmYWNlR3VhcmQsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PntcbmNvbnN0IG1ha2VJbnN0YW5jZT1kZWZpbmVFeG9DbGFzcyhcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuaW5pdEVtcHR5LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gbWFrZUluc3RhbmNlKCk7XG4gfTskaM2PX29uY2UubWFrZUV4byhtYWtlRXhvKTtcbmhhcmRlbihtYWtlRXhvKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImluaXRFbXB0eSI6WyJpbml0RW1wdHkiXSwiZGVmaW5lRXhvQ2xhc3MiOlsiZGVmaW5lRXhvQ2xhc3MiXSwiZGVmaW5lRXhvQ2xhc3NLaXQiOlsiZGVmaW5lRXhvQ2xhc3NLaXQiXSwibWFrZUV4byI6WyJtYWtlRXhvIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAM7uWwbmLwAA5i8AACEAAABAZW5kby9leG8tdjEuNS43L3NyYy9leG8tdG9vbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbImRlZmVuZFByb3RvdHlwZSIsImRlZmVuZFByb3RvdHlwZUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRNZXRob2ROYW1lcyxoYXNPd25Qcm9wZXJ0eU9mLHRvVGhyb3dhYmxlLEUsRmFyLG11c3RNYXRjaCxNLGlzQXdhaXRBcmdHdWFyZCxpc1Jhd0d1YXJkLGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkLGdldE1ldGhvZEd1YXJkUGF5bG9hZCxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQsZ2V0Q29weU1hcEVudHJpZXMsbGlzdERpZmZlcmVuY2Usb2JqZWN0TWFwLHEsRmFpbCxHRVRfSU5URVJGQUNFX0dVQVJEOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qc1wiLCBbW1wiZ2V0TWV0aG9kTmFtZXNcIiwgWyRozY9fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1widG9UaHJvd2FibGVcIiwgWyRozY9fYSA9PiAodG9UaHJvd2FibGUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImlzQXdhaXRBcmdHdWFyZFwiLCBbJGjNj19hID0+IChpc0F3YWl0QXJnR3VhcmQgPSAkaM2PX2EpXV0sW1wiaXNSYXdHdWFyZFwiLCBbJGjNj19hID0+IChpc1Jhd0d1YXJkID0gJGjNj19hKV1dLFtcImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dLFtcImdldE1ldGhvZEd1YXJkUGF5bG9hZFwiLCBbJGjNj19hID0+IChnZXRNZXRob2RHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCA9ICRozY9fYSldXSxbXCJnZXRDb3B5TWFwRW50cmllc1wiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwRW50cmllcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW1tcImxpc3REaWZmZXJlbmNlXCIsIFskaM2PX2EgPT4gKGxpc3REaWZmZXJlbmNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2dldC1pbnRlcmZhY2UuanNcIiwgW1tcIkdFVF9JTlRFUkZBQ0VfR1VBUkRcIiwgWyRozY9fYSA9PiAoR0VUX0lOVEVSRkFDRV9HVUFSRCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7YXBwbHksb3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2RlZmluZVByb3BlcnRpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IFJhd01ldGhvZEd1YXJkPU0uY2FsbCgpLnJlc3QoTS5yYXcoKSkucmV0dXJucyhNLnJhdygpKTtcblxuY29uc3QgUkVEQUNURURfUkFXX0FSRz0nPHJlZGFjdGVkIHJhdyBhcmc+JztcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IFBhc3NhYmxlTWV0aG9kR3VhcmQ9TS5jYWxsKCkucmVzdChNLmFueSgpKS5yZXR1cm5zKE0uYW55KCkpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZFN5bmNBcmdzPShzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbD11bmRlZmluZWQpPT57XG5jb25zdHtcbmRlY2xhcmVkTGVuLFxuaGFzUmVzdEFyZ0d1YXJkLFxucmVzdEFyZ0d1YXJkSXNSYXcsXG5wYXJhbXNQYXR0ZXJuLFxucmVkYWN0ZWRJbmRpY2VzfT1cbm1hdGNoQ29uZmlnO1xuXG4vL1xuLy9cbmxldCBtYXRjaGFibGVBcmdzPXN5bmNBcmdzO1xuaWYocmVzdEFyZ0d1YXJkSXNSYXcmJnN5bmNBcmdzLmxlbmd0aD5kZWNsYXJlZExlbil7XG5jb25zdCByZXN0TGVuPXN5bmNBcmdzLmxlbmd0aC1kZWNsYXJlZExlbjtcbmNvbnN0IHJlZGFjdGVkUmVzdD1BcnJheShyZXN0TGVuKS5maWxsKFJFREFDVEVEX1JBV19BUkcpO1xubWF0Y2hhYmxlQXJncz1bLi4uc3luY0FyZ3Muc2xpY2UoMCxkZWNsYXJlZExlbiksLi4ucmVkYWN0ZWRSZXN0XTtcbiB9ZWxzZSBpZihcbnJlZGFjdGVkSW5kaWNlcy5sZW5ndGg+MCYmXG5yZWRhY3RlZEluZGljZXNbMF08c3luY0FyZ3MubGVuZ3RoKVxue1xuLy9cbi8vXG5tYXRjaGFibGVBcmdzPVsuLi5zeW5jQXJnc107XG4gfVxuXG5mb3IoY29uc3QgaSBvZiByZWRhY3RlZEluZGljZXMpe1xuaWYoaT49bWF0Y2hhYmxlQXJncy5sZW5ndGgpe1xuYnJlYWs7XG4gfVxubWF0Y2hhYmxlQXJnc1tpXT1SRURBQ1RFRF9SQVdfQVJHO1xuIH1cblxubXVzdE1hdGNoKGhhcmRlbihtYXRjaGFibGVBcmdzKSxwYXJhbXNQYXR0ZXJuLGxhYmVsKTtcblxuaWYoaGFzUmVzdEFyZ0d1YXJkKXtcbnJldHVybiBzeW5jQXJncztcbiB9XG5zeW5jQXJncy5sZW5ndGg8PWRlY2xhcmVkTGVufHxcbkZhaWwgYCR7cShsYWJlbCl9IGFjY2VwdHMgYXQgbW9zdCAke3EoZGVjbGFyZWRMZW4pfSBhcmd1bWVudHMsIG5vdCAke3EoXG5zeW5jQXJncy5sZW5ndGgpXG4gfTogJHtzeW5jQXJnc31gO1xucmV0dXJuIHN5bmNBcmdzO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYnVpbGRNYXRjaENvbmZpZz0obWV0aG9kR3VhcmRQYXlsb2FkKT0+e1xuY29uc3R7XG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZFBheWxvYWQ7XG5cbmNvbnN0IG1hdGNoYWJsZUFyZ0d1YXJkcz1bLi4uYXJnR3VhcmRzLC4uLm9wdGlvbmFsQXJnR3VhcmRzXTtcblxuY29uc3QgcmVkYWN0ZWRJbmRpY2VzPVtdO1xuZm9yKGxldCBpPTA7aTxtYXRjaGFibGVBcmdHdWFyZHMubGVuZ3RoO2krPTEpe1xuaWYoaXNSYXdHdWFyZChtYXRjaGFibGVBcmdHdWFyZHNbaV0pKXtcbm1hdGNoYWJsZUFyZ0d1YXJkc1tpXT1SRURBQ1RFRF9SQVdfQVJHO1xucmVkYWN0ZWRJbmRpY2VzLnB1c2goaSk7XG4gfVxuIH1cblxuLy9cbmxldCBtYXRjaGFibGVSZXN0QXJnR3VhcmQ9cmVzdEFyZ0d1YXJkO1xuaWYoaXNSYXdHdWFyZChtYXRjaGFibGVSZXN0QXJnR3VhcmQpKXtcbm1hdGNoYWJsZVJlc3RBcmdHdWFyZD1NLmFycmF5T2YoUkVEQUNURURfUkFXX0FSRyk7XG4gfVxuY29uc3QgbWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkPWhhcmRlbih7XG4uLi5tZXRob2RHdWFyZFBheWxvYWQsXG5hcmdHdWFyZHM6bWF0Y2hhYmxlQXJnR3VhcmRzLnNsaWNlKDAsYXJnR3VhcmRzLmxlbmd0aCksXG5vcHRpb25hbEFyZ0d1YXJkczptYXRjaGFibGVBcmdHdWFyZHMuc2xpY2UoYXJnR3VhcmRzLmxlbmd0aCksXG5yZXN0QXJnR3VhcmQ6bWF0Y2hhYmxlUmVzdEFyZ0d1YXJkfSk7XG5cblxuY29uc3QgcGFyYW1zUGF0dGVybj1NLnNwbGl0QXJyYXkoXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQuYXJnR3VhcmRzLFxubWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkLm9wdGlvbmFsQXJnR3VhcmRzLFxubWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkLnJlc3RBcmdHdWFyZCk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5kZWNsYXJlZExlbjptYXRjaGFibGVBcmdHdWFyZHMubGVuZ3RoLFxuaGFzUmVzdEFyZ0d1YXJkOnJlc3RBcmdHdWFyZCE9PXVuZGVmaW5lZCxcbnJlc3RBcmdHdWFyZElzUmF3OnJlc3RBcmdHdWFyZCE9PW1hdGNoYWJsZVJlc3RBcmdHdWFyZCxcbnBhcmFtc1BhdHRlcm4sXG5yZWRhY3RlZEluZGljZXMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWR9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRTeW5jTWV0aG9kPShcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKT0+XG57XG5jb25zdHtyZXR1cm5HdWFyZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuY29uc3QgaXNSYXdSZXR1cm49aXNSYXdHdWFyZChyZXR1cm5HdWFyZCk7XG5jb25zdCBtYXRjaENvbmZpZz1idWlsZE1hdGNoQ29uZmlnKG1ldGhvZEd1YXJkUGF5bG9hZCk7XG5jb25zdHtzeW5jTWV0aG9kfT17XG4vL1xuc3luY01ldGhvZCguLi5zeW5jQXJncyl7XG50cnl7XG5jb25zdCBjb250ZXh0PWdldENvbnRleHQodGhpcyk7XG4vL1xuY29uc3QgcmVhbEFyZ3M9ZGVmZW5kU3luY0FyZ3Moc3luY0FyZ3MsbWF0Y2hDb25maWcsbGFiZWwpO1xuY29uc3QgcmVzdWx0PWFwcGx5KGJlaGF2aW9yTWV0aG9kLGNvbnRleHQscmVhbEFyZ3MpO1xuaWYoIWlzUmF3UmV0dXJuKXtcbm11c3RNYXRjaChoYXJkZW4ocmVzdWx0KSxyZXR1cm5HdWFyZCwgYCR7bGFiZWx9OiByZXN1bHRgKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1jYXRjaCh0aHJvd25UaGluZyl7XG50aHJvdyB0b1Rocm93YWJsZSh0aHJvd25UaGluZyk7XG4gfVxuIH19O1xuXG5yZXR1cm4gc3luY01ldGhvZDtcbiB9O1xuXG4vKlxuXG4gKi9cbmNvbnN0IGRlc3luYz0obWV0aG9kR3VhcmRQYXlsb2FkKT0+e1xuY29uc3R7XG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZFBheWxvYWQ7XG4haXNBd2FpdEFyZ0d1YXJkKHJlc3RBcmdHdWFyZCl8fFxuRmFpbCBgUmVzdCBhcmdzIG1heSBub3QgYmUgYXdhaXRlZDogJHtyZXN0QXJnR3VhcmR9YDtcbmNvbnN0IHJhd0FyZ0d1YXJkcz1bLi4uYXJnR3VhcmRzLC4uLm9wdGlvbmFsQXJnR3VhcmRzXTtcblxuY29uc3QgYXdhaXRJbmRleGVzPVtdO1xuZm9yKGxldCBpPTA7aTxyYXdBcmdHdWFyZHMubGVuZ3RoO2krPTEpe1xuY29uc3QgYXJnR3VhcmQ9cmF3QXJnR3VhcmRzW2ldO1xuaWYoaXNBd2FpdEFyZ0d1YXJkKGFyZ0d1YXJkKSl7XG5yYXdBcmdHdWFyZHNbaV09Z2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoYXJnR3VhcmQpLmFyZ0d1YXJkO1xuYXdhaXRJbmRleGVzLnB1c2goaSk7XG4gfVxuIH1cbnJldHVybntcbmF3YWl0SW5kZXhlcyxcbnJhd01ldGhvZEd1YXJkUGF5bG9hZDp7XG4uLi5tZXRob2RHdWFyZFBheWxvYWQsXG5hcmdHdWFyZHM6cmF3QXJnR3VhcmRzLnNsaWNlKDAsYXJnR3VhcmRzLmxlbmd0aCksXG5vcHRpb25hbEFyZ0d1YXJkczpyYXdBcmdHdWFyZHMuc2xpY2UoYXJnR3VhcmRzLmxlbmd0aCl9fTtcblxuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRBc3luY01ldGhvZD0oXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk9Plxue1xuY29uc3R7cmV0dXJuR3VhcmR9PW1ldGhvZEd1YXJkUGF5bG9hZDtcbmNvbnN0IGlzUmF3UmV0dXJuPWlzUmF3R3VhcmQocmV0dXJuR3VhcmQpO1xuXG5jb25zdHthd2FpdEluZGV4ZXMscmF3TWV0aG9kR3VhcmRQYXlsb2FkfT1kZXN5bmMobWV0aG9kR3VhcmRQYXlsb2FkKTtcbmNvbnN0IG1hdGNoQ29uZmlnPWJ1aWxkTWF0Y2hDb25maWcocmF3TWV0aG9kR3VhcmRQYXlsb2FkKTtcblxuY29uc3R7YXN5bmNNZXRob2R9PXtcbi8vXG5hc3luY01ldGhvZCguLi5hcmdzKXtcbmNvbnN0IGF3YWl0TGlzdD1bXTtcbmZvcihjb25zdCBpIG9mIGF3YWl0SW5kZXhlcyl7XG5pZihpPj1hcmdzLmxlbmd0aCl7XG5icmVhaztcbiB9XG5hd2FpdExpc3QucHVzaChhcmdzW2ldKTtcbiB9XG5jb25zdCBwPVByb21pc2UuYWxsKGF3YWl0TGlzdCk7XG5jb25zdCBzeW5jQXJncz1bLi4uYXJnc107XG5jb25zdCByZXN1bHRQPUUud2hlbihcbnAsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8oYXdhaXRlZEFyZ3MpPT57XG5mb3IobGV0IGo9MDtqPGF3YWl0ZWRBcmdzLmxlbmd0aDtqKz0xKXtcbnN5bmNBcmdzW2F3YWl0SW5kZXhlc1tqXV09YXdhaXRlZEFyZ3Nbal07XG4gfVxuLy9cbi8vXG5jb25zdCBjb250ZXh0PWdldENvbnRleHQodGhpcyk7XG5jb25zdCByZWFsQXJncz1kZWZlbmRTeW5jQXJncyhzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbCk7XG5yZXR1cm4gYXBwbHkoYmVoYXZpb3JNZXRob2QsY29udGV4dCxyZWFsQXJncyk7XG4gfSk7XG5cbnJldHVybiBFLndoZW4ocmVzdWx0UCwoZnVsZmlsbG1lbnQpPT57XG5pZighaXNSYXdSZXR1cm4pe1xubXVzdE1hdGNoKGhhcmRlbihmdWxmaWxsbWVudCkscmV0dXJuR3VhcmQsIGAke2xhYmVsfTogcmVzdWx0YCk7XG4gfVxucmV0dXJuIGZ1bGZpbGxtZW50O1xuIH0pLmNhdGNoKChyZWFzb24pPT5cbi8vXG4vL1xuUHJvbWlzZS5yZWplY3QodG9UaHJvd2FibGUocmVhc29uKSkpO1xuXG4gfX07XG5cbnJldHVybiBhc3luY01ldGhvZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kTWV0aG9kPShnZXRDb250ZXh0LGJlaGF2aW9yTWV0aG9kLG1ldGhvZEd1YXJkLGxhYmVsKT0+e1xuY29uc3QgbWV0aG9kR3VhcmRQYXlsb2FkPWdldE1ldGhvZEd1YXJkUGF5bG9hZChtZXRob2RHdWFyZCk7XG5jb25zdHtjYWxsS2luZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuaWYoY2FsbEtpbmQ9PT0nc3luYycpe1xucmV0dXJuIGRlZmVuZFN5bmNNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk7XG5cbiB9ZWxzZXtcbmFzc2VydChjYWxsS2luZD09PSdhc3luYycpO1xucmV0dXJuIGRlZmVuZEFzeW5jTWV0aG9kKFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgYmluZE1ldGhvZD0oXG5tZXRob2RUYWcsXG5jb250ZXh0UHJvdmlkZXIsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkKT0+XG57XG5hc3NlcnQudHlwZW9mKGJlaGF2aW9yTWV0aG9kLCdmdW5jdGlvbicpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBnZXRDb250ZXh0PShyZXByZXNlbnRhdGl2ZSk9PntcbnJlcHJlc2VudGF0aXZlfHxcbi8vXG5GYWlsIGBNZXRob2QgJHttZXRob2RUYWd9IGNhbGxlZCB3aXRob3V0ICd0aGlzJyBvYmplY3RgO1xuY29uc3QgY29udGV4dD1jb250ZXh0UHJvdmlkZXIocmVwcmVzZW50YXRpdmUpO1xuaWYoY29udGV4dD09PXVuZGVmaW5lZCl7XG50aHJvdyBGYWlsIGAke3EoXG5tZXRob2RUYWcpXG4gfSBtYXkgb25seSBiZSBhcHBsaWVkIHRvIGEgdmFsaWQgaW5zdGFuY2U6ICR7cmVwcmVzZW50YXRpdmV9YDtcbiB9XG5yZXR1cm4gY29udGV4dDtcbiB9O1xuXG5jb25zdCBtZXRob2Q9ZGVmZW5kTWV0aG9kKFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQsXG5tZXRob2RUYWcpO1xuXG5cbmRlZmluZVByb3BlcnRpZXMobWV0aG9kLHtcbm5hbWU6e3ZhbHVlOm1ldGhvZFRhZ30sXG5sZW5ndGg6e3ZhbHVlOmJlaGF2aW9yTWV0aG9kLmxlbmd0aH19KTtcblxucmV0dXJuIG1ldGhvZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmZW5kUHJvdG90eXBlPShcbnRhZyxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kcyxcbnRoaXNmdWxNZXRob2RzPWZhbHNlLFxuaW50ZXJmYWNlR3VhcmQ9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBwcm90b3R5cGU9e307XG5jb25zdCBtZXRob2ROYW1lcz1nZXRNZXRob2ROYW1lcyhiZWhhdmlvck1ldGhvZHMpLmZpbHRlcihcbi8vXG4vL1xuKGtleSk9PntcbmlmKGtleSE9PSdjb25zdHJ1Y3Rvcicpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgY29uc3RydWN0b3I9YmVoYXZpb3JNZXRob2RzLmNvbnN0cnVjdG9yO1xucmV0dXJuIShcbmNvbnN0cnVjdG9yLnByb3RvdHlwZSYmXG5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3I9PT1jb25zdHJ1Y3Rvcik7XG5cbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBtZXRob2RHdWFyZHM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGRlZmF1bHRHdWFyZHM7XG5pZihpbnRlcmZhY2VHdWFyZCl7XG5jb25zdHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHM6bWcsXG5zeW1ib2xNZXRob2RHdWFyZHMsXG5zbG9wcHksXG5kZWZhdWx0R3VhcmRzOmRnPXNsb3BweT8ncGFzc2FibGUnOmRlZmF1bHRHdWFyZHN9PVxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGludGVyZmFjZUd1YXJkKTtcbm1ldGhvZEd1YXJkcz1oYXJkZW4oe1xuLi4ubWcsXG4uLi4oc3ltYm9sTWV0aG9kR3VhcmRzJiZcbmZyb21FbnRyaWVzKGdldENvcHlNYXBFbnRyaWVzKHN5bWJvbE1ldGhvZEd1YXJkcykpKX0pO1xuXG5kZWZhdWx0R3VhcmRzPWRnO1xue1xuY29uc3QgbWV0aG9kR3VhcmROYW1lcz1vd25LZXlzKG1ldGhvZEd1YXJkcyk7XG5jb25zdCB1bmltcGxlbWVudGVkPWxpc3REaWZmZXJlbmNlKG1ldGhvZEd1YXJkTmFtZXMsbWV0aG9kTmFtZXMpO1xudW5pbXBsZW1lbnRlZC5sZW5ndGg9PT0wfHxcbkZhaWwgYG1ldGhvZHMgJHtxKHVuaW1wbGVtZW50ZWQpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmlmKGRlZmF1bHRHdWFyZHM9PT11bmRlZmluZWQpe1xuY29uc3QgdW5ndWFyZGVkPWxpc3REaWZmZXJlbmNlKG1ldGhvZE5hbWVzLG1ldGhvZEd1YXJkTmFtZXMpO1xudW5ndWFyZGVkLmxlbmd0aD09PTB8fFxuRmFpbCBgbWV0aG9kcyAke3EodW5ndWFyZGVkKX0gbm90IGd1YXJkZWQgYnkgJHtxKGludGVyZmFjZU5hbWUpfWA7XG4gfVxuIH1cbiB9XG5cbmZvcihjb25zdCBwcm9wIG9mIG1ldGhvZE5hbWVzKXtcbmNvbnN0IG9yaWdpbmFsTWV0aG9kPWJlaGF2aW9yTWV0aG9kc1twcm9wXTtcbmNvbnN0e3NoaWZ0ZWRNZXRob2R9PXtcbnNoaWZ0ZWRNZXRob2QoLi4uYXJncyl7XG5yZXR1cm4gb3JpZ2luYWxNZXRob2QodGhpcywuLi5hcmdzKTtcbiB9fTtcblxuY29uc3QgYmVoYXZpb3JNZXRob2Q9dGhpc2Z1bE1ldGhvZHM/b3JpZ2luYWxNZXRob2Q6c2hpZnRlZE1ldGhvZDtcbi8vXG4vL1xubGV0IG1ldGhvZEd1YXJkPW1ldGhvZEd1YXJkcyYmbWV0aG9kR3VhcmRzW3Byb3BdO1xuaWYoIW1ldGhvZEd1YXJkKXtcbnN3aXRjaChkZWZhdWx0R3VhcmRzKXtcbmNhc2UgdW5kZWZpbmVkOntcbmlmKHRoaXNmdWxNZXRob2RzKXtcbm1ldGhvZEd1YXJkPVBhc3NhYmxlTWV0aG9kR3VhcmQ7XG4gfWVsc2V7XG5tZXRob2RHdWFyZD1SYXdNZXRob2RHdWFyZDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3Bhc3NhYmxlJzp7XG5tZXRob2RHdWFyZD1QYXNzYWJsZU1ldGhvZEd1YXJkO1xuYnJlYWs7XG4gfVxuY2FzZSdyYXcnOntcbm1ldGhvZEd1YXJkPVJhd01ldGhvZEd1YXJkO1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZGVmYXVsdEd1YXJkcyAke3EoZGVmYXVsdEd1YXJkcyl9YDtcbiB9fVxuXG4gfVxucHJvdG90eXBlW3Byb3BdPWJpbmRNZXRob2QoXG4gYEluICR7cShwcm9wKX0gbWV0aG9kIG9mICgke3RhZ30pYCxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQpO1xuXG4gfVxuXG5pZighaGFzT3duUHJvcGVydHlPZihwcm90b3R5cGUsR0VUX0lOVEVSRkFDRV9HVUFSRCkpe1xuY29uc3QgZ2V0SW50ZXJmYWNlR3VhcmRNZXRob2Q9e1xuW0dFVF9JTlRFUkZBQ0VfR1VBUkRdKCl7XG4vL1xucmV0dXJuIGludGVyZmFjZUd1YXJkO1xuIH19W1xuR0VUX0lOVEVSRkFDRV9HVUFSRF07XG5wcm90b3R5cGVbR0VUX0lOVEVSRkFDRV9HVUFSRF09YmluZE1ldGhvZChcbiBgSW4gJHtxKEdFVF9JTlRFUkZBQ0VfR1VBUkQpfSBtZXRob2Qgb2YgKCR7dGFnfSlgLFxuY29udGV4dFByb3ZpZGVyLFxuZ2V0SW50ZXJmYWNlR3VhcmRNZXRob2QsXG5QYXNzYWJsZU1ldGhvZEd1YXJkKTtcblxuIH1cblxucmV0dXJuIEZhcihcbnRhZyxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wcm90b3R5cGUpO1xuXG5cbiB9OyRozY9fb25jZS5kZWZlbmRQcm90b3R5cGUoZGVmZW5kUHJvdG90eXBlKTtcbmhhcmRlbihkZWZlbmRQcm90b3R5cGUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmZW5kUHJvdG90eXBlS2l0PShcbnRhZyxcbmNvbnRleHRQcm92aWRlcktpdCxcbmJlaGF2aW9yTWV0aG9kc0tpdCxcbnRoaXNmdWxNZXRob2RzPWZhbHNlLFxuaW50ZXJmYWNlR3VhcmRLaXQ9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBmYWNldE5hbWVzPW93bktleXMoYmVoYXZpb3JNZXRob2RzS2l0KS5zb3J0KCk7XG5mYWNldE5hbWVzLmxlbmd0aD4xfHxGYWlsIGBBIG11bHRpLWZhY2V0IG9iamVjdCBtdXN0IGhhdmUgbXVsdGlwbGUgZmFjZXRzYDtcbmlmKGludGVyZmFjZUd1YXJkS2l0KXtcbmNvbnN0IGludGVyZmFjZU5hbWVzPW93bktleXMoaW50ZXJmYWNlR3VhcmRLaXQpO1xuY29uc3QgZXh0cmFJbnRlcmZhY2VOYW1lcz1saXN0RGlmZmVyZW5jZShmYWNldE5hbWVzLGludGVyZmFjZU5hbWVzKTtcbmV4dHJhSW50ZXJmYWNlTmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBJbnRlcmZhY2VzICR7cShleHRyYUludGVyZmFjZU5hbWVzKX0gbm90IGltcGxlbWVudGVkIGJ5ICR7cSh0YWcpfWA7XG5jb25zdCBleHRyYUZhY2V0TmFtZXM9bGlzdERpZmZlcmVuY2UoaW50ZXJmYWNlTmFtZXMsZmFjZXROYW1lcyk7XG5leHRyYUZhY2V0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBGYWNldHMgJHtxKGV4dHJhRmFjZXROYW1lcyl9IG9mICR7cSh0YWcpfSBub3QgZ3VhcmRlZCBieSBpbnRlcmZhY2VzYDtcbiB9XG5jb25zdCBjb250ZXh0TWFwTmFtZXM9b3duS2V5cyhjb250ZXh0UHJvdmlkZXJLaXQpO1xuY29uc3QgZXh0cmFDb250ZXh0TmFtZXM9bGlzdERpZmZlcmVuY2UoZmFjZXROYW1lcyxjb250ZXh0TWFwTmFtZXMpO1xuZXh0cmFDb250ZXh0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBDb250ZXh0cyAke3EoZXh0cmFDb250ZXh0TmFtZXMpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmNvbnN0IGV4dHJhRmFjZXROYW1lcz1saXN0RGlmZmVyZW5jZShjb250ZXh0TWFwTmFtZXMsZmFjZXROYW1lcyk7XG5leHRyYUZhY2V0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBGYWNldHMgJHtxKGV4dHJhRmFjZXROYW1lcyl9IG9mICR7cSh0YWcpfSBtaXNzaW5nIGNvbnRleHRzYDtcbmNvbnN0IHByb3RvS2l0PW9iamVjdE1hcChiZWhhdmlvck1ldGhvZHNLaXQsKGJlaGF2aW9yTWV0aG9kcyxmYWNldE5hbWUpPT5cbmRlZmVuZFByb3RvdHlwZShcbiBgJHt0YWd9ICR7U3RyaW5nKGZhY2V0TmFtZSl9YCxcbmNvbnRleHRQcm92aWRlcktpdFtmYWNldE5hbWVdLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHMsXG5pbnRlcmZhY2VHdWFyZEtpdCYmaW50ZXJmYWNlR3VhcmRLaXRbZmFjZXROYW1lXSkpO1xuXG5cbnJldHVybiBwcm90b0tpdDtcbiB9OyRozY9fb25jZS5kZWZlbmRQcm90b3R5cGVLaXQoZGVmZW5kUHJvdG90eXBlS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmVuZFByb3RvdHlwZSI6WyJkZWZlbmRQcm90b3R5cGUiXSwiZGVmZW5kUHJvdG90eXBlS2l0IjpbImRlZmVuZFByb3RvdHlwZUtpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABGkzxuNgIAADYCAAAlAAAAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZ2V0LWludGVyZmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiR0VUX0lOVEVSRkFDRV9HVUFSRCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHRVRfSU5URVJGQUNFX0dVQVJEPSdfX2dldEludGVyZmFjZUd1YXJkX18nO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuR0VUX0lOVEVSRkFDRV9HVUFSRChHRVRfSU5URVJGQUNFX0dVQVJEKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkdFVF9JTlRFUkZBQ0VfR1VBUkQiOlsiR0VUX0lOVEVSRkFDRV9HVUFSRCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAdAAAAQGVuZG8vZXhvLXYxLjUuNy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAtKmDhWAgAAVgIAAB0AAABAZW5kby9mYXItdjEuMS45L3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBlbmRvL2V2ZW50dWFsLXNlbmQiOltbIkUiLCJFIl1dLCJAZW5kby9wYXNzLXN0eWxlIjpbWyJGYXIiLCJGYXIiXSxbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXSxbInBhc3NTdHlsZU9mIiwicGFzc1N0eWxlT2YiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALiBafB0BwAAdAcAAB0AAABAZW5kby9tYXJzaGFsLXYxLjYuMi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiLCIuL3NyYy9tYXJzaGFsLmpzIiwiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiLCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyIsIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIiwiLi9zcmMvcmFua09yZGVyLmpzIiwiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sImV4cG9ydHMiOlsiYXNzZXJ0UmFua1NvcnRlZCIsImFzc2VydFJhbmtTb3J0ZWQiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJwYXJzZSIsInBhcnNlIixudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vc3JjL3R5cGVzLmpzIiwiQGVuZG8vcGFzcy1zdHlsZSJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanNcIiwgW11dLFtcIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzXCIsIFtdXSxbXCIuL3NyYy9yYW5rT3JkZXIuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzIjpbWyJRQ0xBU1MiLCJRQ0xBU1MiXV0sIi4vc3JjL21hcnNoYWwuanMiOltbIm1ha2VNYXJzaGFsIiwibWFrZU1hcnNoYWwiXV0sIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIjpbWyJzdHJpbmdpZnkiLCJzdHJpbmdpZnkiXSxbInBhcnNlIiwicGFyc2UiXV0sIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIjpbWyJkZWNvZGVUb0p1c3RpbiIsImRlY29kZVRvSnVzdGluIl1dLCIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qcyI6W1sibWFrZVBhc3NhYmxlS2l0IiwibWFrZVBhc3NhYmxlS2l0Il0sWyJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiXSxbIm1ha2VEZWNvZGVQYXNzYWJsZSIsIm1ha2VEZWNvZGVQYXNzYWJsZSJdLFsiaXNFbmNvZGVkUmVtb3RhYmxlIiwiaXNFbmNvZGVkUmVtb3RhYmxlIl0sWyJ6ZXJvUGFkIiwiemVyb1BhZCJdLFsicmVjb3JkTmFtZXMiLCJyZWNvcmROYW1lcyJdLFsicmVjb3JkVmFsdWVzIiwicmVjb3JkVmFsdWVzIl1dLCIuL3NyYy9yYW5rT3JkZXIuanMiOltbInRyaXZpYWxDb21wYXJhdG9yIiwidHJpdmlhbENvbXBhcmF0b3IiXSxbImFzc2VydFJhbmtTb3J0ZWQiLCJhc3NlcnRSYW5rU29ydGVkIl0sWyJjb21wYXJlUmFuayIsImNvbXBhcmVSYW5rIl0sWyJpc1JhbmtTb3J0ZWQiLCJpc1JhbmtTb3J0ZWQiXSxbInNvcnRCeVJhbmsiLCJzb3J0QnlSYW5rIl0sWyJjb21wYXJlQW50aVJhbmsiLCJjb21wYXJlQW50aVJhbmsiXSxbIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0IiwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiXSxbImdldFBhc3NTdHlsZUNvdmVyIiwiZ2V0UGFzc1N0eWxlQ292ZXIiXSxbImludGVyc2VjdFJhbmtDb3ZlcnMiLCJpbnRlcnNlY3RSYW5rQ292ZXJzIl0sWyJ1bmlvblJhbmtDb3ZlcnMiLCJ1bmlvblJhbmtDb3ZlcnMiXV0sIkBlbmRvL3Bhc3Mtc3R5bGUiOltbImRlZXBseUZ1bGZpbGxlZCIsImRlZXBseUZ1bGZpbGxlZCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA12xbpVlDAABZQwAAKgAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVQYXNzYWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiaXNFbmNvZGVkUmVtb3RhYmxlIiwibWFrZURlY29kZVBhc3NhYmxlIiwibWFrZUVuY29kZVBhc3NhYmxlIiwibWFrZVBhc3NhYmxlS2l0IiwicGFzc1N0eWxlUHJlZml4ZXMiLCJyZWNvcmROYW1lcyIsInJlY29yZFZhbHVlcyIsInplcm9QYWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0VGFnLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsYXNzZXJ0UmVjb3JkLGlzRXJyb3JMaWtlLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsYixxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYlwiLCBbJGjNj19hID0+IChiID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e2Zyb21FbnRyaWVzLGlzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vL1xuY29uc3QgckMwPS9bXFx4MDAtXFx4MUZdLztcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBnZXRTdWZmaXg9KHN0cixpbmRleCk9PmluZGV4PT09MD9zdHI6c3RyLnN1YnN0cmluZyhpbmRleCk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZE5hbWVzPShyZWNvcmQpPT5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuKC8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyZWNvcmQpLnNvcnQoKS5yZXZlcnNlKCkpOyRozY9fb25jZS5yZWNvcmROYW1lcyhyZWNvcmROYW1lcyk7XG5oYXJkZW4ocmVjb3JkTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICByZWNvcmRWYWx1ZXM9KHJlY29yZCxuYW1lcyk9PlxuaGFyZGVuKG5hbWVzLm1hcCgobmFtZSk9PnJlY29yZFtuYW1lXSkpOyRozY9fb25jZS5yZWNvcmRWYWx1ZXMocmVjb3JkVmFsdWVzKTtcbmhhcmRlbihyZWNvcmRWYWx1ZXMpO1xuXG5jb25zdCB6ZXJvZXM9QXJyYXkoMTYpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGkpPT4nMCcucmVwZWF0KGkpKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHplcm9QYWQ9KG4sc2l6ZSk9PntcbmNvbnN0IG5TdHI9IGAke259YDtcbmNvbnN0IGZpbGxMZW49c2l6ZS1uU3RyLmxlbmd0aDtcbmlmKGZpbGxMZW49PT0wKXJldHVybiBuU3RyO1xuYXNzZXJ0KGZpbGxMZW4+MCYmZmlsbExlbjx6ZXJvZXMubGVuZ3RoKTtcbnJldHVybiBgJHt6ZXJvZXNbZmlsbExlbl19JHtuU3RyfWA7XG4gfTskaM2PX29uY2UuemVyb1BhZCh6ZXJvUGFkKTtcbmhhcmRlbih6ZXJvUGFkKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBhc051bWJlcj1uZXcgRmxvYXQ2NEFycmF5KDEpO1xuY29uc3QgYXNCaXRzPW5ldyBCaWdVaW50NjRBcnJheShhc051bWJlci5idWZmZXIpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5jb25zdCBDYW5vbmljYWxOYU5CaXRzPSdmZmY4MDAwMDAwMDAwMDAwJztcblxuLypcblxuXG4gKi9cbmNvbnN0IGVuY29kZUJpbmFyeTY0PShuKT0+e1xuLy9cbmlmKGlzKG4sLTApKXtcbm49MDtcbiB9ZWxzZSBpZihpcyhuLE5hTikpe1xucmV0dXJuIGBmJHtDYW5vbmljYWxOYU5CaXRzfWA7XG4gfVxuYXNOdW1iZXJbMF09bjtcbmxldCBiaXRzPWFzQml0c1swXTtcbmlmKG48MCl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5yZXR1cm4gYGYke3plcm9QYWQoYml0cy50b1N0cmluZygxNiksMTYpfWA7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmluYXJ5NjQ9KGVuY29kZWQsc2tpcD0wKT0+e1xuZW5jb2RlZC5jaGFyQXQoc2tpcCk9PT0nZid8fEZhaWwgYEVuY29kZWQgbnVtYmVyIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBiaXRzPUJpZ0ludCggYDB4JHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpfWApO1xuaWYoZW5jb2RlZC5jaGFyQXQoc2tpcCsxKTwnOCcpe1xuYml0c149MHhmZmZmZmZmZmZmZmZmZmZmbjtcbiB9ZWxzZXtcbmJpdHNePTB4ODAwMDAwMDAwMDAwMDAwMG47XG4gfVxuYXNCaXRzWzBdPWJpdHM7XG5jb25zdCByZXN1bHQ9YXNOdW1iZXJbMF07XG4haXMocmVzdWx0LC0wKXx8XG5GYWlsIGBVbmV4cGVjdGVkIG5lZ2F0aXZlIHplcm86ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmlnSW50PShuKT0+e1xuY29uc3QgYWJzPW48MG4/LW46bjtcbmNvbnN0IG5EaWdpdHM9YWJzLnRvU3RyaW5nKCkubGVuZ3RoO1xuY29uc3QgbERpZ2l0cz1uRGlnaXRzLnRvU3RyaW5nKCkubGVuZ3RoO1xuaWYobjwwbil7XG5yZXR1cm4gYG4ke1xuLy9cbi8vXG4nIycucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG4oMTAqKmxEaWdpdHMtbkRpZ2l0cykudG9TdHJpbmcoKS5wYWRTdGFydChsRGlnaXRzLCcwJylcbiB9OiR7XG4vL1xuKDEwbioqQmlnSW50KG5EaWdpdHMpK24pLnRvU3RyaW5nKCkucGFkU3RhcnQobkRpZ2l0cywnMCcpXG4gfWA7XG4gfWVsc2V7XG5yZXR1cm4gYHAke1xuLy9cbi8vXG4nficucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG5uRGlnaXRzXG4gfToke1xuLy9cbm5cbiB9YDtcbiB9XG4gfTtcblxuY29uc3QgckJpZ0ludFBheWxvYWQ9LyhbMC05XSspKDooWzAtOV0rJHwpfCkvcztcblxuLypcblxuXG4gKi9cbmNvbnN0IGRlY29kZUJpZ0ludD0oZW5jb2RlZCk9PntcbmNvbnN0IHR5cGVQcmVmaXg9ZW5jb2RlZC5jaGFyQXQoMCk7Ly9cbnR5cGVQcmVmaXg9PT0ncCd8fFxudHlwZVByZWZpeD09PSduJ3x8XG5GYWlsIGBFbmNvZGVkIGJpZ2ludCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbmNvbnN0e1xuaW5kZXg6bERpZ2l0cyxcbjE6c25EaWdpdHMsXG4yOnRhaWwsXG4zOmRpZ2l0c309XG5lbmNvZGVkLm1hdGNoKHJCaWdJbnRQYXlsb2FkKXx8RmFpbCBgRGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuXG5zbkRpZ2l0cy5sZW5ndGg9PT1sRGlnaXRzfHxcbkZhaWwgYFVuYXJ5LXByZWZpeGVkIGRlY2ltYWwgZGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG5EaWdpdHM9cGFyc2VJbnQoc25EaWdpdHMsMTApO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm5EaWdpdHM9MTAqKi8qICAgICAgICAgICAgICAgICAqL2xEaWdpdHMtbkRpZ2l0cztcbiB9XG5cbnRhaWwuY2hhckF0KDApPT09JzonfHxGYWlsIGBTZXBhcmF0b3IgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuZGlnaXRzLmxlbmd0aD09PW5EaWdpdHN8fFxuRmFpbCBgRml4ZWQtbGVuZ3RoIGRpZ2l0IHNlcXVlbmNlIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBuPUJpZ0ludChkaWdpdHMpO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm49LSgxMG4qKkJpZ0ludChuRGlnaXRzKS1uKTtcbiB9XG5cbnJldHVybiBuO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RyaW5nRXNjYXBlcz1BcnJheSgweDIyKS5cbmZpbGwodW5kZWZpbmVkKS5cbm1hcCgoXyxjcCk9PntcbnN3aXRjaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKSl7XG5jYXNlJyAnOlxucmV0dXJuJyFfJztcbmNhc2UnISc6XG5yZXR1cm4nIXwnO1xuZGVmYXVsdDpcbnJldHVybiBgISR7U3RyaW5nLmZyb21DaGFyQ29kZShjcCsweDIxKX1gO31cblxuIH0pO1xuc3RyaW5nRXNjYXBlc1snXicuY2hhckNvZGVBdCgwKV09J19AJztcbnN0cmluZ0VzY2FwZXNbJ18nLmNoYXJDb2RlQXQoMCldPSdfXyc7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KHN0cik9Plxuc3RyLnJlcGxhY2UoL1tcXDAtIV5fXS9nLChjaCk9PnN0cmluZ0VzY2FwZXNbY2guY2hhckNvZGVBdCgwKV0pO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+e1xucmV0dXJuIGVuY29kZWQucmVwbGFjZSgvKFtcXDAtIV9dKSgufFxcbik/L2csKGVzYyxwcmVmaXgsc3VmZml4KT0+e1xuc3dpdGNoKGVzYyl7XG5jYXNlJyFfJzpcbnJldHVybicgJztcbmNhc2UnIXwnOlxucmV0dXJuJyEnO1xuY2FzZSdfQCc6XG5yZXR1cm4nXic7XG5jYXNlJ19fJzpcbnJldHVybidfJztcbmRlZmF1bHQ6e1xuY29uc3QgY2g9LyogICAgICAgICAgICAgICAgICovc3VmZml4O1xuLy9cbi8vXG5wcmVmaXg9PT0nIScmJnN1ZmZpeCE9PXVuZGVmaW5lZCYmY2g+PSchJyYmY2g8PSdAJ3x8XG5GYWlsIGBpbnZhbGlkIHN0cmluZyBlc2NhcGU6ICR7cShlc2MpfWA7XG5yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaC5jaGFyQ29kZUF0KDApLTB4MjEpO1xuIH19XG5cbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KHN0cik9PnN0cjtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+ZW5jb2RlZDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVDb21wYWN0QXJyYXk9KGFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgY2hhcnM9WydeJ107XG5mb3IoY29uc3QgZWxlbWVudCBvZiBhcnJheSl7XG5jb25zdCBlbmM9ZW5jb2RlUGFzc2FibGUoZWxlbWVudCk7XG5jaGFycy5wdXNoKGVuYywnICcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmxldCBkZXB0aD0wO1xuLy9cbi8vXG5sZXQgbmV4dEluZGV4PXNraXArMTtcbmxldCBjdXJyZW50RWxlbWVudFN0YXJ0PXNraXArMTtcbmZvcihjb25zdHswOmNoLGluZGV4Oml9b2YgZW5jb2RlZC5tYXRjaEFsbCgvW1xcXiBdL2cpKXtcbmNvbnN0IGluZGV4PS8qICAgICAgICAgICAgICAgICAqL2k7XG5pZihpbmRleDw9c2tpcCl7XG5pZihpbmRleD09PXNraXApe1xuY2g9PT0nXid8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoY2g9PT0nXicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5kZXB0aCs9MTtcbiB9ZWxzZXtcbi8vXG5pZihpbmRleD09PW5leHRJbmRleCl7XG4vL1xuZGVwdGgtPTE7XG5kZXB0aD49MHx8XG4vL1xuRmFpbCBgdW5leHBlY3RlZCBhcnJheSBlbGVtZW50IHRlcm1pbmF0b3I6ICR7ZW5jb2RlZC5zbGljZShza2lwLGluZGV4KzIpfWA7XG4gfVxuaWYoZGVwdGg9PT0wKXtcbi8vXG5lbGVtZW50cy5wdXNoKFxuZGVjb2RlUGFzc2FibGUoZW5jb2RlZC5zbGljZShjdXJyZW50RWxlbWVudFN0YXJ0LGluZGV4KSkpO1xuXG5jdXJyZW50RWxlbWVudFN0YXJ0PWluZGV4KzE7XG4gfVxuIH1cbi8vXG5uZXh0SW5kZXg9aW5kZXgrMTtcbiB9XG5kZXB0aD09PTB8fEZhaWwgYHVudGVybWluYXRlZCBhcnJheTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xubmV4dEluZGV4PT09ZW5jb2RlZC5sZW5ndGh8fFxuRmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5IGVsZW1lbnQ6ICR7Z2V0U3VmZml4KFxuZW5jb2RlZCxcbmN1cnJlbnRFbGVtZW50U3RhcnQpXG4gfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ1snXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmZvcihjb25zdCBjIG9mIGVuYyl7XG5pZihjPT09J1xcdTAwMDAnfHxjPT09J1xcdTAwMDEnKXtcbmNoYXJzLnB1c2goJ1xcdTAwMDEnKTtcbiB9XG5jaGFycy5wdXNoKGMpO1xuIH1cbmNoYXJzLnB1c2goJ1xcdTAwMDAnKTtcbiB9XG5yZXR1cm4gY2hhcnMuam9pbignJyk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmNvbnN0IGVsZW1DaGFycz1bXTtcbi8vXG4vL1xubGV0IHN0aWxsVG9Ta2lwPXNraXArMTtcbmxldCBpbkVzY2FwZT1mYWxzZTtcbmZvcihjb25zdCBjIG9mIGVuY29kZWQpe1xuaWYoc3RpbGxUb1NraXA+MCl7XG5zdGlsbFRvU2tpcC09MTtcbmlmKHN0aWxsVG9Ta2lwPT09MCl7XG5jPT09J1snfHxGYWlsIGBFbmNvZGVkIGFycmF5IGV4cGVjdGVkOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG4gfVxuIH1lbHNlIGlmKGluRXNjYXBlKXtcbmM9PT0nXFx1MDAwMCd8fFxuYz09PSdcXHUwMDAxJ3x8XG5GYWlsIGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhZnRlciB1MDAwMSBlc2NhcGU6ICR7Y31gO1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAwJyl7XG5jb25zdCBlbmNvZGVkRWxlbWVudD1lbGVtQ2hhcnMuam9pbignJyk7XG5lbGVtQ2hhcnMubGVuZ3RoPTA7XG5jb25zdCBlbGVtZW50PWRlY29kZVBhc3NhYmxlKGVuY29kZWRFbGVtZW50KTtcbmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAxJyl7XG5pbkVzY2FwZT10cnVlO1xuLy9cbmNvbnRpbnVlO1xuIH1lbHNle1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfVxuaW5Fc2NhcGU9ZmFsc2U7XG4gfVxuIWluRXNjYXBlfHxGYWlsIGB1bmV4cGVjdGVkIGVuZCBvZiBlbmNvZGluZyAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5lbGVtQ2hhcnMubGVuZ3RoPT09MHx8XG5GYWlsIGBlbmNvZGluZyB0ZXJtaW5hdGVkIGVhcmx5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZWNvcmQ9KHJlY29yZCxlbmNvZGVBcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IG5hbWVzPXJlY29yZE5hbWVzKHJlY29yZCk7XG5jb25zdCB2YWx1ZXM9cmVjb3JkVmFsdWVzKHJlY29yZCxuYW1lcyk7XG5yZXR1cm4gYCgke2VuY29kZUFycmF5KGhhcmRlbihbbmFtZXMsdmFsdWVzXSksZW5jb2RlUGFzc2FibGUpfWA7XG4gfTtcblxuY29uc3QgZGVjb2RlUmVjb3JkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PScoJyk7XG4vL1xuLy9cbmNvbnN0IHVuemlwcGVkRW50cmllcz1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG51bnppcHBlZEVudHJpZXMubGVuZ3RoPT09Mnx8XG5GYWlsIGBleHBlY3RlZCBrZXlzLHZhbHVlcyBwYWlyOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5jb25zdFtrZXlzLHZhbHNdPXVuemlwcGVkRW50cmllcztcblxucGFzc1N0eWxlT2Yoa2V5cyk9PT0nY29weUFycmF5JyYmXG5wYXNzU3R5bGVPZih2YWxzKT09PSdjb3B5QXJyYXknJiZcbmtleXMubGVuZ3RoPT09dmFscy5sZW5ndGgmJlxua2V5cy5ldmVyeSgoa2V5KT0+dHlwZW9mIGtleT09PSdzdHJpbmcnKXx8XG5GYWlsIGBub3QgYSB2YWxpZCByZWNvcmQgZW5jb2Rpbmc6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0IG1hcEVudHJpZXM9a2V5cy5tYXAoKGtleSxpKT0+W2tleSx2YWxzW2ldXSk7XG5jb25zdCByZWNvcmQ9aGFyZGVuKGZyb21FbnRyaWVzKG1hcEVudHJpZXMpKTtcbmFzc2VydFJlY29yZChyZWNvcmQsJ2RlY29kZWQgcmVjb3JkJyk7XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0IGVuY29kZVRhZ2dlZD0odGFnZ2VkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+XG4gYDoke2VuY29kZUFycmF5KGhhcmRlbihbZ2V0VGFnKHRhZ2dlZCksdGFnZ2VkLnBheWxvYWRdKSxlbmNvZGVQYXNzYWJsZSl9YDtcblxuY29uc3QgZGVjb2RlVGFnZ2VkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PSc6Jyk7XG4vL1xuLy9cbmNvbnN0IHRhZ2dlZFBheWxvYWQ9ZGVjb2RlQXJyYXkoZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwKzEpO1xudGFnZ2VkUGF5bG9hZC5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIHRhZyxwYXlsb2FkIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W3RhZyxwYXlsb2FkXT10YWdnZWRQYXlsb2FkO1xucGFzc1N0eWxlT2YodGFnKT09PSdzdHJpbmcnfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHRhZ2dlZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIG1ha2VUYWdnZWQodGFnLHBheWxvYWQpO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVSZW1vdGFibGU9KHVuc2FmZUVuY29kZVJlbW90YWJsZSx2ZXJpZnlFbmNvZGluZyk9PntcbmNvbnN0IGVuY29kZVJlbW90YWJsZT0ocixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVJlbW90YWJsZShyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0ncid8fFxuRmFpbCBgUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcInJcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ1JlbW90YWJsZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVQcm9taXNlPSh1bnNhZmVFbmNvZGVQcm9taXNlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUHJvbWlzZT0ocCxpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVByb21pc2UocCxpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09Jz8nfHxcbkZhaWwgYFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiP1wiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUHJvbWlzZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUHJvbWlzZTtcbiB9O1xuXG5jb25zdCBtYWtlRW5jb2RlRXJyb3I9KHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlRXJyb3I9KGVycixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZUVycm9yKGVycixpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09JyEnfHxcbkZhaWwgYEVycm9yIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiFcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ0Vycm9yJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVFcnJvcjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbm5lckVuY29kZT0oZW5jb2RlU3RyaW5nU3VmZml4LGVuY29kZUFycmF5LG9wdGlvbnMpPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZTp1bnNhZmVFbmNvZGVSZW1vdGFibGUsXG5lbmNvZGVQcm9taXNlOnVuc2FmZUVuY29kZVByb21pc2UsXG5lbmNvZGVFcnJvcjp1bnNhZmVFbmNvZGVFcnJvcixcbnZlcmlmeUVuY29kaW5nPSgpPT57IH19PVxub3B0aW9ucztcbmNvbnN0IGVuY29kZVJlbW90YWJsZT1tYWtlRW5jb2RlUmVtb3RhYmxlKFxudW5zYWZlRW5jb2RlUmVtb3RhYmxlLFxudmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBlbmNvZGVQcm9taXNlPW1ha2VFbmNvZGVQcm9taXNlKHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpO1xuY29uc3QgZW5jb2RlRXJyb3I9bWFrZUVuY29kZUVycm9yKHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKTtcblxuY29uc3QgaW5uZXJFbmNvZGU9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6e1xucmV0dXJuJ3YnO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4neic7XG4gfVxuY2FzZSdudW1iZXInOntcbnJldHVybiBlbmNvZGVCaW5hcnk2NChwYXNzYWJsZSk7XG4gfVxuY2FzZSdzdHJpbmcnOntcbnJldHVybiBgcyR7ZW5jb2RlU3RyaW5nU3VmZml4KHBhc3NhYmxlKX1gO1xuIH1cbmNhc2UnYm9vbGVhbic6e1xucmV0dXJuIGBiJHtwYXNzYWJsZX1gO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5yZXR1cm4gZW5jb2RlQmlnSW50KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGVuY29kZVJlbW90YWJsZShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIGVuY29kZUVycm9yKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBlbmNvZGVQcm9taXNlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuLy9cbmNvbnN0IG5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5yZXR1cm4gYHkke2VuY29kZVN0cmluZ1N1ZmZpeChuYW1lKX1gO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gZW5jb2RlQXJyYXkocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xucmV0dXJuIGVuY29kZVJlY29yZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybiBlbmNvZGVUYWdnZWQocGFzc2FibGUsZW5jb2RlQXJyYXksaW5uZXJFbmNvZGUpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgYSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIHVzZWQgYXMgYSBjb2xsZWN0aW9uIHBhc3NhYmxlYDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckVuY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgbGliZXJhbERlY29kZXJzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICove1xuZGVjb2RlUmVtb3RhYmxlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlUHJvbWlzZTooX2VuY29kaW5nLF9pbm5lckRlY29kZSk9PnVuZGVmaW5lZCxcbmRlY29kZUVycm9yOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkfTtcblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRGVjb2RlPShkZWNvZGVTdHJpbmdTdWZmaXgsZGVjb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfT1vcHRpb25zO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlubmVyRGVjb2RlPShlbmNvZGVkLHNraXA9MCk9PntcbnN3aXRjaChlbmNvZGVkLmNoYXJBdChza2lwKSl7XG5jYXNlJ3YnOntcbnJldHVybiBudWxsO1xuIH1cbmNhc2Uneic6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJ2YnOntcbnJldHVybiBkZWNvZGVCaW5hcnk2NChlbmNvZGVkLHNraXApO1xuIH1cbmNhc2Uncyc6e1xucmV0dXJuIGRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbiB9XG5jYXNlJ2InOntcbmNvbnN0IHN1YnN0cmluZz1nZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpO1xuaWYoc3Vic3RyaW5nPT09J3RydWUnKXtcbnJldHVybiB0cnVlO1xuIH1lbHNlIGlmKHN1YnN0cmluZz09PSdmYWxzZScpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnRocm93IEZhaWwgYGV4cGVjdGVkIGVuY29kZWQgYm9vbGVhbiB0byBiZSBcImJ0cnVlXCIgb3IgXCJiZmFsc2VcIjogJHtzdWJzdHJpbmd9YDtcbiB9XG5jYXNlJ24nOlxuY2FzZSdwJzp7XG5yZXR1cm4gZGVjb2RlQmlnSW50KGdldFN1ZmZpeChlbmNvZGVkLHNraXApKTtcbiB9XG5jYXNlJ3InOntcbnJldHVybiBkZWNvZGVSZW1vdGFibGUoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnPyc6e1xucmV0dXJuIGRlY29kZVByb21pc2UoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnISc6e1xucmV0dXJuIGRlY29kZUVycm9yKGdldFN1ZmZpeChlbmNvZGVkLHNraXApLGlubmVyRGVjb2RlKTtcbiB9XG5jYXNlJ3knOntcbi8vXG5jb25zdCBuYW1lPWRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbnJldHVybiBwYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG4gfVxuY2FzZSdbJzpcbmNhc2UnXic6e1xuLy9cbnJldHVybiBkZWNvZGVBcnJheShlbmNvZGVkLGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnKCc6e1xucmV0dXJuIGRlY29kZVJlY29yZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnOic6e1xucmV0dXJuIGRlY29kZVRhZ2dlZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgaW52YWxpZCBkYXRhYmFzZSBrZXk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckRlY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBhc3NhYmxlS2l0PShvcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGU9KHIsXyk9PkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3J9YCxcbmVuY29kZVByb21pc2U9KHAsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwfWAsXG5lbmNvZGVFcnJvcj0oZXJyLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2Vycn1gLFxuZm9ybWF0PSdsZWdhY3lPcmRlcmVkJyxcblxuZGVjb2RlUmVtb3RhYmxlPShlbmNvZGluZyxfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZVByb21pc2U9KGVuY29kaW5nLF8pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZUVycm9yPShlbmNvZGluZyxfKT0+RmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gfT1cbm9wdGlvbnM7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZW5jb2RlUGFzc2FibGU7XG5jb25zdCBlbmNvZGVPcHRpb25zPXtlbmNvZGVSZW1vdGFibGUsZW5jb2RlUHJvbWlzZSxlbmNvZGVFcnJvcixmb3JtYXR9O1xuaWYoZm9ybWF0PT09J2NvbXBhY3RPcmRlcmVkJyl7XG5jb25zdCBsaWJlcmFsRGVjb2RlPW1ha2VJbm5lckRlY29kZShcbmRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXgsXG5kZWNvZGVDb21wYWN0QXJyYXksXG5saWJlcmFsRGVjb2RlcnMpO1xuXG4vKlxuXG5cblxuICAgICAqL1xuY29uc3QgdmVyaWZ5RW5jb2Rpbmc9KGVuY29kaW5nLGxhYmVsKT0+e1xuIWVuY29kaW5nLm1hdGNoKHJDMCl8fFxuRmFpbCBgJHtiKFxubGFiZWwpXG4gfSBlbmNvZGluZyBtdXN0IG5vdCBjb250YWluIGEgQzAgY29udHJvbCBjaGFyYWN0ZXI6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRlY29kZWQ9ZGVjb2RlQ29tcGFjdEFycmF5KCBgXnYgJHtlbmNvZGluZ30gdiBgLGxpYmVyYWxEZWNvZGUpO1xuaXNBcnJheShkZWNvZGVkKSYmXG5kZWNvZGVkLmxlbmd0aD09PTMmJlxuZGVjb2RlZFswXT09PW51bGwmJlxuZGVjb2RlZFsyXT09PW51bGx8fFxuRmFpbCBgJHtiKGxhYmVsKX0gZW5jb2RpbmcgbXVzdCBiZSBlbWJlZGRhYmxlOiAke2VuY29kaW5nfWA7XG4gfTtcbmNvbnN0IGVuY29kZUNvbXBhY3Q9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmVuY29kZUNvbXBhY3RBcnJheSxcbnsuLi5lbmNvZGVPcHRpb25zLHZlcmlmeUVuY29kaW5nfSk7XG5cbmVuY29kZVBhc3NhYmxlPShwYXNzYWJsZSk9PiBgfiR7ZW5jb2RlQ29tcGFjdChwYXNzYWJsZSl9YDtcbiB9ZWxzZSBpZihmb3JtYXQ9PT0nbGVnYWN5T3JkZXJlZCcpe1xuZW5jb2RlUGFzc2FibGU9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZW5jb2RlTGVnYWN5QXJyYXksXG5lbmNvZGVPcHRpb25zKTtcblxuIH1lbHNle1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIGZvcm1hdDogJHtxKGZvcm1hdCl9YDtcbiB9XG5cbmNvbnN0IGRlY29kZU9wdGlvbnM9e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfTtcbmNvbnN0IGRlY29kZUNvbXBhY3Q9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVMZWdhY3k9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZGVjb2RlTGVnYWN5QXJyYXksXG5kZWNvZGVPcHRpb25zKTtcblxuY29uc3QgZGVjb2RlUGFzc2FibGU9KGVuY29kZWQpPT57XG4vL1xuLy9cbi8vXG5pZihlbmNvZGVkLmNoYXJBdCgwKT09PSd+Jyl7XG5yZXR1cm4gZGVjb2RlQ29tcGFjdChlbmNvZGVkLDEpO1xuIH1cbnJldHVybiBkZWNvZGVMZWdhY3koZW5jb2RlZCk7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7ZW5jb2RlUGFzc2FibGUsZGVjb2RlUGFzc2FibGV9KTtcbiB9OyRozY9fb25jZS5tYWtlUGFzc2FibGVLaXQobWFrZVBhc3NhYmxlS2l0KTtcbmhhcmRlbihtYWtlUGFzc2FibGVLaXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVQYXNzYWJsZT0oZW5jb2RlT3B0aW9ucyk9PntcbmNvbnN0e2VuY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZW5jb2RlT3B0aW9ucyk7XG5yZXR1cm4gZW5jb2RlUGFzc2FibGU7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVBhc3NhYmxlKG1ha2VFbmNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZUVuY29kZVBhc3NhYmxlKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRGVjb2RlUGFzc2FibGU9KGRlY29kZU9wdGlvbnMpPT57XG5jb25zdHtkZWNvZGVQYXNzYWJsZX09bWFrZVBhc3NhYmxlS2l0KGRlY29kZU9wdGlvbnMpO1xucmV0dXJuIGRlY29kZVBhc3NhYmxlO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVQYXNzYWJsZShtYWtlRGVjb2RlUGFzc2FibGUpO1xuaGFyZGVuKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5cbmNvbnN0ICAgICAgICBpc0VuY29kZWRSZW1vdGFibGU9KGVuY29kZWQpPT5lbmNvZGVkLmNoYXJBdCgwKT09PSdyJzskaM2PX29uY2UuaXNFbmNvZGVkUmVtb3RhYmxlKGlzRW5jb2RlZFJlbW90YWJsZSk7XG5oYXJkZW4oaXNFbmNvZGVkUmVtb3RhYmxlKTtcblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhc3NTdHlsZVByZWZpeGVzPXtcbmVycm9yOichJyxcbmNvcHlSZWNvcmQ6JygnLFxudGFnZ2VkOic6JyxcbnByb21pc2U6Jz8nLFxuY29weUFycmF5OidbXicsXG5ib29sZWFuOidiJyxcbm51bWJlcjonZicsXG5iaWdpbnQ6J25wJyxcbnJlbW90YWJsZToncicsXG5zdHJpbmc6J3MnLFxubnVsbDondicsXG5zeW1ib2w6J3knLFxuLy9cbi8vXG4vL1xudW5kZWZpbmVkOid6J307JGjNj19vbmNlLnBhc3NTdHlsZVByZWZpeGVzKHBhc3NTdHlsZVByZWZpeGVzKTtcblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKHBhc3NTdHlsZVByZWZpeGVzLG51bGwpO1xuaGFyZGVuKHBhc3NTdHlsZVByZWZpeGVzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlY29yZE5hbWVzIjpbInJlY29yZE5hbWVzIl0sInJlY29yZFZhbHVlcyI6WyJyZWNvcmRWYWx1ZXMiXSwiemVyb1BhZCI6WyJ6ZXJvUGFkIl0sIm1ha2VQYXNzYWJsZUtpdCI6WyJtYWtlUGFzc2FibGVLaXQiXSwibWFrZUVuY29kZVBhc3NhYmxlIjpbIm1ha2VFbmNvZGVQYXNzYWJsZSJdLCJtYWtlRGVjb2RlUGFzc2FibGUiOlsibWFrZURlY29kZVBhc3NhYmxlIl0sImlzRW5jb2RlZFJlbW90YWJsZSI6WyJpc0VuY29kZWRSZW1vdGFibGUiXSwicGFzc1N0eWxlUHJlZml4ZXMiOlsicGFzc1N0eWxlUHJlZml4ZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX5zwMlIiAABSIgAAKwAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVUb0NhcERhdGEuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIlFDTEFTUyIsIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSIsIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsaXNFcnJvckxpa2UsbWFrZVRhZ2dlZCxpc09iamVjdCxnZXRUYWcsaGFzT3duUHJvcGVydHlPZixhc3NlcnRQYXNzYWJsZVN5bWJvbCxuYW1lRm9yUGFzc2FibGVTeW1ib2wscGFzc2FibGVTeW1ib2xGb3JOYW1lLFgsRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsXG5kZWZpbmVQcm9wZXJ0aWVzLFxuaXMsXG5lbnRyaWVzLFxuZnJvbUVudHJpZXMsXG5mcmVlemV9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUUNMQVNTPSdAcWNsYXNzJzskaM2PX29uY2UuUUNMQVNTKFFDTEFTUyk7XG5cblxuLypcblxuXG4gKi9cbmNvbnN0IGhhc1FDbGFzcz0oZW5jb2RlZCk9Pmhhc093blByb3BlcnR5T2YoZW5jb2RlZCxRQ0xBU1MpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBxY2xhc3NNYXRjaGVzPShlbmNvZGVkLHFjbGFzcyk9PlxuaXNPYmplY3QoZW5jb2RlZCkmJlxuIWlzQXJyYXkoZW5jb2RlZCkmJlxuaGFzUUNsYXNzKGVuY29kZWQpJiZcbmVuY29kZWRbUUNMQVNTXT09PXFjbGFzcztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnRFbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9KHJlbSk9PkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3JlbX1gO1xuXG5jb25zdCBkb250RW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT0ocHJvbSk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwcm9tfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVFcnJvclRvQ2FwRGF0YT0oZXJyKT0+RmFpbCBgZXJyb3Igb2JqZWN0IHVuZXhwZWN0ZWQ6ICR7ZXJyfWA7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVRvQ2FwRGF0YT0oZW5jb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPWRvbnRFbmNvZGVSZW1vdGFibGVUb0NhcERhdGEsXG5lbmNvZGVQcm9taXNlVG9DYXBEYXRhPWRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhLFxuZW5jb2RlRXJyb3JUb0NhcERhdGE9ZG9udEVuY29kZUVycm9yVG9DYXBEYXRhfT1cbmVuY29kZU9wdGlvbnM7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBlbmNvZGVUb0NhcERhdGFSZWN1cj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdzdHJpbmcnOntcbi8vXG5yZXR1cm4gcGFzc2FibGU7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybntbUUNMQVNTXTondW5kZWZpbmVkJ307XG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4ocGFzc2FibGUpKXtcbnJldHVybntbUUNMQVNTXTonTmFOJ307XG4gfWVsc2UgaWYocGFzc2FibGU9PT1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106J0luZmluaXR5J307XG4gfWVsc2UgaWYocGFzc2FibGU9PT0tSW5maW5pdHkpe1xucmV0dXJue1tRQ0xBU1NdOictSW5maW5pdHknfTtcbiB9XG4vL1xucmV0dXJuIGlzKHBhc3NhYmxlLC0wKT8wOnBhc3NhYmxlO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5yZXR1cm57XG5bUUNMQVNTXTonYmlnaW50JyxcbmRpZ2l0czpTdHJpbmcocGFzc2FibGUpfTtcblxuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5jb25zdCBuYW1lPS8qICAgICAgICAgICAgICAgICAqL25hbWVGb3JQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5yZXR1cm57XG5bUUNMQVNTXTonc3ltYm9sJyxcbm5hbWV9O1xuXG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5pZihoYXNPd25Qcm9wZXJ0eU9mKHBhc3NhYmxlLFFDTEFTUykpe1xuLy9cbmNvbnN0e1tRQ0xBU1NdOnFjbGFzc1ZhbHVlLC4uLnJlc3R9PXBhc3NhYmxlO1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD17XG5bUUNMQVNTXTonaGlsYmVydCcsXG5vcmlnaW5hbDplbmNvZGVUb0NhcERhdGFSZWN1cihxY2xhc3NWYWx1ZSl9O1xuXG5pZihvd25LZXlzKHJlc3QpLmxlbmd0aD49MSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXN1bHQucmVzdD1lbmNvZGVUb0NhcERhdGFSZWN1cihmcmVlemUocmVzdCkpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuLy9cbi8vXG4vL1xuY29uc3QgbmFtZXM9b3duS2V5cyhwYXNzYWJsZSkuc29ydCgpO1xucmV0dXJuIGZyb21FbnRyaWVzKFxubmFtZXMubWFwKChuYW1lKT0+W25hbWUsZW5jb2RlVG9DYXBEYXRhUmVjdXIocGFzc2FibGVbbmFtZV0pXSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBwYXNzYWJsZS5tYXAoZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5yZXR1cm57XG5bUUNMQVNTXTondGFnZ2VkJyxcbnRhZzpnZXRUYWcocGFzc2FibGUpLFxucGF5bG9hZDplbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZS5wYXlsb2FkKX07XG5cbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVSZW1vdGFibGVUb0NhcERhdGEoXG5wYXNzYWJsZSxcbmVuY29kZVRvQ2FwRGF0YVJlY3VyKTtcblxuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxuLy9cbnRocm93IEZhaWwgYGludGVybmFsOiBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MpXG4gfSAke3EoJ3Nsb3QnKX06ICR7ZW5jb2RlZH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVQcm9taXNlVG9DYXBEYXRhKHBhc3NhYmxlLGVuY29kZVRvQ2FwRGF0YVJlY3VyKTtcbmlmKHFjbGFzc01hdGNoZXMoZW5jb2RlZCwnc2xvdCcpKXtcbnJldHVybiBlbmNvZGVkO1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBQcm9taXNlIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ3Nsb3QnKVxuIH06ICR7ZW5jb2RlZH1gO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdlcnJvcicpKXtcbnJldHVybiBlbmNvZGVkO1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUyxcbidlcnJvcicpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiBVbnJlY29nbml6ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5jb25zdCBlbmNvZGVUb0NhcERhdGE9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKGVuY29kZUVycm9yVG9DYXBEYXRhKHBhc3NhYmxlLGVuY29kZVRvQ2FwRGF0YVJlY3VyKSk7XG4gfVxucmV0dXJuIGhhcmRlbihlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZSkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YSk7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVRvQ2FwRGF0YShtYWtlRW5jb2RlVG9DYXBEYXRhKTtcbmhhcmRlbihtYWtlRW5jb2RlVG9DYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnREZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YT0oc2xvdEVuY29kaW5nKT0+XG5GYWlsIGByZW1vdGFibGUgb3IgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Nsb3RFbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZUVycm9yRnJvbUNhcERhdGE9KGVycm9yRW5jb2RpbmcpPT5cbkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyb3JFbmNvZGluZ31gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVGcm9tQ2FwRGF0YT0oZGVjb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhPWRvbnREZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGE9ZG9udERlY29kZUVycm9yRnJvbUNhcERhdGF9PVxuZGVjb2RlT3B0aW9ucztcblxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE9PT1kZWNvZGVQcm9taXNlRnJvbUNhcERhdGF8fFxuRmFpbCBgQW4gaW1wbGVtZW50YXRpb24gcmVzdHJpY3Rpb24gZm9yIG5vdzogSWYgZWl0aGVyIGRlY29kZVJlbW90YWJsZUZyb21DYXBEYXRhIG9yIGRlY29kZVByb21pc2VGcm9tQ2FwRGF0YSBpcyBwcm92aWRlZCwgYm90aCBtdXN0IGJlIHByb3ZpZGVkIGFuZCB0aGV5IG11c3QgYmUgdGhlIHNhbWU6ICR7cShcbmRlY29kZVJlbW90YWJsZUZyb21DYXBEYXRhKVxuIH0gdnMgJHtxKGRlY29kZVByb21pc2VGcm9tQ2FwRGF0YSl9YDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVjb2RlRnJvbUNhcERhdGE9KGpzb25FbmNvZGVkKT0+e1xuaWYoIWlzT2JqZWN0KGpzb25FbmNvZGVkKSl7XG4vL1xucmV0dXJuIGpzb25FbmNvZGVkO1xuIH1cbmlmKGlzQXJyYXkoanNvbkVuY29kZWQpKXtcbnJldHVybiBqc29uRW5jb2RlZC5tYXAoKGVuY29kZWRWYWwpPT5kZWNvZGVGcm9tQ2FwRGF0YShlbmNvZGVkVmFsKSk7XG4gfWVsc2UgaWYoaGFzUUNsYXNzKGpzb25FbmNvZGVkKSl7XG5jb25zdCBxY2xhc3M9anNvbkVuY29kZWRbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkICR7cShRQ0xBU1MpfSB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5zd2l0Y2gocWNsYXNzKXtcbi8vXG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJ05hTic6e1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJ0luZmluaXR5Jzp7XG5yZXR1cm4gSW5maW5pdHk7XG4gfVxuY2FzZSctSW5maW5pdHknOntcbnJldHVybi1JbmZpbml0eTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1qc29uRW5jb2RlZDtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm4gQmlnSW50KGRpZ2l0cyk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3I7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PWpzb25FbmNvZGVkO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3R7dGFnLHBheWxvYWR9PWpzb25FbmNvZGVkO1xucmV0dXJuIG1ha2VUYWdnZWQodGFnLGRlY29kZUZyb21DYXBEYXRhKHBheWxvYWQpKTtcbiB9XG5jYXNlJ3Nsb3QnOntcbi8vXG4vL1xuLy9cbmNvbnN0IGRlY29kZWQ9ZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEoXG5qc29uRW5jb2RlZCxcbmRlY29kZUZyb21DYXBEYXRhKTtcblxuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBkZWNvZGVkO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGRlY29kZWQ9ZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG5pZihwYXNzU3R5bGVPZihkZWNvZGVkKT09PSdlcnJvcicpe1xucmV0dXJuIGRlY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IGRlY29kZUVycm9yRnJvbUNhcERhdGEgb3B0aW9uIG11c3QgcmV0dXJuIGFuIGVycm9yOiAke2RlY29kZWR9YDtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PWpzb25FbmNvZGVkO1xuaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwnb3JpZ2luYWwnKXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtqc29uRW5jb2RlZH1gO1xuLy9cbmNvbnN0IHJlc3VsdD17W1FDTEFTU106ZGVjb2RlRnJvbUNhcERhdGEob3JpZ2luYWwpfTtcbmlmKGhhc093blByb3BlcnR5T2YoanNvbkVuY29kZWQsJ3Jlc3QnKSl7XG5jb25zdCBpc05vbkVtcHR5T2JqZWN0PVxudHlwZW9mIHJlc3Q9PT0nb2JqZWN0JyYmXG5yZXN0IT09bnVsbCYmXG5vd25LZXlzKHJlc3QpLmxlbmd0aD49MTtcbmlmKCFpc05vbkVtcHR5T2JqZWN0KXtcbnRocm93IEZhaWwgYFJlc3QgZW5jb2RpbmcgbXVzdCBiZSBhIG5vbi1lbXB0eSBvYmplY3Q6ICR7cmVzdH1gO1xuIH1cbmNvbnN0IHJlc3RPYmo9ZGVjb2RlRnJvbUNhcERhdGEocmVzdCk7XG4vL1xuLy9cbi8vXG4haGFzT3duUHJvcGVydHlPZihyZXN0T2JqLFFDTEFTUyl8fFxuRmFpbCBgUmVzdCBtdXN0IG5vdCBjb250YWluIGl0cyBvd24gZGVmaW5pdGlvbiBvZiAke3EoUUNMQVNTKX1gO1xuZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyZXN0T2JqKSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuY2FzZSdpYmlkJzp7XG50aHJvdyBGYWlsIGBUaGUgY2FwRGF0YSBwcm90b2NvbCBubyBsb25nZXIgc3VwcG9ydHMgJHtxKFFDTEFTUyl9ICR7cShcbnFjbGFzcylcbiB9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZXtcbmFzc2VydCh0eXBlb2YganNvbkVuY29kZWQ9PT0nb2JqZWN0JyYmanNvbkVuY29kZWQhPT1udWxsKTtcbmNvbnN0IGRlY29kZUVudHJ5PShbbmFtZSxlbmNvZGVkVmFsXSk9PntcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgJHtxKG5hbWUpfSBvZiAke2pzb25FbmNvZGVkfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnJldHVybltuYW1lLGRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpXTtcbiB9O1xuY29uc3QgZGVjb2RlZEVudHJpZXM9ZW50cmllcyhqc29uRW5jb2RlZCkubWFwKGRlY29kZUVudHJ5KTtcbnJldHVybiBmcm9tRW50cmllcyhkZWNvZGVkRW50cmllcyk7XG4gfVxuIH07XG5yZXR1cm4gaGFyZGVuKGRlY29kZUZyb21DYXBEYXRhKTtcbiB9OyRozY9fb25jZS5tYWtlRGVjb2RlRnJvbUNhcERhdGEobWFrZURlY29kZUZyb21DYXBEYXRhKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlFDTEFTUyI6WyJRQ0xBU1MiXSwibWFrZUVuY29kZVRvQ2FwRGF0YSI6WyJtYWtlRW5jb2RlVG9DYXBEYXRhIl0sIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSI6WyJtYWtlRGVjb2RlRnJvbUNhcERhdGEiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAD0obqy4iAAAuIgAALQAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZURlY29kZUZyb21TbWFsbGNhcHMiLCJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsaXNFcnJvckxpa2UsbWFrZVRhZ2dlZCxnZXRUYWcsaGFzT3duUHJvcGVydHlPZixhc3NlcnRQYXNzYWJsZVN5bWJvbCxuYW1lRm9yUGFzc2FibGVTeW1ib2wscGFzc2FibGVTeW1ib2xGb3JOYW1lLFgsRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7aXMsZW50cmllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG5jb25zdCBCQU5HPSchJy5jaGFyQ29kZUF0KDApO1xuY29uc3QgREFTSD0nLScuY2hhckNvZGVBdCgwKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RhcnRzU3BlY2lhbD0oZW5jb2RlZFN0cik9PntcbmlmKGVuY29kZWRTdHI9PT0nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbmNvbnN0IGNvZGU9ZW5jb2RlZFN0ci5jaGFyQ29kZUF0KDApO1xuLy9cbnJldHVybiBCQU5HPD1jb2RlJiZjb2RlPD1EQVNIO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHM9KHJlbSk9PlxuRmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9TbWFsbGNhcHM9KHByb20pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7cHJvbX1gO1xuXG5jb25zdCBkb250RW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyKT0+XG5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtxKGVycil9YDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9TbWFsbGNhcHM9KGVuY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPWRvbnRFbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz1kb250RW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz1kb250RW5jb2RlRXJyb3JUb1NtYWxsY2Fwc309XG5lbmNvZGVPcHRpb25zO1xuXG5jb25zdCBhc3NlcnRFbmNvZGVkRXJyb3I9KGVuY29kaW5nKT0+e1xudHlwZW9mIGVuY29kaW5nPT09J29iamVjdCcmJmhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpfHxcbkZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGhhdmUgXCIjZXJyb3JcIiBwcm9wZXJ0eTogJHtxKFxuZW5jb2RpbmcpXG4gfWA7XG4vL1xuY29uc3QgbWVzc2FnZT1lbmNvZGluZ1snI2Vycm9yJ107XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnJiYoXG4hc3RhcnRzU3BlY2lhbChtZXNzYWdlKXx8bWVzc2FnZS5jaGFyQXQoMCk9PT0nIScpfHxcbkZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGhhdmUgc3RyaW5nIG1lc3NhZ2U6ICR7cShtZXNzYWdlKX1gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xuaWYoc3RhcnRzU3BlY2lhbChwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gYCEke3Bhc3NhYmxlfWA7XG4gfVxuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJuJyN1bmRlZmluZWQnO1xuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKHBhc3NhYmxlKSl7XG5yZXR1cm4nI05hTic7XG4gfWVsc2UgaWYocGFzc2FibGU9PT1JbmZpbml0eSl7XG5yZXR1cm4nI0luZmluaXR5JztcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm4nIy1JbmZpbml0eSc7XG4gfVxuLy9cbnJldHVybiBpcyhwYXNzYWJsZSwtMCk/MDpwYXNzYWJsZTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3Qgc3RyPVN0cmluZyhwYXNzYWJsZSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAqL3Bhc3NhYmxlPDBuP3N0cjpgKyR7c3RyfWApO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5jb25zdCBuYW1lPS8qICAgICAgICAgICAgICAgICAqL25hbWVGb3JQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5yZXR1cm4gYCUke25hbWV9YDtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbmNvbnN0IG5hbWVzPW93bktleXMocGFzc2FibGUpLnNvcnQoKTtcbnJldHVybiBmcm9tRW50cmllcyhcbm5hbWVzLm1hcCgobmFtZSk9PltcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIobmFtZSksXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlW25hbWVdKV0pKTtcblxuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBwYXNzYWJsZS5tYXAoZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbicjdGFnJzplbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKGdldFRhZyhwYXNzYWJsZSkpLFxucGF5bG9hZDplbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHMoXG5wYXNzYWJsZSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuXG5pZih0eXBlb2YgcmVzdWx0PT09J3N0cmluZycmJnJlc3VsdC5jaGFyQXQoMCk9PT0nJCcpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCIkXCI6ICR7cmVzdWx0fWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzKFxucGFzc2FibGUsXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcblxuaWYodHlwZW9mIHJlc3VsdD09PSdzdHJpbmcnJiZyZXN1bHQuY2hhckF0KDApPT09JyYnKXtcbnJldHVybiByZXN1bHQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiJlwiOiAke3Jlc3VsdH1gO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVFcnJvclRvU21hbGxjYXBzKHBhc3NhYmxlLGVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuYXNzZXJ0RW5jb2RlZEVycm9yKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogVW5yZWNvZ25pemVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCByZXN1bHQ9aGFyZGVuKFxuZW5jb2RlRXJyb3JUb1NtYWxsY2FwcyhwYXNzYWJsZSxlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKSk7XG5cbmFzc2VydEVuY29kZWRFcnJvcihyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGUpKTtcbiB9O1xucmV0dXJuIGhhcmRlbihlbmNvZGVUb1NtYWxsY2Fwcyk7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVRvU21hbGxjYXBzKG1ha2VFbmNvZGVUb1NtYWxsY2Fwcyk7XG5oYXJkZW4obWFrZUVuY29kZVRvU21hbGxjYXBzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnREZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRvbnREZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT5cbkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT5cbkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7cShlbmNvZGluZyl9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwcz0oZGVjb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2Fwcz1kb250RGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2FwcyxcbmRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVQcm9taXNlRnJvbVNtYWxsY2FwcyxcbmRlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz1kb250RGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzfT1cbmRlY29kZU9wdGlvbnM7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlY29kZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+e1xuc3dpdGNoKHR5cGVvZiBlbmNvZGluZyl7XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOntcbnJldHVybiBlbmNvZGluZztcbiB9XG5jYXNlJ3N0cmluZyc6e1xuaWYoIXN0YXJ0c1NwZWNpYWwoZW5jb2RpbmcpKXtcbnJldHVybiBlbmNvZGluZztcbiB9XG5jb25zdCBjPWVuY29kaW5nLmNoYXJBdCgwKTtcbnN3aXRjaChjKXtcbmNhc2UnISc6e1xuLy9cbnJldHVybiBlbmNvZGluZy5zbGljZSgxKTtcbiB9XG5jYXNlJyUnOntcbnJldHVybiBwYXNzYWJsZVN5bWJvbEZvck5hbWUoZW5jb2Rpbmcuc2xpY2UoMSkpO1xuIH1cbmNhc2UnIyc6e1xuc3dpdGNoKGVuY29kaW5nKXtcbmNhc2UnI3VuZGVmaW5lZCc6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJyNOYU4nOntcbnJldHVybiBOYU47XG4gfVxuY2FzZScjSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJyMtSW5maW5pdHknOntcbnJldHVybi1JbmZpbml0eTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5rbm93biBjb25zdGFudCBcIiR7cShlbmNvZGluZyl9XCJgLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9XG5jYXNlJysnOlxuY2FzZSctJzp7XG5yZXR1cm4gQmlnSW50KGVuY29kaW5nKTtcbiB9XG5jYXNlJyQnOntcbmNvbnN0IHJlc3VsdD1kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxuLy9cbmlmKHBhc3NTdHlsZU9mKHJlc3VsdCkhPT0ncmVtb3RhYmxlJyl7XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2FwcyBvcHRpb24gbXVzdCByZXR1cm4gYSByZW1vdGFibGU6ICR7cmVzdWx0fWA7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG5jYXNlJyYnOntcbmNvbnN0IHJlc3VsdD1kZWNvZGVQcm9taXNlRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbmlmKHBhc3NTdHlsZU9mKHJlc3VsdCkhPT0ncHJvbWlzZScpe1xuRmFpbCBgaW50ZXJuYWw6IGRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhIHByb21pc2U6ICR7cmVzdWx0fWA7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYFNwZWNpYWwgY2hhciAke3EoXG5jKVxuIH0gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U6ICR7ZW5jb2Rpbmd9YDtcbiB9fVxuXG4gfVxuY2FzZSdvYmplY3QnOntcbmlmKGVuY29kaW5nPT09bnVsbCl7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuXG5pZihpc0FycmF5KGVuY29kaW5nKSl7XG5yZXR1cm4gZW5jb2RpbmcubWFwKCh2YWwpPT5kZWNvZGVGcm9tU21hbGxjYXBzKHZhbCkpO1xuIH1cblxuaWYoaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI3RhZycpKXtcbmNvbnN0eycjdGFnJzp0YWcscGF5bG9hZCwuLi5yZXN0fT1lbmNvZGluZztcbnR5cGVvZiB0YWc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBWYWx1ZSBvZiBcIiN0YWdcIiwgdGhlIHRhZywgbXVzdCBiZSBhIHN0cmluZzogJHtlbmNvZGluZ31gO1xub3duS2V5cyhyZXN0KS5sZW5ndGg9PT0wfHxcbkZhaWwgYCN0YWcgcmVjb3JkIHVuZXhwZWN0ZWQgcHJvcGVydGllczogJHtxKG93bktleXMocmVzdCkpfWA7XG5yZXR1cm4gbWFrZVRhZ2dlZChcbmRlY29kZUZyb21TbWFsbGNhcHModGFnKSxcbmRlY29kZUZyb21TbWFsbGNhcHMocGF5bG9hZCkpO1xuXG4gfVxuXG5pZihoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjZXJyb3InKSl7XG5jb25zdCByZXN1bHQ9ZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxucGFzc1N0eWxlT2YocmVzdWx0KT09PSdlcnJvcid8fFxuRmFpbCBgaW50ZXJuYWw6IGRlY29kZUVycm9yRnJvbVNtYWxsY2FwcyBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7cmVzdWx0fWA7XG5yZXR1cm4gcmVzdWx0O1xuIH1cblxuY29uc3QgZGVjb2RlRW50cnk9KFtlbmNvZGVkTmFtZSxlbmNvZGVkVmFsXSk9PntcbnR5cGVvZiBlbmNvZGVkTmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYFByb3BlcnR5IG5hbWUgJHtxKFxuZW5jb2RlZE5hbWUpXG4gfSBvZiAke2VuY29kaW5nfSBtdXN0IGJlIGEgc3RyaW5nYDtcbmVuY29kZWROYW1lLmNoYXJBdCgwKSE9PScjJ3x8XG5GYWlsIGBVbnJlY29nbml6ZWQgcmVjb3JkIHR5cGUgJHtxKGVuY29kZWROYW1lKX06ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IG5hbWU9ZGVjb2RlRnJvbVNtYWxsY2FwcyhlbmNvZGVkTmFtZSk7XG50eXBlb2YgbmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYERlY29kZWQgcHJvcGVydHkgbmFtZSAke25hbWV9IGZyb20gJHtlbmNvZGluZ30gbXVzdCBiZSBhIHN0cmluZ2A7XG5yZXR1cm5bbmFtZSxkZWNvZGVGcm9tU21hbGxjYXBzKGVuY29kZWRWYWwpXTtcbiB9O1xuY29uc3QgZGVjb2RlZEVudHJpZXM9ZW50cmllcyhlbmNvZGluZykubWFwKGRlY29kZUVudHJ5KTtcbnJldHVybiBmcm9tRW50cmllcyhkZWNvZGVkRW50cmllcyk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiB1bnJlY29nbml6ZWQgSlNPTiB0eXBlb2YgJHtxKFxudHlwZW9mIGVuY29kaW5nKVxuIH06ICR7ZW5jb2Rpbmd9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG4gfTskaM2PX29uY2UubWFrZURlY29kZUZyb21TbWFsbGNhcHMobWFrZURlY29kZUZyb21TbWFsbGNhcHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVuY29kZVRvU21hbGxjYXBzIjpbIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABFCzL9ECMAABAjAAAqAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwtanVzdGluLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCIuL2VuY29kZVRvQ2FwRGF0YS5qcyJdLCJleHBvcnRzIjpbImRlY29kZVRvSnVzdGluIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxnZXRFcnJvckNvbnN0cnVjdG9yLGlzT2JqZWN0LHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxxLFgsRmFpbCxRQ0xBU1M7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjNj19hID0+IChOYXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRFcnJvckNvbnN0cnVjdG9yXCIsIFskaM2PX2EgPT4gKGdldEVycm9yQ29uc3RydWN0b3IgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbW1wiUUNMQVNTXCIsIFskaM2PX2EgPT4gKFFDTEFTUyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7c3RyaW5naWZ5OnF1b3RlfT1KU09OO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VZZXNJbmRlbnRlcj0oKT0+e1xuY29uc3Qgc3RyaW5ncz1bXTtcbmxldCBsZXZlbD0wO1xubGV0IG5lZWRTcGFjZT1mYWxzZTtcbmNvbnN0IGxpbmU9KCk9Pntcbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2goJ1xcbicsJyAgJy5yZXBlYXQobGV2ZWwpKTtcbiB9O1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PntcbmxldmVsKz0xO1xuaWYobmVlZFNwYWNlKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpO1xuIH0sXG5saW5lLFxubmV4dDoodG9rZW4pPT57XG5pZihuZWVkU3BhY2UmJnRva2VuIT09JywnKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT10cnVlO1xucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5hc3NlcnQobGV2ZWw+PTEpO1xubGV2ZWwtPTE7XG5saW5lKCk7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PntcbmFzc2VydC5lcXVhbChsZXZlbCwwKTtcbnJldHVybiBzdHJpbmdzLmpvaW4oJycpO1xuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWRQYWlyUGF0dGVybj0vXig/Olxcd1xcd3w8PHw+PnxcXCtcXCt8LS18PCF8LT4pJC87XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VOb0luZGVudGVyPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaW5ncz1bXTtcbnJldHVybiBoYXJkZW4oe1xub3Blbjoob3BlbkJyYWNrZXQpPT5zdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpLFxubGluZTooKT0+c3RyaW5ncy5sZW5ndGgsXG5uZXh0Oih0b2tlbik9PntcbmlmKHN0cmluZ3MubGVuZ3RoPj0xKXtcbmNvbnN0IGxhc3Q9c3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXTtcbi8vXG5pZihsYXN0Lmxlbmd0aD49MSYmdG9rZW4ubGVuZ3RoPj0xKXtcbmNvbnN0IHBhaXI9IGAke2xhc3RbbGFzdC5sZW5ndGgtMV19JHt0b2tlblswXX1gO1xuaWYoYmFkUGFpclBhdHRlcm4udGVzdChwYWlyKSl7XG5zdHJpbmdzLnB1c2goJyAnKTtcbiB9XG4gfVxuIH1cbnJldHVybiBzdHJpbmdzLnB1c2godG9rZW4pO1xuIH0sXG5jbG9zZTooY2xvc2VCcmFja2V0KT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEmJnN0cmluZ3Nbc3RyaW5ncy5sZW5ndGgtMV09PT0nLCcpe1xuc3RyaW5ncy5wb3AoKTtcbiB9XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PnN0cmluZ3Muam9pbignJyl9KTtcblxuIH07XG5cbmNvbnN0IGlkZW50UGF0dGVybj0vXlthLXpBLVpdXFx3KiQvO1xuaGFyZGVuKGlkZW50UGF0dGVybik7XG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVUb0p1c3Rpbj0oZW5jb2Rpbmcsc2hvdWxkSW5kZW50PWZhbHNlLHNsb3RzPVtdKT0+e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmU9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xucmV0dXJuO1xuIH1cbi8vXG5hc3NlcnQudHlwZW9mKHJhd1RyZWUsJ29iamVjdCcpO1xuYXNzZXJ0KHJhd1RyZWUhPT1udWxsKTtcbmlmKFFDTEFTUyBpbiByYXdUcmVlKXtcbmNvbnN0IHFjbGFzcz1yYXdUcmVlW1FDTEFTU107XG50eXBlb2YgcWNsYXNzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBxY2xhc3MgdHlwZW9mICR7cSh0eXBlb2YgcWNsYXNzKX1gO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdOYU4nOlxuY2FzZSdJbmZpbml0eSc6XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PXJhd1RyZWU7XG50eXBlb2YgZGlnaXRzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBkaWdpdHMgdHlwZW9mICR7cSh0eXBlb2YgZGlnaXRzKX1gO1xucmV0dXJuO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG5yZXR1cm47XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbnJldHVybjtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3R7dGFnLHBheWxvYWR9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKHRhZywnc3RyaW5nJyk7XG5wcmVwYXJlKHBheWxvYWQpO1xucmV0dXJuO1xuIH1cbmNhc2Unc2xvdCc6e1xuY29uc3R7aW5kZXgsaWZhY2V9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbk5hdChpbmRleCk7XG5pZihpZmFjZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnQudHlwZW9mKGlmYWNlLCdzdHJpbmcnKTtcbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdoaWxiZXJ0Jzp7XG5jb25zdHtvcmlnaW5hbCxyZXN0fT1yYXdUcmVlO1xuJ29yaWdpbmFsJ2luIHJhd1RyZWV8fFxuRmFpbCBgSW52YWxpZCBIaWxiZXJ0IEhvdGVsIGVuY29kaW5nICR7cmF3VHJlZX1gO1xucHJlcGFyZShvcmlnaW5hbCk7XG5pZigncmVzdCdpbiByYXdUcmVlKXtcbmlmKHR5cGVvZiByZXN0IT09J29iamVjdCcpe1xudGhyb3cgRmFpbCBgUmVzdCAke3Jlc3R9IGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0YDtcbiB9XG5pZihyZXN0PT09bnVsbCl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgbnVsbGA7XG4gfVxuaWYoaXNBcnJheShyZXN0KSl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgYW4gYXJyYXlgO1xuIH1cbmlmKFFDTEFTUyBpbiByZXN0KXtcbnRocm93IEZhaWwgYFJlc3QgZW5jb2RpbmcgJHtyZXN0fSBtdXN0IG5vdCBjb250YWluICR7cShRQ0xBU1MpfWA7XG4gfVxuY29uc3QgbmFtZXM9b3duS2V5cyhyZXN0KTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG5wcmVwYXJlKHJlc3RbbmFtZV0pO1xuIH1cbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3R7bmFtZSxtZXNzYWdlfT1yYXdUcmVlO1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG5hbWUgdHlwZW9mICR7cSh0eXBlb2YgbmFtZSl9YDtcbiB9XG5nZXRFcnJvckNvbnN0cnVjdG9yKG5hbWUpIT09dW5kZWZpbmVkfHxcbkZhaWwgYE11c3QgYmUgdGhlIG5hbWUgb2YgYW4gRXJyb3IgY29uc3RydWN0b3IgJHtuYW1lfWA7XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBtZXNzYWdlKX1gO1xucmV0dXJuO1xuIH1cblxuZGVmYXVsdDp7XG5hc3NlcnQuZmFpbChYIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbnByZXBhcmUocmF3VHJlZVtpXSk7XG4gfVxuIH1lbHNle1xuY29uc3QgbmFtZXM9b3duS2V5cyhyYXdUcmVlKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmlmKHR5cGVvZiBuYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxucHJlcGFyZShyYXdUcmVlW25hbWVdKTtcbiB9XG4gfVxuIH07XG5cbmNvbnN0IG1ha2VJbmRlbnRlcj1zaG91bGRJbmRlbnQ/bWFrZVllc0luZGVudGVyOm1ha2VOb0luZGVudGVyO1xubGV0IG91dD1tYWtlSW5kZW50ZXIoKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGU9KHJhd1RyZWUpPT57XG4vL1xucmV0dXJuIHJlY3VyKHJhd1RyZWUpO1xuIH07XG5cbmNvbnN0IGRlY29kZVByb3BlcnR5PShuYW1lLHZhbHVlKT0+e1xub3V0LmxpbmUoKTtcbmlmKG5hbWU9PT0nX19wcm90b19fJyl7XG4vL1xuLy9cbi8vXG4vL1xub3V0Lm5leHQoIGBbXCJfX3Byb3RvX19cIl06YCk7XG4gfWVsc2UgaWYoaWRlbnRQYXR0ZXJuLnRlc3QobmFtZSkpe1xub3V0Lm5leHQoIGAke25hbWV9OmApO1xuIH1lbHNle1xub3V0Lm5leHQoIGAke3F1b3RlKG5hbWUpfTpgKTtcbiB9XG5kZWNvZGUodmFsdWUpO1xub3V0Lm5leHQoJywnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgcmVjdXI9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xuLy9cbnJldHVybiBvdXQubmV4dChxdW90ZShyYXdUcmVlKSk7XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbmFzc2VydC50eXBlb2YocWNsYXNzLCdzdHJpbmcnKTtcbmFzc2VydCghaXNBcnJheShyYXdUcmVlKSk7XG4vL1xuLy9cbi8vXG5zd2l0Y2gocmF3VHJlZVsnQHFjbGFzcyddKXtcbi8vXG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KHFjbGFzcyk7XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoZGlnaXRzLCdzdHJpbmcnKTtcbnJldHVybiBvdXQubmV4dCggYCR7QmlnSW50KGRpZ2l0cyl9bmApO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KCdTeW1ib2wuYXN5bmNJdGVyYXRvcicpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5jb25zdHtuYW1lfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbmNvbnN0IHN5bT1wYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG5hc3NlcnQudHlwZW9mKHN5bSwnc3ltYm9sJyk7XG5jb25zdCByZWdpc3RlcmVkTmFtZT1TeW1ib2wua2V5Rm9yKHN5bSk7XG5pZihyZWdpc3RlcmVkTmFtZT09PXVuZGVmaW5lZCl7XG5jb25zdCBtYXRjaD1BdEF0UHJlZml4UGF0dGVybi5leGVjKG5hbWUpO1xuYXNzZXJ0KG1hdGNoIT09bnVsbCk7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5hc3NlcnQoU3ltYm9sW3N1ZmZpeF09PT1zeW0pO1xuYXNzZXJ0KGlkZW50UGF0dGVybi50ZXN0KHN1ZmZpeCkpO1xucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLiR7c3VmZml4fWApO1xuIH1cbnJldHVybiBvdXQubmV4dCggYFN5bWJvbC5mb3IoJHtxdW90ZShyZWdpc3RlcmVkTmFtZSl9KWApO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbm91dC5uZXh0KCBgbWFrZVRhZ2dlZCgke3F1b3RlKHRhZyl9LGApO1xuZGVjb2RlKHBheWxvYWQpO1xucmV0dXJuIG91dC5uZXh0KCcpJyk7XG4gfVxuXG5jYXNlJ3Nsb3QnOntcbmxldHtpZmFjZX09cmF3VHJlZTtcbmNvbnN0IGluZGV4PU51bWJlcihOYXQocmF3VHJlZS5pbmRleCkpO1xuY29uc3QgbmVzdGVkUmVuZGVyPShhcmcpPT57XG5jb25zdCBvbGRPdXQ9b3V0O1xudHJ5e1xub3V0PW1ha2VOb0luZGVudGVyKCk7XG5kZWNvZGUoYXJnKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH1maW5hbGx5e1xub3V0PW9sZE91dDtcbiB9XG4gfTtcbmlmKGluZGV4PHNsb3RzLmxlbmd0aCl7XG5jb25zdCBzbG90PW5lc3RlZFJlbmRlcihzbG90c1tpbmRleF0pO1xuaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3RUb1ZhbCgke3Nsb3R9LCR7aWZhY2V9KWApO1xuIH1lbHNlIGlmKGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0sJHtpZmFjZX0pYCk7XG4gfVxuXG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG5vdXQub3BlbigneycpO1xuZGVjb2RlUHJvcGVydHkoUUNMQVNTLG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuYXNzZXJ0LnR5cGVvZihyZXN0LCdvYmplY3QnKTtcbmFzc2VydChyZXN0IT09bnVsbCk7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7cShcbm5hbWUpXG4gfSBvZiAke3Jlc3R9IG11c3QgYmUgYSBzdHJpbmdgO1xuIH1cbmRlY29kZVByb3BlcnR5KG5hbWUscmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybiBvdXQuY2xvc2UoJ30nKTtcbiB9XG5cbmNhc2UnZXJyb3InOntcbmNvbnN0e1xubmFtZSxcbm1lc3NhZ2UsXG5jYXVzZT11bmRlZmluZWQsXG5lcnJvcnM9dW5kZWZpbmVkfT1cbnJhd1RyZWU7XG5jYXVzZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBjYXVzZSBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbm5hbWUhPT0gYEFnZ3JlZ2F0ZUVycm9yYHx8XG5GYWlsIGBBZ2dyZWdhdGVFcnJvciBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbmVycm9ycz09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBlcnJvcnMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBtYXJzaGFsLWp1c3RpbmA7XG5yZXR1cm4gb3V0Lm5leHQoIGAke25hbWV9KCR7cXVvdGUobWVzc2FnZSl9KWApO1xuIH1cblxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBvdXQubmV4dCgnW10nKTtcbiB9ZWxzZXtcbm91dC5vcGVuKCdbJyk7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbm91dC5saW5lKCk7XG5kZWNvZGUocmF3VHJlZVtpXSk7XG5vdXQubmV4dCgnLCcpO1xuIH1cbnJldHVybiBvdXQuY2xvc2UoJ10nKTtcbiB9XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IG5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyYXdUcmVlKTtcbmlmKG5hbWVzLmxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCd7fScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ3snKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmRlY29kZVByb3BlcnR5KG5hbWUscmF3VHJlZVtuYW1lXSk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cbiB9XG4gfTtcbnByZXBhcmUoZW5jb2RpbmcpO1xuZGVjb2RlKGVuY29kaW5nKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH07JGjNj19vbmNlLmRlY29kZVRvSnVzdGluKGRlY29kZVRvSnVzdGluKTtcbmhhcmRlbihkZWNvZGVUb0p1c3Rpbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWNvZGVUb0p1c3RpbiI6WyJkZWNvZGVUb0p1c3RpbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABEEqbnXAYAAFwGAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vbWFyc2hhbC5qcyJdLCJleHBvcnRzIjpbInBhcnNlIiwic3RyaW5naWZ5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsbWFrZU1hcnNoYWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vbWFyc2hhbC5qc1wiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRozY9fYSA9PiAobWFrZU1hcnNoYWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0VmFsVG9TbG90PSh2YWwpPT5cbkZhaWwgYE1hcnNoYWwncyBzdHJpbmdpZnkgcmVqZWN0cyBwcmVzZW5jZXMgYW5kIHByb21pc2VzICR7dmFsfWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0U2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PlxuRmFpbCBgTWFyc2hhbCdzIHBhcnNlIG11c3Qgbm90IGVuY29kZSBhbnkgc2xvdHMgJHtzbG90fWA7XG5cbmNvbnN0IGJhZEFycmF5SGFuZGxlcj1oYXJkZW4oe1xuZ2V0OihfdGFyZ2V0LG5hbWUsX3JlY2VpdmVyKT0+e1xuaWYobmFtZT09PSdsZW5ndGgnKXtcbnJldHVybiAwO1xuIH1cbi8vXG50aHJvdyBGYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90IHBvc2l0aW9ucyAke25hbWV9YDtcbiB9fSk7XG5cblxuY29uc3QgYmFkQXJyYXk9aGFyZGVuKG5ldyBQcm94eShoYXJkZW4oW10pLGJhZEFycmF5SGFuZGxlcikpO1xuXG5jb25zdHtzZXJpYWxpemUsdW5zZXJpYWxpemV9PW1ha2VNYXJzaGFsKFxuZG9Ob3RDb252ZXJ0VmFsVG9TbG90LFxuZG9Ob3RDb252ZXJ0U2xvdFRvVmFsLFxue1xuZXJyb3JUYWdnaW5nOidvZmYnLFxuLy9cbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J2NhcGRhdGEnfSk7XG5cblxuXG4vKlxuXG5cbiAqL1xuY29uc3Qgc3RyaW5naWZ5PSh2YWwpPT5zZXJpYWxpemUodmFsKS5ib2R5OyRozY9fb25jZS5zdHJpbmdpZnkoc3RyaW5naWZ5KTtcbmhhcmRlbihzdHJpbmdpZnkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgcGFyc2U9KHN0cik9PlxudW5zZXJpYWxpemUoXG5oYXJkZW4oe1xuYm9keTpzdHIsXG5zbG90czpiYWRBcnJheX0pKTskaM2PX29uY2UucGFyc2UocGFyc2UpO1xuXG5cbmhhcmRlbihwYXJzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdHJpbmdpZnkiOlsic3RyaW5naWZ5Il0sInBhcnNlIjpbInBhcnNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACnDUk4qJwAAKicAACMAAABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC5qc3siaW1wb3J0cyI6WyJAZW5kby9uYXQiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCIuL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vZW5jb2RlVG9TbWFsbGNhcHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlTWFyc2hhbCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsYXNzZXJ0UGFzc2FibGUsZ2V0SW50ZXJmYWNlT2YsZ2V0RXJyb3JDb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eU9mLHRvUGFzc2FibGVFcnJvcixYLEZhaWwscSxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixvYmplY3RNYXAsUUNMQVNTLG1ha2VFbmNvZGVUb0NhcERhdGEsbWFrZURlY29kZUZyb21DYXBEYXRhLG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzLG1ha2VFbmNvZGVUb1NtYWxsY2FwczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjNj19hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1widG9QYXNzYWJsZUVycm9yXCIsIFskaM2PX2EgPT4gKHRvUGFzc2FibGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtbXCJRQ0xBU1NcIiwgWyRozY9fYSA9PiAoUUNMQVNTID0gJGjNj19hKV1dLFtcIm1ha2VFbmNvZGVUb0NhcERhdGFcIiwgWyRozY9fYSA9PiAobWFrZUVuY29kZVRvQ2FwRGF0YSA9ICRozY9fYSldXSxbXCJtYWtlRGVjb2RlRnJvbUNhcERhdGFcIiwgWyRozY9fYSA9PiAobWFrZURlY29kZUZyb21DYXBEYXRhID0gJGjNj19hKV1dXV0sW1wiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qc1wiLCBbW1wibWFrZURlY29kZUZyb21TbWFsbGNhcHNcIiwgWyRozY9fYSA9PiAobWFrZURlY29kZUZyb21TbWFsbGNhcHMgPSAkaM2PX2EpXV0sW1wibWFrZUVuY29kZVRvU21hbGxjYXBzXCIsIFskaM2PX2EgPT4gKG1ha2VFbmNvZGVUb1NtYWxsY2FwcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG5jb25zdHtkZWZpbmVQcm9wZXJ0aWVzfT1PYmplY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFZhbFRvU2xvdEZuPSh4KT0+eDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFNsb3RUb1ZhbEZuPSh4LF8pPT54O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWFyc2hhbD0oXG5jb252ZXJ0VmFsVG9TbG90PWRlZmF1bHRWYWxUb1Nsb3RGbixcbmNvbnZlcnRTbG90VG9WYWw9ZGVmYXVsdFNsb3RUb1ZhbEZuLFxue1xuZXJyb3JUYWdnaW5nPSdvbicsXG5tYXJzaGFsTmFtZT0nYW5vbi1tYXJzaGFsJyxcbi8vXG4vL1xuZXJyb3JJZE51bT0xMDAwMCxcbi8vXG4vL1xubWFyc2hhbFNhdmVFcnJvcj0oZXJyKT0+XG5jb25zb2xlLmxvZygnVGVtcG9yYXJ5IGxvZ2dpbmcgb2Ygc2VudCBlcnJvcicsZXJyKSxcbi8vXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdD0nY2FwZGF0YSd9PVxue30pPT5cbntcbmFzc2VydC50eXBlb2YobWFyc2hhbE5hbWUsJ3N0cmluZycpO1xuZXJyb3JUYWdnaW5nPT09J29uJ3x8XG5lcnJvclRhZ2dpbmc9PT0nb2ZmJ3x8XG5GYWlsIGBUaGUgZXJyb3JUYWdnaW5nIG9wdGlvbiBjYW4gb25seSBiZSBcIm9uXCIgb3IgXCJvZmZcIiAke2Vycm9yVGFnZ2luZ31gO1xuY29uc3QgbmV4dEVycm9ySWQ9KCk9PntcbmVycm9ySWROdW0rPTE7XG5yZXR1cm4gYGVycm9yOiR7bWFyc2hhbE5hbWV9IyR7ZXJyb3JJZE51bX1gO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCB0b0NhcERhdGE9KHJvb3QpPT57XG5jb25zdCBzbG90cz1bXTtcbi8vXG5jb25zdCBzbG90TWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBlbmNvZGVTbG90Q29tbW9uPShwYXNzYWJsZSk9PntcbmxldCBpbmRleD1zbG90TWFwLmdldChwYXNzYWJsZSk7XG5pZihpbmRleCE9PXVuZGVmaW5lZCl7XG4vL1xuYXNzZXJ0LnR5cGVvZihpbmRleCwnbnVtYmVyJyk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6dHJ1ZX0pO1xuIH1cblxuaW5kZXg9c2xvdHMubGVuZ3RoO1xuY29uc3Qgc2xvdD1jb252ZXJ0VmFsVG9TbG90KHBhc3NhYmxlKTtcbnNsb3RzLnB1c2goc2xvdCk7XG5zbG90TWFwLnNldChwYXNzYWJsZSxpbmRleCk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6ZmFsc2V9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yQ29tbW9uPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBtZXNzYWdlPWVuY29kZVJlY3VyKCBgJHtlcnIubWVzc2FnZX1gKTtcbmFzc2VydC50eXBlb2YobWVzc2FnZSwnc3RyaW5nJyk7XG5jb25zdCBuYW1lPWVuY29kZVJlY3VyKCBgJHtlcnIubmFtZX1gKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG4vL1xuLy9cbi8vXG5pZihlcnJvclRhZ2dpbmc9PT0nb24nKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBlcnJvcklkPWVuY29kZVJlY3VyKG5leHRFcnJvcklkKCkpO1xuYXNzZXJ0LnR5cGVvZihlcnJvcklkLCdzdHJpbmcnKTtcbmFubm90YXRlRXJyb3IoZXJyLFggYFNlbnQgYXMgJHtlcnJvcklkfWApO1xubWFyc2hhbFNhdmVFcnJvcihlcnIpO1xucmV0dXJuIGhhcmRlbih7ZXJyb3JJZCxtZXNzYWdlLG5hbWV9KTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe21lc3NhZ2UsbmFtZX0pO1xuIH1cbiB9O1xuXG5pZihzZXJpYWxpemVCb2R5Rm9ybWF0PT09J2NhcGRhdGEnKXtcbi8qXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb0NhcERhdGE9KHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBoYXJkZW4oe1tRQ0xBU1NdOidzbG90JyxpbmRleH0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGlmYWNlLGluZGV4fSk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPSh2YWwsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9DYXBEYXRhKHZhbCxnZXRJbnRlcmZhY2VPZih2YWwpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEocHJvbWlzZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAgICovXG5jb25zdCBlbmNvZGVFcnJvclRvQ2FwRGF0YT0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J2Vycm9yJywuLi5lcnJEYXRhfSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9DYXBEYXRhPW1ha2VFbmNvZGVUb0NhcERhdGEoe1xuZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhLFxuZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YSxcbmVuY29kZUVycm9yVG9DYXBEYXRhfSk7XG5cblxuY29uc3QgZW5jb2RlZD1lbmNvZGVUb0NhcERhdGEocm9vdCk7XG5jb25zdCBib2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG5ib2R5LFxuc2xvdHN9KTtcblxuIH1lbHNlIGlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nc21hbGxjYXBzJyl7XG4vKlxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb1NtYWxsY2Fwcz0ocHJlZml4LHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbi8vXG5pZihyZXBlYXQ9PT10cnVlfHxpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9YDtcbiB9XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9LiR7aWZhY2V9YDtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtb3RhYmxlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCckJyxyZW1vdGFibGUsZ2V0SW50ZXJmYWNlT2YocmVtb3RhYmxlKSk7XG5cbmNvbnN0IGVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb1NtYWxsY2FwcygnJicscHJvbWlzZSk7XG5cbmNvbnN0IGVuY29kZUVycm9yVG9TbWFsbGNhcHM9KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IGVyckRhdGE9ZW5jb2RlRXJyb3JDb21tb24oZXJyLGVuY29kZVJlY3VyKTtcbmNvbnN0e21lc3NhZ2UsLi4ucmVzdH09ZXJyRGF0YTtcbnJldHVybiBoYXJkZW4oeycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdH0pO1xuIH07XG5cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzPW1ha2VFbmNvZGVUb1NtYWxsY2Fwcyh7XG5lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2FwcyxcbmVuY29kZUVycm9yVG9TbWFsbGNhcHN9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvU21hbGxjYXBzKHJvb3QpO1xuY29uc3Qgc21hbGxjYXBzQm9keT1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbnJldHVybiBoYXJkZW4oe1xuLy9cbi8vXG5ib2R5OiBgIyR7c21hbGxjYXBzQm9keX1gLFxuc2xvdHN9KTtcblxuIH1lbHNle1xuLy9cbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBzZXJpYWxpemVCb2R5Rm9ybWF0OiAke3Eoc2VyaWFsaXplQm9keUZvcm1hdCl9YDtcbiB9XG4gfTtcblxuY29uc3QgbWFrZUZ1bGxSZXZpdmU9KHNsb3RzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZhbE1hcD1uZXcgTWFwKCk7XG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgZGVjb2RlU2xvdENvbW1vbj0oc2xvdERhdGEpPT57XG5jb25zdHtpZmFjZT11bmRlZmluZWQsaW5kZXgsLi4ucmVzdH09c2xvdERhdGE7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIHNsb3QgcHJvcGVydGllcyAke3Eob3duS2V5cyhyZXN0KSl9YDtcbmNvbnN0IGV4dGFudD12YWxNYXAuZ2V0KGluZGV4KTtcbmlmKGV4dGFudCl7XG5yZXR1cm4gZXh0YW50O1xuIH1cbi8vXG4vL1xuY29uc3Qgc2xvdD1zbG90c1tOdW1iZXIoTmF0KGluZGV4KSldO1xuY29uc3QgdmFsPWNvbnZlcnRTbG90VG9WYWwoc2xvdCxpZmFjZSk7XG52YWxNYXAuc2V0KGluZGV4LHZhbCk7XG5yZXR1cm4gdmFsO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVFcnJvckNvbW1vbj0oZXJyRGF0YSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1xuZXJyb3JJZD11bmRlZmluZWQsXG5tZXNzYWdlLFxubmFtZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWQsXG4uLi5yZXN0fT1cbmVyckRhdGE7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZE5hbWU9ZGVjb2RlUmVjdXIobmFtZSk7XG5jb25zdCBkTWVzc2FnZT1kZWNvZGVSZWN1cihtZXNzYWdlKTtcbi8vXG5jb25zdCBkRXJyb3JJZD0vKiAgICAgICAgICAgICAgICAgKi9lcnJvcklkJiZkZWNvZGVSZWN1cihlcnJvcklkKTtcbmlmKHR5cGVvZiBkTmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBkTmFtZSl9YDtcbiB9XG5pZih0eXBlb2YgZE1lc3NhZ2UhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG1lc3NhZ2UgdHlwZW9mICR7cSh0eXBlb2YgZE1lc3NhZ2UpfWA7XG4gfVxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihkTmFtZSl8fEVycm9yO1xuY29uc3QgZXJyb3JOYW1lPVxuZEVycm9ySWQ9PT11bmRlZmluZWQ/XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX1gOlxuIGBSZW1vdGUke2VyckNvbnN0cnVjdG9yLm5hbWV9KCR7ZEVycm9ySWR9KWA7XG5jb25zdCBvcHRpb25zPXtcbmVycm9yTmFtZSxcbnNhbml0aXplOmZhbHNlfTtcblxuaWYoY2F1c2Upe1xub3B0aW9ucy5jYXVzZT1kZWNvZGVSZWN1cihjYXVzZSk7XG4gfVxuaWYoZXJyb3JzKXtcbm9wdGlvbnMuZXJyb3JzPWRlY29kZVJlY3VyKGVycm9ycyk7XG4gfVxuY29uc3QgcmF3RXJyb3I9bWFrZUVycm9yKGRNZXNzYWdlLGVyckNvbnN0cnVjdG9yLG9wdGlvbnMpO1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlc2NzPW9iamVjdE1hcChyZXN0LChkYXRhKT0+KHtcbnZhbHVlOmRlY29kZVJlY3VyKGRhdGEpLFxud3JpdGFibGU6ZmFsc2UsXG5lbnVtZXJhYmxlOmZhbHNlLFxuY29uZmlndXJhYmxlOmZhbHNlfSkpO1xuXG5kZWZpbmVQcm9wZXJ0aWVzKHJhd0Vycm9yLGRlc2NzKTtcbmhhcmRlbihyYXdFcnJvcik7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKHJhd0Vycm9yKTtcbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShyYXdUcmVlLF9kZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uc2xvdERhdGF9PXJhd1RyZWU7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbihzbG90RGF0YSk7XG4gfTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0ocmF3VHJlZSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uZXJyRGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbihlcnJEYXRhLGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tQ2FwRGF0YT1tYWtlRGVjb2RlRnJvbUNhcERhdGEoe1xuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVFcnJvckZyb21DYXBEYXRhfSk7XG5cblxuY29uc3QgbWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzPShwcmVmaXgpPT57XG4vKlxuXG5cblxuICAgICAgICovXG5yZXR1cm4oc3RyaW5nRW5jb2RpbmcsX2RlY29kZVJlY3VyKT0+e1xuYXNzZXJ0KHN0cmluZ0VuY29kaW5nLmNoYXJBdCgwKT09PXByZWZpeCk7XG4vL1xuY29uc3QgaT1zdHJpbmdFbmNvZGluZy5pbmRleE9mKCcuJyk7XG5jb25zdCBpbmRleD1OdW1iZXIoc3RyaW5nRW5jb2Rpbmcuc2xpY2UoMSxpPDA/dW5kZWZpbmVkOmkpKTtcbi8vXG5jb25zdCBpZmFjZT1pPDA/dW5kZWZpbmVkOnN0cmluZ0VuY29kaW5nLnNsaWNlKGkrMSk7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbih7aWZhY2UsaW5kZXh9KTtcbiB9O1xuIH07XG5jb25zdCBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVTbG90RnJvbVNtYWxsY2FwcygnJCcpO1xuY29uc3QgZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCcmJyk7XG5cbmNvbnN0IGRlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcsZGVjb2RlUmVjdXIpPT57XG5jb25zdHsnI2Vycm9yJzptZXNzYWdlLC4uLnJlc3RFcnJEYXRhfT1lbmNvZGluZztcbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RFcnJEYXRhLCdtZXNzYWdlJyl8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIGVycm9yIHByb3BlcnR5ICR7cSgnbWVzc2FnZScpfWA7XG5yZXR1cm4gZGVjb2RlRXJyb3JDb21tb24oe21lc3NhZ2UsLi4ucmVzdEVyckRhdGF9LGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVGcm9tU21hbGxjYXBzKHtcbi8vXG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuLy9cbmRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzfSk7XG5cblxucmV0dXJuIGhhcmRlbih7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc30pO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oZGF0YSk9PntcbmNvbnN0e2JvZHksc2xvdHN9PWRhdGE7XG50eXBlb2YgYm9keT09PSdzdHJpbmcnfHxcbkZhaWwgYHVuc2VyaWFsaXplKCkgZ2l2ZW4gbm9uLWNhcGRhdGEgKC5ib2R5IGlzICR7Ym9keX0sIG5vdCBzdHJpbmcpYDtcbmlzQXJyYXkoZGF0YS5zbG90cyl8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLnNsb3RzIGFyZSBub3QgQXJyYXkpYDtcbmNvbnN0e3Jldml2ZUZyb21DYXBEYXRhLHJldml2ZUZyb21TbWFsbGNhcHN9PW1ha2VGdWxsUmV2aXZlKHNsb3RzKTtcbmxldCByZXN1bHQ7XG4vL1xuaWYoYm9keS5jaGFyQXQoMCk9PT0nIycpe1xuY29uc3Qgc21hbGxjYXBzQm9keT1ib2R5LnNsaWNlKDEpO1xuY29uc3QgZW5jb2Rpbmc9aGFyZGVuKEpTT04ucGFyc2Uoc21hbGxjYXBzQm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tU21hbGxjYXBzKGVuY29kaW5nKSk7XG4gfWVsc2V7XG5jb25zdCByYXdUcmVlPWhhcmRlbihKU09OLnBhcnNlKGJvZHkpKTtcbnJlc3VsdD1oYXJkZW4ocmV2aXZlRnJvbUNhcERhdGEocmF3VHJlZSkpO1xuIH1cbi8vXG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtcbnRvQ2FwRGF0YSxcbmZyb21DYXBEYXRhLFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnNlcmlhbGl6ZTp0b0NhcERhdGEsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG51bnNlcmlhbGl6ZTpmcm9tQ2FwRGF0YX0pO1xuXG4gfTskaM2PX29uY2UubWFrZU1hcnNoYWwobWFrZU1hcnNoYWwpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1hcnNoYWwiOlsibWFrZU1hcnNoYWwiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAu+NNiZwnAACcJwAAJQAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9yYW5rT3JkZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlUGFzc2FibGUuanMiXSwiZXhwb3J0cyI6WyJGdWxsUmFua0NvdmVyIiwiYXNzZXJ0UmFua1NvcnRlZCIsImNvbXBhcmF0b3JNaXJyb3JJbWFnZSIsImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVSYW5rIiwiY292ZXJlZEVudHJpZXMiLCJnZXRJbmRleENvdmVyIiwiZ2V0UGFzc1N0eWxlQ292ZXIiLCJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaXNSYW5rU29ydGVkIiwibWFrZUNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsInNvcnRCeVJhbmsiLCJ0cml2aWFsQ29tcGFyYXRvciIsInVuaW9uUmFua0NvdmVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRUYWcscGFzc1N0eWxlT2YsbmFtZUZvclBhc3NhYmxlU3ltYm9sLEZhaWwscSxwYXNzU3R5bGVQcmVmaXhlcyxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVBhc3NhYmxlLmpzXCIsIFtbXCJwYXNzU3R5bGVQcmVmaXhlc1wiLCBbJGjNj19hID0+IChwYXNzU3R5bGVQcmVmaXhlcyA9ICRozY9fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjNj19hID0+IChyZWNvcmROYW1lcyA9ICRozY9fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyxmcm9tRW50cmllcyxzZXRQcm90b3R5cGVPZixpc309T2JqZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzYW1lVmFsdWVaZXJvPSh4LHkpPT54PT09eXx8aXMoeCx5KTtcblxuY29uc3QgICAgICAgIHRyaXZpYWxDb21wYXJhdG9yPShsZWZ0LHJpZ2h0KT0+XG4vL1xubGVmdDxyaWdodD8tMTpsZWZ0PT09cmlnaHQ/MDoxO1xuXG4vKlxuXG4gKi8kaM2PX29uY2UudHJpdmlhbENvbXBhcmF0b3IodHJpdmlhbENvbXBhcmF0b3IpO1xuXG5jb25zdCBwYXNzU3R5bGVSYW5rcz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnJvbUVudHJpZXMoXG5lbnRyaWVzKHBhc3NTdHlsZVByZWZpeGVzKVxuLy9cbi5zb3J0KChbX2xlZnRTdHlsZSxsZWZ0UHJlZml4ZXNdLFtfcmlnaHRTdHlsZSxyaWdodFByZWZpeGVzXSk9PntcbnJldHVybiB0cml2aWFsQ29tcGFyYXRvcihsZWZ0UHJlZml4ZXMscmlnaHRQcmVmaXhlcyk7XG4gfSkuXG5tYXAoKFtwYXNzU3R5bGUscHJlZml4ZXNdLGluZGV4KT0+e1xuLy9cbi8vXG4vL1xucHJlZml4ZXM9PT1bLi4ucHJlZml4ZXNdLnNvcnQoKS5qb2luKCcnKXx8XG5GYWlsIGB1bnNvcnRlZCBwcmVmaXhlcyBmb3IgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfTogJHtxKHByZWZpeGVzKX1gO1xuY29uc3QgY292ZXI9W1xucHJlZml4ZXMuY2hhckF0KDApLFxuU3RyaW5nLmZyb21DaGFyQ29kZShwcmVmaXhlcy5jaGFyQ29kZUF0KHByZWZpeGVzLmxlbmd0aC0xKSsxKV07XG5cbnJldHVybltwYXNzU3R5bGUse2luZGV4LGNvdmVyfV07XG4gfSkpO1xuXG5cbnNldFByb3RvdHlwZU9mKHBhc3NTdHlsZVJhbmtzLG51bGwpO1xuaGFyZGVuKHBhc3NTdHlsZVJhbmtzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldFBhc3NTdHlsZUNvdmVyPShwYXNzU3R5bGUpPT5wYXNzU3R5bGVSYW5rc1twYXNzU3R5bGVdLmNvdmVyOyRozY9fb25jZS5nZXRQYXNzU3R5bGVDb3ZlcihnZXRQYXNzU3R5bGVDb3Zlcik7XG5oYXJkZW4oZ2V0UGFzc1N0eWxlQ292ZXIpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IG1lbW9PZlNvcnRlZD1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IGNvbXBhcmF0b3JNaXJyb3JJbWFnZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvbXBhcmF0b3JLaXQ9KGNvbXBhcmVSZW1vdGFibGVzPShfeCxfeSk9Pk5hTik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb21wYXJhdG9yPShsZWZ0LHJpZ2h0KT0+e1xuaWYoc2FtZVZhbHVlWmVybyhsZWZ0LHJpZ2h0KSl7XG5yZXR1cm4gMDtcbiB9XG5jb25zdCBsZWZ0U3R5bGU9cGFzc1N0eWxlT2YobGVmdCk7XG5jb25zdCByaWdodFN0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0KTtcbmlmKGxlZnRTdHlsZSE9PXJpZ2h0U3R5bGUpe1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKFxucGFzc1N0eWxlUmFua3NbbGVmdFN0eWxlXS5pbmRleCxcbnBhc3NTdHlsZVJhbmtzW3JpZ2h0U3R5bGVdLmluZGV4KTtcblxuIH1cbi8qXG5cbiAgICAgKi9cbnN3aXRjaChsZWZ0U3R5bGUpe1xuY2FzZSdyZW1vdGFibGUnOntcbnJldHVybiBjb21wYXJlUmVtb3RhYmxlcyhsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ251bGwnOlxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbi8vXG4vL1xucmV0dXJuIDA7XG4gfVxuY2FzZSdib29sZWFuJzpcbmNhc2UnYmlnaW50JzpcbmNhc2Unc3RyaW5nJzp7XG4vL1xuLy9cbmlmKGxlZnQ8cmlnaHQpe1xucmV0dXJuLTE7XG4gfWVsc2V7XG5hc3NlcnQobGVmdD5yaWdodCk7XG5yZXR1cm4gMTtcbiB9XG4gfVxuY2FzZSdzeW1ib2wnOntcbnJldHVybiBjb21wYXJhdG9yKFxubmFtZUZvclBhc3NhYmxlU3ltYm9sKGxlZnQpLFxubmFtZUZvclBhc3NhYmxlU3ltYm9sKHJpZ2h0KSk7XG5cbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihsZWZ0KSl7XG5hc3NlcnQoIU51bWJlci5pc05hTihyaWdodCkpO1xucmV0dXJuIDE7XG4gfWVsc2UgaWYoTnVtYmVyLmlzTmFOKHJpZ2h0KSl7XG5yZXR1cm4tMTtcbiB9XG4vL1xuLy9cbmlmKGxlZnQ8cmlnaHQpe1xucmV0dXJuLTE7XG4gfWVsc2V7XG5hc3NlcnQobGVmdD5yaWdodCk7XG5yZXR1cm4gMTtcbiB9XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBsZWZ0TmFtZXM9cmVjb3JkTmFtZXMobGVmdCk7XG5jb25zdCByaWdodE5hbWVzPXJlY29yZE5hbWVzKHJpZ2h0KTtcblxuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdE5hbWVzLHJpZ2h0TmFtZXMpO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNvbnN0IGxlZnRWYWx1ZXM9cmVjb3JkVmFsdWVzKGxlZnQsbGVmdE5hbWVzKTtcbmNvbnN0IHJpZ2h0VmFsdWVzPXJlY29yZFZhbHVlcyhyaWdodCxyaWdodE5hbWVzKTtcbnJldHVybiBjb21wYXJhdG9yKGxlZnRWYWx1ZXMscmlnaHRWYWx1ZXMpO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuY29uc3QgbGVuPU1hdGgubWluKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbmNvbnN0IHJlc3VsdD1jb21wYXJhdG9yKGxlZnRbaV0scmlnaHRbaV0pO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG4vL1xuLy9cbnJldHVybiBjb21wYXJhdG9yKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbi8vXG5jb25zdCBsYWJlbENvbXA9Y29tcGFyYXRvcihnZXRUYWcobGVmdCksZ2V0VGFnKHJpZ2h0KSk7XG5pZihsYWJlbENvbXAhPT0wKXtcbnJldHVybiBsYWJlbENvbXA7XG4gfVxucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5wYXlsb2FkLHJpZ2h0LnBheWxvYWQpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHBhc3NTdHlsZTogJHtxKGxlZnRTdHlsZSl9YDtcbiB9fVxuXG4vKiAgICAgICAgICAgICAgICovXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG91dGVyQ29tcGFyYXRvcj0oeCx5KT0+XG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9jb21wYXJhdG9yKHgseSl8fDA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbnRpQ29tcGFyYXRvcj0oeCx5KT0+b3V0ZXJDb21wYXJhdG9yKHkseCk7XG5cbm1lbW9PZlNvcnRlZC5zZXQob3V0ZXJDb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xubWVtb09mU29ydGVkLnNldChhbnRpQ29tcGFyYXRvcixuZXcgV2Vha1NldCgpKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KG91dGVyQ29tcGFyYXRvcixhbnRpQ29tcGFyYXRvcik7XG5jb21wYXJhdG9yTWlycm9ySW1hZ2VzLnNldChhbnRpQ29tcGFyYXRvcixvdXRlckNvbXBhcmF0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtjb21wYXJhdG9yOm91dGVyQ29tcGFyYXRvcixhbnRpQ29tcGFyYXRvcn0pO1xuIH07XG4vKlxuXG5cbiAqLyRozY9fb25jZS5tYWtlQ29tcGFyYXRvcktpdChtYWtlQ29tcGFyYXRvcktpdCk7XG5jb25zdCAgICAgICAgY29tcGFyYXRvck1pcnJvckltYWdlPShjb21wYXJhdG9yKT0+XG5jb21wYXJhdG9yTWlycm9ySW1hZ2VzLmdldChjb21wYXJhdG9yKTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5jb21wYXJhdG9yTWlycm9ySW1hZ2UoY29tcGFyYXRvck1pcnJvckltYWdlKTtcbmNvbnN0ICAgICAgICBpc1JhbmtTb3J0ZWQ9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuY29uc3Qgc3ViTWVtb09mU29ydGVkPW1lbW9PZlNvcnRlZC5nZXQoY29tcGFyZSk7XG5hc3NlcnQoc3ViTWVtb09mU29ydGVkIT09dW5kZWZpbmVkKTtcbmlmKHN1Yk1lbW9PZlNvcnRlZC5oYXMocGFzc2FibGVzKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5hc3NlcnQocGFzc1N0eWxlT2YocGFzc2FibGVzKT09PSdjb3B5QXJyYXknKTtcbmZvcihsZXQgaT0xO2k8cGFzc2FibGVzLmxlbmd0aDtpKz0xKXtcbmlmKGNvbXBhcmUocGFzc2FibGVzW2ktMV0scGFzc2FibGVzW2ldKT49MSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnN1Yk1lbW9PZlNvcnRlZC5hZGQocGFzc2FibGVzKTtcbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzUmFua1NvcnRlZChpc1JhbmtTb3J0ZWQpO1xuaGFyZGVuKGlzUmFua1NvcnRlZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0UmFua1NvcnRlZD0oc29ydGVkLGNvbXBhcmUpPT5cbmlzUmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSl8fFxuLy9cbi8vXG5GYWlsIGBNdXN0IGJlIHJhbmsgc29ydGVkOiAke3NvcnRlZH0gdnMgJHtzb3J0QnlSYW5rKHNvcnRlZCxjb21wYXJlKX1gOyRozY9fb25jZS5hc3NlcnRSYW5rU29ydGVkKGFzc2VydFJhbmtTb3J0ZWQpO1xuaGFyZGVuKGFzc2VydFJhbmtTb3J0ZWQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzb3J0QnlSYW5rPShwYXNzYWJsZXMsY29tcGFyZSk9PntcbmlmKEFycmF5LmlzQXJyYXkocGFzc2FibGVzKSl7XG5oYXJkZW4ocGFzc2FibGVzKTtcbi8vXG4vL1xuLy9cbmlmKGlzUmFua1NvcnRlZChwYXNzYWJsZXMsY29tcGFyZSkpe1xucmV0dXJuIHBhc3NhYmxlcztcbiB9XG4gfVxuY29uc3QgdW5zb3J0ZWQ9Wy4uLnBhc3NhYmxlc107XG51bnNvcnRlZC5mb3JFYWNoKGhhcmRlbik7XG5jb25zdCBzb3J0ZWQ9dW5zb3J0ZWQuc29ydChjb21wYXJlKTtcbi8vXG4vL1xuLy9cbmlmKGNvbXBhcmUodHJ1ZSx1bmRlZmluZWQpPjApe1xubGV0IGk9c29ydGVkLmxlbmd0aC0xO1xud2hpbGUoaT49MCYmc29ydGVkW2ldPT09dW5kZWZpbmVkKWktPTE7XG5jb25zdCBuPXNvcnRlZC5sZW5ndGgtaS0xO1xuaWYobj4wJiZuPHNvcnRlZC5sZW5ndGgpe1xuc29ydGVkLmNvcHlXaXRoaW4obiwwKTtcbnNvcnRlZC5maWxsKC8qICAgICAgICAgICAgKi91bmRlZmluZWQsMCxuKTtcbiB9XG4gfVxuaGFyZGVuKHNvcnRlZCk7XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuc3ViTWVtb09mU29ydGVkLmFkZChzb3J0ZWQpO1xucmV0dXJuIHNvcnRlZDtcbiB9OyRozY9fb25jZS5zb3J0QnlSYW5rKHNvcnRCeVJhbmspO1xuaGFyZGVuKHNvcnRCeVJhbmspO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcmFua1NlYXJjaD0oc29ydGVkLGNvbXBhcmUsa2V5LGJpYXM9J2xlZnRNb3N0Jyk9PntcbmFzc2VydFJhbmtTb3J0ZWQoc29ydGVkLGNvbXBhcmUpO1xubGV0IGxlZnQ9MDtcbmxldCByaWdodD1zb3J0ZWQubGVuZ3RoO1xud2hpbGUobGVmdDxyaWdodCl7XG5jb25zdCBtPU1hdGguZmxvb3IoKGxlZnQrcmlnaHQpLzIpO1xuY29uc3QgY29tcD1jb21wYXJlKHNvcnRlZFttXSxrZXkpO1xuaWYoY29tcDw9LTF8fGNvbXA9PT0wJiZiaWFzPT09J3JpZ2h0TW9zdCcpe1xubGVmdD1tKzE7XG4gfWVsc2V7XG5hc3NlcnQoY29tcD49MXx8Y29tcD09PTAmJmJpYXM9PT0nbGVmdE1vc3QnKTtcbnJpZ2h0PW07XG4gfVxuIH1cbnJldHVybiBiaWFzPT09J2xlZnRNb3N0Jz9sZWZ0OnJpZ2h0LTE7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW5kZXhDb3Zlcj0oc29ydGVkLGNvbXBhcmUsW2xlZnRLZXkscmlnaHRLZXldKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5jb25zdCBsZWZ0SW5kZXg9cmFua1NlYXJjaChzb3J0ZWQsY29tcGFyZSxsZWZ0S2V5LCdsZWZ0TW9zdCcpO1xuY29uc3QgcmlnaHRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLHJpZ2h0S2V5LCdyaWdodE1vc3QnKTtcbnJldHVybltsZWZ0SW5kZXgscmlnaHRJbmRleF07XG4gfTskaM2PX29uY2UuZ2V0SW5kZXhDb3ZlcihnZXRJbmRleENvdmVyKTtcbmhhcmRlbihnZXRJbmRleENvdmVyKTtcblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgRnVsbFJhbmtDb3Zlcj1oYXJkZW4oWycnLCd7J10pO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLkZ1bGxSYW5rQ292ZXIoRnVsbFJhbmtDb3Zlcik7XG5jb25zdCAgICAgICAgY292ZXJlZEVudHJpZXM9KHNvcnRlZCxbbGVmdEluZGV4LHJpZ2h0SW5kZXhdKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXRlcmFibGU9aGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5sZXQgaT1sZWZ0SW5kZXg7XG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKGk8PXJpZ2h0SW5kZXgpe1xuY29uc3QgZWxlbWVudD1zb3J0ZWRbaV07XG5pKz0xO1xucmV0dXJuIGhhcmRlbih7dmFsdWU6W2ksZWxlbWVudF0sZG9uZTpmYWxzZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7dmFsdWU6dW5kZWZpbmVkLGRvbmU6dHJ1ZX0pO1xuIH1cbiB9fSk7XG5cbiB9fSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRozY9fb25jZS5jb3ZlcmVkRW50cmllcyhjb3ZlcmVkRW50cmllcyk7XG5oYXJkZW4oY292ZXJlZEVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWF4UmFuaz0oY29tcGFyZSxhLGIpPT5jb21wYXJlKGEsYik+PTA/YTpiO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWluUmFuaz0oY29tcGFyZSxhLGIpPT5jb21wYXJlKGEsYik8PTA/YTpiO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgdW5pb25SYW5rQ292ZXJzPShjb21wYXJlLGNvdmVycyk9Pntcbi8qXG5cblxuXG4gICAqL1xuY29uc3QgdW5pb25SYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1pblJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5tYXhSYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZSh1bmlvblJhbmtDb3ZlclBhaXIsWyd7JywnJ10pO1xuIH07JGjNj19vbmNlLnVuaW9uUmFua0NvdmVycyh1bmlvblJhbmtDb3ZlcnMpO1xuaGFyZGVuKHVuaW9uUmFua0NvdmVycyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbnRlcnNlY3RSYW5rQ292ZXJzPShjb21wYXJlLGNvdmVycyk9Pntcbi8qXG5cblxuXG4gICAqL1xuY29uc3QgaW50ZXJzZWN0UmFua0NvdmVyUGFpcj0oW2xlZnRBLHJpZ2h0QV0sW2xlZnRCLHJpZ2h0Ql0pPT5bXG5tYXhSYW5rKGNvbXBhcmUsbGVmdEEsbGVmdEIpLFxubWluUmFuayhjb21wYXJlLHJpZ2h0QSxyaWdodEIpXTtcblxucmV0dXJuIGNvdmVycy5yZWR1Y2UoaW50ZXJzZWN0UmFua0NvdmVyUGFpcixbJycsJ3snXSk7XG4gfTskaM2PX29uY2UuaW50ZXJzZWN0UmFua0NvdmVycyhpbnRlcnNlY3RSYW5rQ292ZXJzKTtcblxuY29uc3QgICAgICAge2NvbXBhcmF0b3I6Y29tcGFyZVJhbmssYW50aUNvbXBhcmF0b3I6Y29tcGFyZUFudGlSYW5rfT1cbm1ha2VDb21wYXJhdG9yS2l0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuY29tcGFyZVJhbmsoY29tcGFyZVJhbmspOyRozY9fb25jZS5jb21wYXJlQW50aVJhbmsoY29tcGFyZUFudGlSYW5rKTtcbmNvbnN0ICAgICAgICBtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdD0obG9uZ0xpdmVkPWZhbHNlKT0+e1xubGV0IG51bVNlZW49MDtcbi8vXG4vL1xuLy9cbmNvbnN0IE1hcENvbnN0cnVjdG9yPWxvbmdMaXZlZD9XZWFrTWFwOk1hcDtcbmNvbnN0IHNlZW49bmV3IE1hcENvbnN0cnVjdG9yKCk7XG5jb25zdCB0YWc9KHIpPT57XG5pZihzZWVuLmhhcyhyKSl7XG5yZXR1cm4gc2Vlbi5nZXQocik7XG4gfVxubnVtU2Vlbis9MTtcbnNlZW4uc2V0KHIsbnVtU2Vlbik7XG5yZXR1cm4gbnVtU2VlbjtcbiB9O1xuY29uc3QgY29tcGFyZVJlbW90YWJsZXM9KHgseSk9PmNvbXBhcmVSYW5rKHRhZyh4KSx0YWcoeSkpO1xucmV0dXJuIG1ha2VDb21wYXJhdG9yS2l0KGNvbXBhcmVSZW1vdGFibGVzKTtcbiB9OyRozY9fb25jZS5tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG5oYXJkZW4obWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJpdmlhbENvbXBhcmF0b3IiOlsidHJpdmlhbENvbXBhcmF0b3IiXSwiZ2V0UGFzc1N0eWxlQ292ZXIiOlsiZ2V0UGFzc1N0eWxlQ292ZXIiXSwibWFrZUNvbXBhcmF0b3JLaXQiOlsibWFrZUNvbXBhcmF0b3JLaXQiXSwiY29tcGFyYXRvck1pcnJvckltYWdlIjpbImNvbXBhcmF0b3JNaXJyb3JJbWFnZSJdLCJpc1JhbmtTb3J0ZWQiOlsiaXNSYW5rU29ydGVkIl0sImFzc2VydFJhbmtTb3J0ZWQiOlsiYXNzZXJ0UmFua1NvcnRlZCJdLCJzb3J0QnlSYW5rIjpbInNvcnRCeVJhbmsiXSwiZ2V0SW5kZXhDb3ZlciI6WyJnZXRJbmRleENvdmVyIl0sIkZ1bGxSYW5rQ292ZXIiOlsiRnVsbFJhbmtDb3ZlciJdLCJjb3ZlcmVkRW50cmllcyI6WyJjb3ZlcmVkRW50cmllcyJdLCJ1bmlvblJhbmtDb3ZlcnMiOlsidW5pb25SYW5rQ292ZXJzIl0sImludGVyc2VjdFJhbmtDb3ZlcnMiOlsiaW50ZXJzZWN0UmFua0NvdmVycyJdLCJjb21wYXJlUmFuayI6WyJjb21wYXJlUmFuayJdLCJjb21wYXJlQW50aVJhbmsiOlsiY29tcGFyZUFudGlSYW5rIl0sIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0IjpbIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACEAAABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAF/qToJZBQAAWQUAAB4AAABAZW5kby9uYXQtdjUuMC4xMy9zcmMvaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIk5hdCIsImlzTmF0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNOYXQsICduYW1lJywge3ZhbHVlOiBcImlzTmF0XCJ9KTskaM2PX29uY2UuaXNOYXQoaXNOYXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsICduYW1lJywge3ZhbHVlOiBcIk5hdFwifSk7JGjNj19vbmNlLk5hdChOYXQpOyAgIC8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBpc05hdChhbGxlZ2VkTnVtKXtcbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J2JpZ2ludCcpe1xucmV0dXJuIGFsbGVnZWROdW0+PTA7XG4gfVxuaWYodHlwZW9mIGFsbGVnZWROdW0hPT0nbnVtYmVyJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5yZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkmJmFsbGVnZWROdW0+PTA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5pZihhbGxlZ2VkTnVtPDApe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbmVnYXRpdmVgKTtcbiB9XG5yZXR1cm4gYWxsZWdlZE51bTtcbiB9XG5cbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J251bWJlcicpe1xuaWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGFsbGVnZWROdW0pKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApO1xuIH1cbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBCaWdJbnQoYWxsZWdlZE51bSk7XG4gfVxuXG50aHJvdyBUeXBlRXJyb3IoXG4gYCR7YWxsZWdlZE51bX0gaXMgYSAke3R5cGVvZiBhbGxlZ2VkTnVtfSBidXQgbXVzdCBiZSBhIGJpZ2ludCBvciBhIG51bWJlcmApO1xuXG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNOYXQiOlsiaXNOYXQiXSwiTmF0IjpbIk5hdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAChKaq8PwoAAD8KAAAgAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjcvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvaXRlci1oZWxwZXJzLmpzIiwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3NyYy9lcnJvci5qcyIsIi4vc3JjL3JlbW90YWJsZS5qcyIsIi4vc3JjL3N5bWJvbC5qcyIsIi4vc3JjL3N0cmluZy5qcyIsIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIiwiLi9zcmMvbWFrZVRhZ2dlZC5qcyIsIi4vc3JjL21ha2UtZmFyLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiRmFyIiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJmaWx0ZXJJdGVyYWJsZSIsImZpbHRlckl0ZXJhYmxlIiwiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSIsImlzT2JqZWN0IiwiaXNPYmplY3QiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSIsImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIixudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2l0ZXItaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW11dLFtcIi4vc3JjL2Vycm9yLmpzXCIsIFtdXSxbXCIuL3NyYy9yZW1vdGFibGUuanNcIiwgW11dLFtcIi4vc3JjL3N5bWJvbC5qc1wiLCBbXV0sW1wiLi9zcmMvc3RyaW5nLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGVPZi5qc1wiLCBbXV0sW1wiLi9zcmMvbWFrZVRhZ2dlZC5qc1wiLCBbXV0sW1wiLi9zcmMvbWFrZS1mYXIuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVHdWFyZHMuanNcIiwgW11dLFtcIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOltbIm1hcEl0ZXJhYmxlIiwibWFwSXRlcmFibGUiXSxbImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiXV0sIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIjpbWyJQQVNTX1NUWUxFIiwiUEFTU19TVFlMRSJdLFsiaXNPYmplY3QiLCJpc09iamVjdCJdLFsiYXNzZXJ0Q2hlY2tlciIsImFzc2VydENoZWNrZXIiXSxbImdldFRhZyIsImdldFRhZyJdLFsiaGFzT3duUHJvcGVydHlPZiIsImhhc093blByb3BlcnR5T2YiXV0sIi4vc3JjL2Vycm9yLmpzIjpbWyJnZXRFcnJvckNvbnN0cnVjdG9yIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLFsiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSJdXSwiLi9zcmMvcmVtb3RhYmxlLmpzIjpbWyJnZXRJbnRlcmZhY2VPZiIsImdldEludGVyZmFjZU9mIl1dLCIuL3NyYy9zeW1ib2wuanMiOltbImFzc2VydFBhc3NhYmxlU3ltYm9sIiwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSxbImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIl0sWyJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiXSxbInBhc3NhYmxlU3ltYm9sRm9yTmFtZSIsInBhc3NhYmxlU3ltYm9sRm9yTmFtZSJdXSwiLi9zcmMvc3RyaW5nLmpzIjpbWyJpc1dlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIl0sWyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFBhc3NhYmxlU3RyaW5nIl1dLCIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6W1sicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdLFsiaXNQYXNzYWJsZSIsImlzUGFzc2FibGUiXSxbImFzc2VydFBhc3NhYmxlIiwiYXNzZXJ0UGFzc2FibGUiXSxbInRvUGFzc2FibGVFcnJvciIsInRvUGFzc2FibGVFcnJvciJdLFsidG9UaHJvd2FibGUiLCJ0b1Rocm93YWJsZSJdXSwiLi9zcmMvbWFrZVRhZ2dlZC5qcyI6W1sibWFrZVRhZ2dlZCIsIm1ha2VUYWdnZWQiXV0sIi4vc3JjL21ha2UtZmFyLmpzIjpbWyJSZW1vdGFibGUiLCJSZW1vdGFibGUiXSxbIkZhciIsIkZhciJdLFsiVG9GYXJGdW5jdGlvbiIsIlRvRmFyRnVuY3Rpb24iXSxbIkdFVF9NRVRIT0RfTkFNRVMiLCJHRVRfTUVUSE9EX05BTUVTIl1dLCIuL3NyYy90eXBlR3VhcmRzLmpzIjpbWyJhc3NlcnRSZWNvcmQiLCJhc3NlcnRSZWNvcmQiXSxbImFzc2VydENvcHlBcnJheSIsImFzc2VydENvcHlBcnJheSJdLFsiYXNzZXJ0UmVtb3RhYmxlIiwiYXNzZXJ0UmVtb3RhYmxlIl0sWyJpc1JlbW90YWJsZSIsImlzUmVtb3RhYmxlIl0sWyJpc1JlY29yZCIsImlzUmVjb3JkIl0sWyJpc0NvcHlBcnJheSIsImlzQ29weUFycmF5Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACXqL8lVAYAAFQGAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2NvcHlBcnJheS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQ29weUFycmF5SGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsYXNzZXJ0Q2hlY2tlcixnZXRPd25EYXRhRGVzY3JpcHRvcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImdldE93bkRhdGFEZXNjcmlwdG9yXCIsIFskaM2PX2EgPT4gKGdldE93bkRhdGFEZXNjcmlwdG9yID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7Z2V0UHJvdG90eXBlT2Z9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5LHByb3RvdHlwZTphcnJheVByb3RvdHlwZX09QXJyYXk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNhbkJlVmFsaWQ9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmlzQXJyYXkoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZjaGVjayhmYWxzZSxYIGBBcnJheSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weUFycmF5SGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2NvcHlBcnJheScsXG5cbmNhbkJlVmFsaWQsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PntcbmNhbkJlVmFsaWQoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuZ2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKT09PWFycmF5UHJvdG90eXBlfHxcbmFzc2VydC5mYWlsKFggYE1hbGZvcm1lZCBhcnJheTogJHtjYW5kaWRhdGV9YCxUeXBlRXJyb3IpO1xuLy9cbi8vXG5jb25zdCBsZW49LyogICAgICAgICAgICAgICAgICovXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsJ2xlbmd0aCcsZmFsc2UsYXNzZXJ0Q2hlY2tlcikudmFsdWU7XG5cbi8vXG4vL1xuZm9yKGxldCBpPTA7aTxsZW47aSs9MSl7XG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLGksdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9XG4vL1xub3duS2V5cyhjYW5kaWRhdGUpLmxlbmd0aD09PWxlbisxfHxcbmFzc2VydC5mYWlsKFggYEFycmF5cyBtdXN0IG5vdCBoYXZlIG5vbi1pbmRleGVzOiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4gfX0pOyRozY9fb25jZS5Db3B5QXJyYXlIZWxwZXIoQ29weUFycmF5SGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlBcnJheUhlbHBlciI6WyJDb3B5QXJyYXlIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMs9KtSkIAAApCAAAKQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9jb3B5UmVjb3JkLmpzeyJpbXBvcnRzIjpbIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5UmVjb3JkSGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsZ2V0T3duRGF0YURlc2NyaXB0b3IsQ1g7JGjNj19pbXBvcnRzKFtbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRozY9fYSA9PiAoY2FuQmVNZXRob2QgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0UHJvdG90eXBlT2YscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tPYmplY3RQcm90b3R5cGU9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09b2JqZWN0UHJvdG90eXBlfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZWNvcmRzIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb3BlcnR5Q2FuQmVWYWxpZD0oY2FuZGlkYXRlLGtleSx2YWx1ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG4odHlwZW9mIGtleT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUmVjb3JkcyBjYW4gb25seSBoYXZlIHN0cmluZy1uYW1lZCBwcm9wZXJ0aWVzOiAke2NhbmRpZGF0ZX1gKSYmKFxuIWNhbkJlTWV0aG9kKHZhbHVlKXx8XG4hIWNoZWNrJiZcbi8vXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbm5vdCBjb250YWluIG5vbi1mYXIgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBtYXkgYmUgbWV0aG9kcyBvZiBhbiBpbXBsaWNpdCBSZW1vdGFibGU6ICR7Y2FuZGlkYXRlfWApKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weVJlY29yZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5UmVjb3JkJyxcblxuY2FuQmVWYWxpZDooY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmNoZWNrT2JqZWN0UHJvdG90eXBlKGNhbmRpZGF0ZSxjaGVjaykmJlxuLy9cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkuZXZlcnkoKGtleSk9PlxuY2hlY2tQcm9wZXJ0eUNhbkJlVmFsaWQoY2FuZGlkYXRlLGtleSxjYW5kaWRhdGVba2V5XSxjaGVjaykpKTtcblxuXG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuLy9cbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoY2FuZGlkYXRlKSl7XG5jb25zdHt2YWx1ZX09Z2V0T3duRGF0YURlc2NyaXB0b3IoXG5jYW5kaWRhdGUsXG5uYW1lLFxudHJ1ZSxcbmFzc2VydENoZWNrZXIpO1xuXG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsbmFtZSx2YWx1ZSxhc3NlcnRDaGVja2VyKTtcbnBhc3NTdHlsZU9mUmVjdXIodmFsdWUpO1xuIH1cbiB9fSk7JGjNj19vbmNlLkNvcHlSZWNvcmRIZWxwZXIoQ29weVJlY29yZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJDb3B5UmVjb3JkSGVscGVyIjpbIkNvcHlSZWNvcmRIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAcCLlelYKAABWCgAALgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9kZWVwbHlGdWxmaWxsZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcGFzc1N0eWxlT2YuanMiLCIuL21ha2VUYWdnZWQuanMiXSwiZXhwb3J0cyI6WyJkZWVwbHlGdWxmaWxsZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxxLEUsaXNQcm9taXNlLGdldFRhZyxpc09iamVjdCxwYXNzU3R5bGVPZixtYWtlVGFnZ2VkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCIuL21ha2VUYWdnZWQuanNcIiwgW1tcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZXBseUZ1bGZpbGxlZD1hc3luYyh2YWwpPT57XG4vL1xuLy9cbi8vXG5cbmlmKCFpc09iamVjdCh2YWwpKXtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL3ZhbCk7XG4gfVxuaWYoaXNQcm9taXNlKHZhbCkpe1xucmV0dXJuIEUud2hlbih2YWwsKG5vbnApPT5kZWVwbHlGdWxmaWxsZWQobm9ucCkpO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZih2YWwpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmNvbnN0IHJlYz0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlYyk7XG5jb25zdCB2YWxQcz1uYW1lcy5tYXAoKG5hbWUpPT5kZWVwbHlGdWxmaWxsZWQocmVjW25hbWVdKSk7XG4vL1xucmV0dXJuIEUud2hlbihQcm9taXNlLmFsbCh2YWxQcyksKHZhbHMpPT5cbmhhcmRlbihmcm9tRW50cmllcyh2YWxzLm1hcCgoYyxpKT0+W25hbWVzW2ldLGNdKSkpKTtcblxuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5jb25zdCBhcnI9LyogICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdmFsUHM9YXJyLm1hcCgocCk9PmRlZXBseUZ1bGZpbGxlZChwKSk7XG4vL1xucmV0dXJuIEUud2hlbihQcm9taXNlLmFsbCh2YWxQcyksKHZhbHMpPT5oYXJkZW4odmFscykpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdCB0Z2Q9LyogICAgICAgICAgICAgICAgICAgICAqL3ZhbDtcbmNvbnN0IHRhZz1nZXRUYWcodGdkKTtcbi8vXG5yZXR1cm4gRS53aGVuKGRlZXBseUZ1bGZpbGxlZCh0Z2QucGF5bG9hZCksKHBheWxvYWQpPT5cbm1ha2VUYWdnZWQodGFnLHBheWxvYWQpKTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCByZW09LyogICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuLy9cbnJldHVybiByZW07XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXJyPS8qICAgICAgICAgICAgICAgICovdmFsO1xuLy9cbnJldHVybiBlcnI7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBwcm9tPS8qICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3ZhbDtcbnJldHVybiBFLndoZW4ocHJvbSwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChYIGBVbmV4cGVjdGVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFR5cGVFcnJvcik7XG4gfX1cblxuIH07JGjNj19vbmNlLmRlZXBseUZ1bGZpbGxlZChkZWVwbHlGdWxmaWxsZWQpO1xuaGFyZGVuKGRlZXBseUZ1bGZpbGxlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWVwbHlGdWxmaWxsZWQiOlsiZGVlcGx5RnVsZmlsbGVkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEObiqg0EgAANBIAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvZXJyb3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkVycm9ySGVscGVyIiwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyIsImdldEVycm9yQ29uc3RydWN0b3IiLCJpc0Vycm9yTGlrZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLGFzc2VydENoZWNrZXIsQ1g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7Z2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxoYXNPd24sZW50cmllc309T2JqZWN0O1xuXG4vL1xuLy9cbmNvbnN0IGVycm9yQ29uc3RydWN0b3JzPW5ldyBNYXAoXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW1xuWydFcnJvcicsRXJyb3JdLFxuWydFdmFsRXJyb3InLEV2YWxFcnJvcl0sXG5bJ1JhbmdlRXJyb3InLFJhbmdlRXJyb3JdLFxuWydSZWZlcmVuY2VFcnJvcicsUmVmZXJlbmNlRXJyb3JdLFxuWydTeW50YXhFcnJvcicsU3ludGF4RXJyb3JdLFxuWydUeXBlRXJyb3InLFR5cGVFcnJvcl0sXG5bJ1VSSUVycm9yJyxVUklFcnJvcl1cblxuLy9cbi8vXG4vL1xuLy9cbl0pO1xuXG5cbmlmKHR5cGVvZiBBZ2dyZWdhdGVFcnJvciE9PSd1bmRlZmluZWQnKXtcbi8vXG5lcnJvckNvbnN0cnVjdG9ycy5zZXQoJ0FnZ3JlZ2F0ZUVycm9yJyxBZ2dyZWdhdGVFcnJvcik7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEVycm9yQ29uc3RydWN0b3I9KG5hbWUpPT5lcnJvckNvbnN0cnVjdG9ycy5nZXQobmFtZSk7JGjNj19vbmNlLmdldEVycm9yQ29uc3RydWN0b3IoZ2V0RXJyb3JDb25zdHJ1Y3Rvcik7XG5oYXJkZW4oZ2V0RXJyb3JDb25zdHJ1Y3Rvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrRXJyb3JMaWtlPShjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xuLy9cbnJldHVybihcbmNhbmRpZGF0ZSBpbnN0YW5jZW9mIEVycm9yfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgRXJyb3IgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcbmhhcmRlbihjaGVja0Vycm9yTGlrZSk7XG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0Vycm9yTGlrZT0oY2FuZGlkYXRlKT0+Y2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlKTskaM2PX29uY2UuaXNFcnJvckxpa2UoaXNFcnJvckxpa2UpO1xuaGFyZGVuKGlzRXJyb3JMaWtlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0oXG5wcm9wTmFtZSxcbmRlc2MsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZihkZXNjLmVudW1lcmFibGUpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7ZGVzY31gKTtcblxuIH1cbmlmKCFoYXNPd24oZGVzYywndmFsdWUnKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHk6ICR7ZGVzY31gKTtcblxuIH1cbmNvbnN0e3ZhbHVlfT1kZXNjO1xuc3dpdGNoKHByb3BOYW1lKXtcbmNhc2UnbWVzc2FnZSc6XG5jYXNlJ3N0YWNrJzp7XG5yZXR1cm4oXG50eXBlb2YgdmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt2YWx1ZX1gKTtcblxuIH1cbmNhc2UnY2F1c2UnOntcbi8vXG5yZXR1cm4gY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IodmFsdWUscGFzc1N0eWxlT2ZSZWN1cixjaGVjayk7XG4gfVxuY2FzZSdlcnJvcnMnOntcbmlmKCFBcnJheS5pc0FycmF5KHZhbHVlKXx8cGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSkhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGNvcHlBcnJheTogJHt2YWx1ZX1gKTtcblxuIH1cbnJldHVybiB2YWx1ZS5ldmVyeSgoZXJyKT0+XG4vL1xuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoZXJyLHBhc3NTdHlsZU9mUmVjdXIsY2hlY2spKTtcblxuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7XG4gfX1cblxucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yIGhhcyBleHRyYSB1bnBhc3NlZCBwcm9wZXJ0eSAke3EocHJvcE5hbWUpfWApO1xuXG4gfTskaM2PX29uY2UuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuaGFyZGVuKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3I9KFxuY2FuZGlkYXRlLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrPXVuZGVmaW5lZCk9Plxue1xuaWYoIWNoZWNrRXJyb3JMaWtlKGNhbmRpZGF0ZSxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk7XG5jb25zdHtuYW1lfT1wcm90bztcbmNvbnN0IGVyckNvbnN0cnVjdG9yPWdldEVycm9yQ29uc3RydWN0b3IobmFtZSk7XG5pZihlcnJDb25zdHJ1Y3Rvcj09PXVuZGVmaW5lZHx8ZXJyQ29uc3RydWN0b3IucHJvdG90eXBlIT09cHJvdG8pe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGluaGVyaXQgZnJvbSBhbiBlcnJvciBjbGFzcyAucHJvdG90eXBlOiAke2NhbmRpZGF0ZX1gKTtcblxuIH1cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbmlmKCEoJ21lc3NhZ2UnaW4gZGVzY3MpKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUGFzc2FibGUgRXJyb3IgbXVzdCBoYXZlIGFuIG93biBcIm1lc3NhZ2VcIiBzdHJpbmcgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuXG5yZXR1cm4gZW50cmllcyhkZXNjcykuZXZlcnkoKFtwcm9wTmFtZSxkZXNjXSk9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoXG5wcm9wTmFtZSxcbmRlc2MsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2spKTtcblxuXG4gfTskaM2PX29uY2UuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuaGFyZGVuKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKTtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgRXJyb3JIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonZXJyb3InLFxuXG5jYW5CZVZhbGlkOmNoZWNrRXJyb3JMaWtlLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyLGFzc2VydENoZWNrZXIpfSk7JGjNj19vbmNlLkVycm9ySGVscGVyKEVycm9ySGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEVycm9yQ29uc3RydWN0b3IiOlsiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLCJpc0Vycm9yTGlrZSI6WyJpc0Vycm9yTGlrZSJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciJdLCJFcnJvckhlbHBlciI6WyJFcnJvckhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABBT/xPjwUAAI8FAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2l0ZXItaGVscGVycy5qc3siaW1wb3J0cyI6WyIuL21ha2UtZmFyLmpzIl0sImV4cG9ydHMiOlsiZmlsdGVySXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXI7JGjNj19pbXBvcnRzKFtbXCIuL21ha2UtZmFyLmpzXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcEl0ZXJhYmxlPShiYXNlSXRlcmFibGUsZnVuYyk9PlxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbkZhcignbWFwcGVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdtYXBwZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmNvbnN0e3ZhbHVlOmJhc2VWYWx1ZSxkb25lfT1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3QgdmFsdWU9ZG9uZT9iYXNlVmFsdWU6ZnVuYyhiYXNlVmFsdWUpO1xucmV0dXJuIGhhcmRlbih7dmFsdWUsZG9uZX0pO1xuIH19KTtcblxuIH19KTskaM2PX29uY2UubWFwSXRlcmFibGUobWFwSXRlcmFibGUpO1xuXG5oYXJkZW4obWFwSXRlcmFibGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZmlsdGVySXRlcmFibGU9KGJhc2VJdGVyYWJsZSxwcmVkKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdmaWx0ZXJlZCBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGJhc2VJdGVyYXRvcj1iYXNlSXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIEZhcignZmlsdGVyZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmZvcig7Oyl7XG5jb25zdCByZXN1bHQ9YmFzZUl0ZXJhdG9yLm5leHQoKTtcbmNvbnN0e3ZhbHVlLGRvbmV9PXJlc3VsdDtcbmlmKGRvbmV8fHByZWQodmFsdWUpKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbiB9fSk7XG5cbiB9fSk7JGjNj19vbmNlLmZpbHRlckl0ZXJhYmxlKGZpbHRlckl0ZXJhYmxlKTtcblxuaGFyZGVuKGZpbHRlckl0ZXJhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1hcEl0ZXJhYmxlIjpbIm1hcEl0ZXJhYmxlIl0sImZpbHRlckl0ZXJhYmxlIjpbImZpbHRlckl0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGTP4m9BEQAAQREAACcAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvbWFrZS1mYXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3JlbW90YWJsZS5qcyJdLCJleHBvcnRzIjpbIkZhciIsIkdFVF9NRVRIT0RfTkFNRVMiLCJSZW1vdGFibGUiLCJUb0ZhckZ1bmN0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldE1ldGhvZE5hbWVzLHEsRmFpbCxhc3NlcnRDaGVja2VyLFBBU1NfU1RZTEUsYXNzZXJ0SWZhY2UsZ2V0SW50ZXJmYWNlT2YsUmVtb3RhYmxlSGVscGVyOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qc1wiLCBbW1wiZ2V0TWV0aG9kTmFtZXNcIiwgWyRozY9fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcImFzc2VydElmYWNlXCIsIFskaM2PX2EgPT4gKGFzc2VydElmYWNlID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjNj19hKV1dLFtcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7cHJvdG90eXBlOmZ1bmN0aW9uUHJvdG90eXBlfT1GdW5jdGlvbjtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5zZXRQcm90b3R5cGVPZixcbmNyZWF0ZSxcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVJlbW90YWJsZVByb3RvPShyZW1vdGFibGUsaWZhY2UpPT57XG5sZXQgb2xkUHJvdG89Z2V0UHJvdG90eXBlT2YocmVtb3RhYmxlKTtcbmlmKHR5cGVvZiByZW1vdGFibGU9PT0nb2JqZWN0Jyl7XG5pZihvbGRQcm90bz09PW51bGwpe1xub2xkUHJvdG89b2JqZWN0UHJvdG90eXBlO1xuIH1cbm9sZFByb3RvPT09b2JqZWN0UHJvdG90eXBlfHxcbkZhaWwgYEZvciBub3csIHJlbW90YWJsZXMgY2Fubm90IGluaGVyaXQgZnJvbSBhbnl0aGluZyB1bnVzdWFsLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNlIGlmKHR5cGVvZiByZW1vdGFibGU9PT0nZnVuY3Rpb24nKXtcbm9sZFByb3RvIT09bnVsbHx8XG5GYWlsIGBPcmlnaW5hbCBmdW5jdGlvbiBtdXN0IG5vdCBpbmhlcml0IGZyb20gbnVsbDogJHtyZW1vdGFibGV9YDtcbm9sZFByb3RvPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuZ2V0UHJvdG90eXBlT2Yob2xkUHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuRmFpbCBgRmFyIGZ1bmN0aW9ucyBtdXN0IG9yaWdpbmFsbHkgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZSwgaW4gJHtyZW1vdGFibGV9YDtcbiB9ZWxzZXtcbkZhaWwgYHVucmVjb2duaXplZCB0eXBlb2YgJHtyZW1vdGFibGV9YDtcbiB9XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9sZFByb3RvLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3JlbW90YWJsZSd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOmlmYWNlfX0pKTtcblxuXG4gfTtcblxuY29uc3QgYXNzZXJ0Q2FuQmVSZW1vdGFibGU9KGNhbmRpZGF0ZSk9PlxuUmVtb3RhYmxlSGVscGVyLmNhbkJlVmFsaWQoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlPShcbi8vXG5pZmFjZT0nUmVtb3RhYmxlJyxcbnByb3BzPXVuZGVmaW5lZCxcbnJlbW90YWJsZT0vKiAgICAgICAgICAgICove30pPT5cbntcbmFzc2VydElmYWNlKGlmYWNlKTtcbmFzc2VydChpZmFjZSk7XG4vL1xuLy9cbnByb3BzPT09dW5kZWZpbmVkfHxGYWlsIGBSZW1vdGFibGUgcHJvcHMgbm90IHlldCBpbXBsZW1lbnRlZCAke3Byb3BzfWA7XG5cbi8vXG5hc3NlcnRDYW5CZVJlbW90YWJsZShyZW1vdGFibGUpO1xuXG4vL1xuIShQQVNTX1NUWUxFIGluIHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IG1hcmtlZCBhcyBhICR7cShcbnJlbW90YWJsZVtQQVNTX1NUWUxFXSlcbiB9YDtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuLmlzRmFrZXx8XG4vL1xuIWlzRnJvemVuKHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IGZyb3plbmA7XG5jb25zdCByZW1vdGFibGVQcm90bz1tYWtlUmVtb3RhYmxlUHJvdG8ocmVtb3RhYmxlLGlmYWNlKTtcblxuLy9cbi8vXG5jb25zdCBtdXRhdGVIYXJkZW5BbmRDaGVjaz0odGFyZ2V0KT0+e1xuLy9cbnNldFByb3RvdHlwZU9mKHRhcmdldCxyZW1vdGFibGVQcm90byk7XG5oYXJkZW4odGFyZ2V0KTtcbmFzc2VydENhbkJlUmVtb3RhYmxlKHRhcmdldCk7XG4gfTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHt9KTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHJlbW90YWJsZSk7XG5cbi8vXG4vL1xuYXNzZXJ0KGlmYWNlIT09dW5kZWZpbmVkKTsvL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgKi9yZW1vdGFibGUpO1xuIH07JGjNj19vbmNlLlJlbW90YWJsZShSZW1vdGFibGUpO1xuaGFyZGVuKFJlbW90YWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHRVRfTUVUSE9EX05BTUVTPSdfX2dldE1ldGhvZE5hbWVzX18nO1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuR0VUX01FVEhPRF9OQU1FUyhHRVRfTUVUSE9EX05BTUVTKTtcbmNvbnN0IGdldE1ldGhvZE5hbWVzTWV0aG9kPWhhcmRlbih7XG5bR0VUX01FVEhPRF9OQU1FU10oKXtcbnJldHVybiBnZXRNZXRob2ROYW1lcyh0aGlzKTtcbiB9fSlbXG5HRVRfTUVUSE9EX05BTUVTXTtcblxuY29uc3QgZ2V0TWV0aG9kTmFtZXNEZXNjcmlwdG9yPWhhcmRlbih7XG52YWx1ZTpnZXRNZXRob2ROYW1lc01ldGhvZCxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2UsXG53cml0YWJsZTpmYWxzZX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBGYXI9KGZhck5hbWUscmVtb3RhYmxlPXVuZGVmaW5lZCk9PntcbmNvbnN0IHI9cmVtb3RhYmxlPT09dW5kZWZpbmVkPy8qICAgICAgICAgICAgKi97fTpyZW1vdGFibGU7XG5pZih0eXBlb2Ygcj09PSdvYmplY3QnJiYhKEdFVF9NRVRIT0RfTkFNRVMgaW4gcikpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLEdFVF9NRVRIT0RfTkFNRVMsZ2V0TWV0aG9kTmFtZXNEZXNjcmlwdG9yKTtcbiB9XG5yZXR1cm4gUmVtb3RhYmxlKCBgQWxsZWdlZDogJHtmYXJOYW1lfWAsdW5kZWZpbmVkLHIpO1xuIH07JGjNj19vbmNlLkZhcihGYXIpO1xuaGFyZGVuKEZhcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBUb0ZhckZ1bmN0aW9uPShmYXJOYW1lLGZ1bmMpPT57XG5pZihnZXRJbnRlcmZhY2VPZihmdW5jKSE9PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIGZ1bmM7XG4gfVxuLy9cbnJldHVybiBGYXIoZmFyTmFtZSwoLi4uYXJncyk9PmZ1bmMoLi4uYXJncykpO1xuIH07JGjNj19vbmNlLlRvRmFyRnVuY3Rpb24oVG9GYXJGdW5jdGlvbik7XG5oYXJkZW4oVG9GYXJGdW5jdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJSZW1vdGFibGUiOlsiUmVtb3RhYmxlIl0sIkdFVF9NRVRIT0RfTkFNRVMiOlsiR0VUX01FVEhPRF9OQU1FUyJdLCJGYXIiOlsiRmFyIl0sIlRvRmFyRnVuY3Rpb24iOlsiVG9GYXJGdW5jdGlvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAr0aC/gAQAAIAEAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL21ha2VUYWdnZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcGFzc1N0eWxlT2YuanMiXSwiZXhwb3J0cyI6WyJtYWtlVGFnZ2VkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsUEFTU19TVFlMRSxhc3NlcnRQYXNzYWJsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbmNvbnN0e2NyZWF0ZSxwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVRhZ2dlZD0odGFnLHBheWxvYWQpPT57XG50eXBlb2YgdGFnPT09J3N0cmluZyd8fFxuRmFpbCBgVGhlIHRhZyBvZiBhIHRhZ2dlZCByZWNvcmQgbXVzdCBiZSBhIHN0cmluZzogJHt0YWd9YDtcbmFzc2VydFBhc3NhYmxlKGhhcmRlbihwYXlsb2FkKSk7XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9iamVjdFByb3RvdHlwZSx7XG5bUEFTU19TVFlMRV06e3ZhbHVlOid0YWdnZWQnfSxcbltTeW1ib2wudG9TdHJpbmdUYWddOnt2YWx1ZTp0YWd9LFxucGF5bG9hZDp7dmFsdWU6cGF5bG9hZCxlbnVtZXJhYmxlOnRydWV9fSkpO1xuXG5cbiB9OyRozY9fb25jZS5tYWtlVGFnZ2VkKG1ha2VUYWdnZWQpO1xuaGFyZGVuKG1ha2VUYWdnZWQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRhZ2dlZCI6WyJtYWtlVGFnZ2VkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA0ikncUFQAAFBUAADAAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiQ1giLCJQQVNTX1NUWUxFIiwiYXNzZXJ0Q2hlY2tlciIsImNhbkJlTWV0aG9kIiwiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCIsImNoZWNrUGFzc1N0eWxlIiwiY2hlY2tUYWdSZWNvcmQiLCJnZXRPd25EYXRhRGVzY3JpcHRvciIsImdldFRhZyIsImhhc093blByb3BlcnR5T2YiLCJpc09iamVjdCIsImlzVHlwZWRBcnJheSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG5nZXRQcm90b3R5cGVPZixcbmhhc093blByb3BlcnR5Om9iamVjdEhhc093blByb3BlcnR5LFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWc6dG9TdHJpbmdUYWdTeW1ib2x9PVN5bWJvbDtcblxuY29uc3QgdHlwZWRBcnJheVByb3RvdHlwZT1nZXRQcm90b3R5cGVPZihVaW50OEFycmF5LnByb3RvdHlwZSk7XG5jb25zdCB0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjPWdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbnR5cGVkQXJyYXlQcm90b3R5cGUsXG50b1N0cmluZ1RhZ1N5bWJvbCk7XG5cbmFzc2VydCh0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjKTtcbmNvbnN0IGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZz10eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjLmdldDtcbmFzc2VydCh0eXBlb2YgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPT09J2Z1bmN0aW9uJyk7XG5cbmNvbnN0ICAgICAgICBoYXNPd25Qcm9wZXJ0eU9mPShvYmoscHJvcCk9PlxuYXBwbHkob2JqZWN0SGFzT3duUHJvcGVydHksb2JqLFtwcm9wXSk7JGjNj19vbmNlLmhhc093blByb3BlcnR5T2YoaGFzT3duUHJvcGVydHlPZik7XG5oYXJkZW4oaGFzT3duUHJvcGVydHlPZik7XG5cbi8vXG5jb25zdCAgICAgICAgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsOyRozY9fb25jZS5pc09iamVjdChpc09iamVjdCk7XG5oYXJkZW4oaXNPYmplY3QpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNUeXBlZEFycmF5PShvYmplY3QpPT57XG4vL1xuY29uc3QgdGFnPWFwcGx5KGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZyxvYmplY3QsW10pO1xucmV0dXJuIHRhZyE9PXVuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5pc1R5cGVkQXJyYXkoaXNUeXBlZEFycmF5KTtcbmhhcmRlbihpc1R5cGVkQXJyYXkpO1xuXG5jb25zdCAgICAgICAgUEFTU19TVFlMRT1TeW1ib2wuZm9yKCdwYXNzU3R5bGUnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUEFTU19TVFlMRShQQVNTX1NUWUxFKTtcbmNvbnN0ICAgICAgICBjYW5CZU1ldGhvZD0oZnVuYyk9PlxudHlwZW9mIGZ1bmM9PT0nZnVuY3Rpb24nJiYhKFBBU1NfU1RZTEUgaW4gZnVuYyk7JGjNj19vbmNlLmNhbkJlTWV0aG9kKGNhbkJlTWV0aG9kKTtcbmhhcmRlbihjYW5CZU1ldGhvZCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDaGVja2VyPShjb25kLGRldGFpbHMpPT57XG5hc3NlcnQoY29uZCxkZXRhaWxzKTtcbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmFzc2VydENoZWNrZXIoYXNzZXJ0Q2hlY2tlcik7XG5oYXJkZW4oYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIENYPShjaGVjayk9PntcbmNvbnN0IHJlamVjdD0oVCwuLi5zdWJzKT0+Y2hlY2soZmFsc2UsWChULC4uLnN1YnMpKTtcbnJldHVybiByZWplY3Q7XG4gfTskaM2PX29uY2UuQ1goQ1gpO1xuaGFyZGVuKENYKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRPd25EYXRhRGVzY3JpcHRvcj0oXG5jYW5kaWRhdGUsXG5wcm9wTmFtZSxcbnNob3VsZEJlRW51bWVyYWJsZSxcbmNoZWNrKT0+XG57XG5jb25zdCBkZXNjPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNhbmRpZGF0ZSxwcm9wTmFtZSk7XG5cbnJldHVybihkZXNjIT09dW5kZWZpbmVkfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgJHtxKHByb3BOYW1lKX0gcHJvcGVydHkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApJiYoXG5oYXNPd25Qcm9wZXJ0eU9mKGRlc2MsJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBhY2Nlc3NvciBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCkmJihcbnNob3VsZEJlRW51bWVyYWJsZT9cbmRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3QgYmUgYW4gZW51bWVyYWJsZSBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YDpcbiFkZXNjLmVudW1lcmFibGV8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKT9cbmRlc2M6XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3VuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5nZXRPd25EYXRhRGVzY3JpcHRvcihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5oYXJkZW4oZ2V0T3duRGF0YURlc2NyaXB0b3IpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0VGFnPSh0YWdSZWNvcmQpPT50YWdSZWNvcmRbU3ltYm9sLnRvU3RyaW5nVGFnXTskaM2PX29uY2UuZ2V0VGFnKGdldFRhZyk7XG5oYXJkZW4oZ2V0VGFnKTtcblxuY29uc3QgICAgICAgIGNoZWNrUGFzc1N0eWxlPShvYmoscGFzc1N0eWxlLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxucGFzc1N0eWxlPT09ZXhwZWN0ZWRQYXNzU3R5bGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEV4cGVjdGVkICR7cShleHBlY3RlZFBhc3NTdHlsZSl9LCBub3QgJHtxKHBhc3NTdHlsZSl9OiAke29ian1gKTtcblxuIH07JGjNj19vbmNlLmNoZWNrUGFzc1N0eWxlKGNoZWNrUGFzc1N0eWxlKTtcbmhhcmRlbihjaGVja1Bhc3NTdHlsZSk7XG5cbmNvbnN0IG1ha2VDaGVja1RhZ1JlY29yZD0oY2hlY2tQcm90byk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1RhZ1JlY29yZD0odGFnUmVjb3JkLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxuKGlzT2JqZWN0KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgbm9uLW9iamVjdCBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiYoXG5pc0Zyb3plbih0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQSB0YWdSZWNvcmQgbXVzdCBiZSBmcm96ZW46ICR7dGFnUmVjb3JkfWApJiYoXG4haXNBcnJheSh0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQW4gYXJyYXkgY2Fubm90IGJlIGEgdGFnUmVjb3JkOiAke3RhZ1JlY29yZH1gKSYmXG5jaGVja1Bhc3NTdHlsZShcbnRhZ1JlY29yZCxcbmdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxQQVNTX1NUWUxFLGZhbHNlLGNoZWNrKS52YWx1ZSxcbmV4cGVjdGVkUGFzc1N0eWxlLFxuY2hlY2spJiYoXG5cbnR5cGVvZiBnZXRPd25EYXRhRGVzY3JpcHRvcih0YWdSZWNvcmQsU3ltYm9sLnRvU3RyaW5nVGFnLGZhbHNlLGNoZWNrKS5cbnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBBIFtTeW1ib2wudG9TdHJpbmdUYWddLW5hbWVkIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmc6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUHJvdG8odGFnUmVjb3JkLGdldFByb3RvdHlwZU9mKHRhZ1JlY29yZCksY2hlY2spKTtcblxuIH07XG5yZXR1cm4gaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcbiB9O1xuXG5jb25zdCAgICAgICAgY2hlY2tUYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhmYWxzZSxYIGBBIHRhZ1JlY29yZCBtdXN0IGluaGVyaXQgZnJvbSBPYmplY3QucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrVGFnUmVjb3JkKGNoZWNrVGFnUmVjb3JkKTtcblxuaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcblxuY29uc3QgICAgICAgIGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5wcm90byE9PW51bGwmJmdldFByb3RvdHlwZU9mKHByb3RvKT09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbiEhY2hlY2smJlxuY2hlY2soXG5mYWxzZSxcblggYEZvciBmdW5jdGlvbnMsIGEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZTogJHt2YWx9YCkpOyRozY9fb25jZS5jaGVja0Z1bmN0aW9uVGFnUmVjb3JkKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xuXG5cbmhhcmRlbihjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imhhc093blByb3BlcnR5T2YiOlsiaGFzT3duUHJvcGVydHlPZiJdLCJpc09iamVjdCI6WyJpc09iamVjdCJdLCJpc1R5cGVkQXJyYXkiOlsiaXNUeXBlZEFycmF5Il0sIlBBU1NfU1RZTEUiOlsiUEFTU19TVFlMRSJdLCJjYW5CZU1ldGhvZCI6WyJjYW5CZU1ldGhvZCJdLCJhc3NlcnRDaGVja2VyIjpbImFzc2VydENoZWNrZXIiXSwiQ1giOlsiQ1giXSwiZ2V0T3duRGF0YURlc2NyaXB0b3IiOlsiZ2V0T3duRGF0YURlc2NyaXB0b3IiXSwiZ2V0VGFnIjpbImdldFRhZyJdLCJjaGVja1Bhc3NTdHlsZSI6WyJjaGVja1Bhc3NTdHlsZSJdLCJjaGVja1RhZ1JlY29yZCI6WyJjaGVja1RhZ1JlY29yZCJdLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIjpbImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFAxNfrAkAACwJAAAKgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9wYXNzU3R5bGVPZi5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL2NvcHlBcnJheS5qcyIsIi4vY29weVJlY29yZC5qcyIsIi4vdGFnZ2VkLmpzIiwiLi9lcnJvci5qcyIsIi4vcmVtb3RhYmxlLmpzIiwiLi9zeW1ib2wuanMiLCIuL3NhZmUtcHJvbWlzZS5qcyIsIi4vc3RyaW5nLmpzIl0sImV4cG9ydHMiOlsiUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZSIsImlzUGFzc2FibGUiLCJwYXNzU3R5bGVPZiIsInRvUGFzc2FibGVFcnJvciIsInRvVGhyb3dhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxYLEZhaWwscSxhbm5vdGF0ZUVycm9yLG1ha2VFcnJvcixpc09iamVjdCxpc1R5cGVkQXJyYXksUEFTU19TVFlMRSxDb3B5QXJyYXlIZWxwZXIsQ29weVJlY29yZEhlbHBlcixUYWdnZWRIZWxwZXIsRXJyb3JIZWxwZXIsY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MsY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IsZ2V0RXJyb3JDb25zdHJ1Y3Rvcixpc0Vycm9yTGlrZSxSZW1vdGFibGVIZWxwZXIsYXNzZXJ0UGFzc2FibGVTeW1ib2wsYXNzZXJ0U2FmZVByb21pc2UsYXNzZXJ0UGFzc2FibGVTdHJpbmc7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJpc1R5cGVkQXJyYXlcIiwgWyRozY9fYSA9PiAoaXNUeXBlZEFycmF5ID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXV1dLFtcIi4vY29weUFycmF5LmpzXCIsIFtbXCJDb3B5QXJyYXlIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weUFycmF5SGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5UmVjb3JkLmpzXCIsIFtbXCJDb3B5UmVjb3JkSGVscGVyXCIsIFskaM2PX2EgPT4gKENvcHlSZWNvcmRIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3RhZ2dlZC5qc1wiLCBbW1wiVGFnZ2VkSGVscGVyXCIsIFskaM2PX2EgPT4gKFRhZ2dlZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vZXJyb3IuanNcIiwgW1tcIkVycm9ySGVscGVyXCIsIFskaM2PX2EgPT4gKEVycm9ySGVscGVyID0gJGjNj19hKV1dLFtcImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjXCIsIFskaM2PX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjID0gJGjNj19hKV1dLFtcImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yXCIsIFskaM2PX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yID0gJGjNj19hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXV1dLFtcIi4vcmVtb3RhYmxlLmpzXCIsIFtbXCJSZW1vdGFibGVIZWxwZXJcIiwgWyRozY9fYSA9PiAoUmVtb3RhYmxlSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9zeW1ib2wuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dXV0sW1wiLi9zYWZlLXByb21pc2UuanNcIiwgW1tcImFzc2VydFNhZmVQcm9taXNlXCIsIFskaM2PX2EgPT4gKGFzc2VydFNhZmVQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiLi9zdHJpbmcuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlU3RyaW5nXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3RyaW5nID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNGcm96ZW4sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx2YWx1ZXN9PU9iamVjdDtcblxuLypcblxuXG4gKi9cblxuY29uc3QgbWFrZUhlbHBlclRhYmxlPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBIZWxwZXJUYWJsZT17XG5fX3Byb3RvX186bnVsbCxcbmNvcHlBcnJheTp1bmRlZmluZWQsXG5jb3B5UmVjb3JkOnVuZGVmaW5lZCxcbnRhZ2dlZDp1bmRlZmluZWQsXG5lcnJvcjp1bmRlZmluZWQsXG5yZW1vdGFibGU6dW5kZWZpbmVkfTtcblxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmNvbnN0e3N0eWxlTmFtZX09aGVscGVyO1xuc3R5bGVOYW1lIGluIEhlbHBlclRhYmxlfHxGYWlsIGBVbnJlY29nbml6ZWQgaGVscGVyOiAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT09PXVuZGVmaW5lZHx8XG5GYWlsIGBjb25mbGljdGluZyBoZWxwZXJzIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT1oZWxwZXI7XG4gfVxuZm9yKGNvbnN0IHN0eWxlTmFtZSBvZiBvd25LZXlzKEhlbHBlclRhYmxlKSl7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdIT09dW5kZWZpbmVkfHxcbkZhaWwgYG1pc3NpbmcgaGVscGVyIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuIH1cblxucmV0dXJuIGhhcmRlbihIZWxwZXJUYWJsZSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VQYXNzU3R5bGVPZj0ocGFzc1N0eWxlSGVscGVycyk9PntcbmNvbnN0IEhlbHBlclRhYmxlPW1ha2VIZWxwZXJUYWJsZShwYXNzU3R5bGVIZWxwZXJzKTtcbmNvbnN0IHJlbW90YWJsZUhlbHBlcj1IZWxwZXJUYWJsZS5yZW1vdGFibGU7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHBhc3NTdHlsZU1lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuICAgKi9cbi8vXG5jb25zdCBwYXNzU3R5bGVPZj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbi8vXG5jb25zdCBpblByb2dyZXNzPW5ldyBTZXQoKTtcblxuY29uc3QgcGFzc1N0eWxlT2ZSZWN1cj0oaW5uZXIpPT57XG5jb25zdCBpbm5lcklzT2JqZWN0PWlzT2JqZWN0KGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xuY29uc3QgaW5uZXJTdHlsZT1wYXNzU3R5bGVNZW1vLmdldChpbm5lcik7XG5pZihpbm5lclN0eWxlKXtcbnJldHVybiBpbm5lclN0eWxlO1xuIH1cbiFpblByb2dyZXNzLmhhcyhpbm5lcil8fFxuRmFpbCBgUGFzcy1ieS1jb3B5IGRhdGEgY2Fubm90IGJlIGN5Y2xpYyAke2lubmVyfWA7XG5pblByb2dyZXNzLmFkZChpbm5lcik7XG4gfVxuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZkludGVybmFsKGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xucGFzc1N0eWxlTWVtby5zZXQoaW5uZXIscGFzc1N0eWxlKTtcbmluUHJvZ3Jlc3MuZGVsZXRlKGlubmVyKTtcbiB9XG5yZXR1cm4gcGFzc1N0eWxlO1xuIH07XG5cbmNvbnN0IHBhc3NTdHlsZU9mSW50ZXJuYWw9KGlubmVyKT0+e1xuY29uc3QgdHlwZXN0cj10eXBlb2YgaW5uZXI7XG5zd2l0Y2godHlwZXN0cil7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOntcbnJldHVybiB0eXBlc3RyO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5hc3NlcnRQYXNzYWJsZVN0cmluZyhpbm5lcik7XG5yZXR1cm4nc3RyaW5nJztcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2woaW5uZXIpO1xucmV0dXJuJ3N5bWJvbCc7XG4gfVxuY2FzZSdvYmplY3QnOntcbmlmKGlubmVyPT09bnVsbCl7XG5yZXR1cm4nbnVsbCc7XG4gfVxuaWYoIWlzRnJvemVuKGlubmVyKSl7XG5hc3NlcnQuZmFpbChcbi8vXG4vL1xuaXNUeXBlZEFycmF5KGlubmVyKT9cblggYENhbm5vdCBwYXNzIG11dGFibGUgdHlwZWQgYXJyYXlzIGxpa2UgJHtpbm5lcn0uYDpcblggYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgKTtcblxuIH1cbmlmKGlzUHJvbWlzZShpbm5lcikpe1xuYXNzZXJ0U2FmZVByb21pc2UoaW5uZXIpO1xucmV0dXJuJ3Byb21pc2UnO1xuIH1cbnR5cGVvZiBpbm5lci50aGVuIT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBDYW5ub3QgcGFzcyBub24tcHJvbWlzZSB0aGVuYWJsZXNgO1xuY29uc3QgcGFzc1N0eWxlVGFnPWlubmVyW1BBU1NfU1RZTEVdO1xuaWYocGFzc1N0eWxlVGFnIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YocGFzc1N0eWxlVGFnLCdzdHJpbmcnKTtcbmNvbnN0IGhlbHBlcj1IZWxwZXJUYWJsZVtwYXNzU3R5bGVUYWddO1xuaGVscGVyIT09dW5kZWZpbmVkfHxcbkZhaWwgYFVucmVjb2duaXplZCBQYXNzU3R5bGU6ICR7cShwYXNzU3R5bGVUYWcpfWA7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZVRhZyk7XG4gfVxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmlmKGhlbHBlci5jYW5CZVZhbGlkKGlubmVyKSl7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gaGVscGVyLnN0eWxlTmFtZTtcbiB9XG4gfVxucmVtb3RhYmxlSGVscGVyLmFzc2VydFZhbGlkKGlubmVyLHBhc3NTdHlsZU9mUmVjdXIpO1xucmV0dXJuJ3JlbW90YWJsZSc7XG4gfVxuY2FzZSdmdW5jdGlvbic6e1xuaXNGcm96ZW4oaW5uZXIpfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgO1xudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVucmVjb2duaXplZCB0eXBlb2YgJHtxKHR5cGVzdHIpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTtcblxucmV0dXJuIHBhc3NTdHlsZU9mUmVjdXIocGFzc2FibGUpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHBhc3NTdHlsZU9mKTtcbiB9O1xuXG5jb25zdCAgICAgICAgUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2w9U3ltYm9sLmZvcignQGVuZG8gcGFzc1N0eWxlT2YnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sKFBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sKTtcbmNvbnN0ICAgICAgICBwYXNzU3R5bGVPZj1cbmdsb2JhbFRoaXMmJmdsb2JhbFRoaXNbUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2xdfHxcbm1ha2VQYXNzU3R5bGVPZihbXG5Db3B5QXJyYXlIZWxwZXIsXG5Db3B5UmVjb3JkSGVscGVyLFxuVGFnZ2VkSGVscGVyLFxuRXJyb3JIZWxwZXIsXG5SZW1vdGFibGVIZWxwZXJdKTskaM2PX29uY2UucGFzc1N0eWxlT2YocGFzc1N0eWxlT2YpO1xuXG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZT0odmFsKT0+e1xucGFzc1N0eWxlT2YodmFsKTsvL1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlKGFzc2VydFBhc3NhYmxlKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT57XG50cnl7XG4vL1xuLy9cbnJldHVybiBwYXNzU3R5bGVPZihzcGVjaW1lbikhPT11bmRlZmluZWQ7XG4gfWNhdGNoKF8pe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9OyRozY9fb25jZS5pc1Bhc3NhYmxlKGlzUGFzc2FibGUpO1xuaGFyZGVuKGlzUGFzc2FibGUpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc1Bhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2M9KG5hbWUsZGVzYyk9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MobmFtZSxkZXNjLHBhc3NTdHlsZU9mKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0b1Bhc3NhYmxlRXJyb3I9KGVycik9PntcbmhhcmRlbihlcnIpO1xuaWYoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoZXJyLHBhc3NTdHlsZU9mKSl7XG5yZXR1cm4gZXJyO1xuIH1cbmNvbnN0e25hbWUsbWVzc2FnZX09ZXJyO1xuY29uc3R7Y2F1c2U6Y2F1c2VEZXNjLGVycm9yczplcnJvcnNEZXNjfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZXJyKTtcbmxldCBjYXVzZTtcbmxldCBlcnJvcnM7XG5pZihjYXVzZURlc2MmJmlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYygnY2F1c2UnLGNhdXNlRGVzYykpe1xuY2F1c2U9Y2F1c2VEZXNjLnZhbHVlO1xuIH1cbmlmKGVycm9yc0Rlc2MmJmlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYygnZXJyb3JzJyxlcnJvcnNEZXNjKSl7XG5lcnJvcnM9ZXJyb3JzRGVzYy52YWx1ZTtcbiB9XG5cbmNvbnN0IGVyckNvbnN0cnVjdG9yPWdldEVycm9yQ29uc3RydWN0b3IoIGAke25hbWV9YCl8fEVycm9yO1xuY29uc3QgbmV3RXJyb3I9bWFrZUVycm9yKCBgJHttZXNzYWdlfWAsZXJyQ29uc3RydWN0b3Ise1xuLy9cbmNhdXNlLFxuZXJyb3JzfSk7XG5cbi8vXG5oYXJkZW4obmV3RXJyb3IpO1xuLy9cbi8vXG4vL1xuYW5ub3RhdGVFcnJvcihuZXdFcnJvcixYIGBjb3BpZWQgZnJvbSBlcnJvciAke2Vycn1gKTtcbnBhc3NTdHlsZU9mKG5ld0Vycm9yKT09PSdlcnJvcid8fFxuRmFpbCBgRXhwZWN0ZWQgJHtuZXdFcnJvcn0gdG8gYmUgYSBwYXNzYWJsZSBlcnJvcmA7XG5yZXR1cm4gbmV3RXJyb3I7XG4gfTskaM2PX29uY2UudG9QYXNzYWJsZUVycm9yKHRvUGFzc2FibGVFcnJvcik7XG5oYXJkZW4odG9QYXNzYWJsZUVycm9yKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvVGhyb3dhYmxlPShzcGVjaW1lbik9PntcbmhhcmRlbihzcGVjaW1lbik7XG5pZihpc0Vycm9yTGlrZShzcGVjaW1lbikpe1xucmV0dXJuIHRvUGFzc2FibGVFcnJvcigvKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuKTtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuaWYoaXNPYmplY3Qoc3BlY2ltZW4pKXtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGVsZW1lbnRzPS8qICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpe1xuZWxlbWVudD09PXRvVGhyb3dhYmxlKGVsZW1lbnQpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VsZW1lbnR9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmNvbnN0IHJlYz0vKiAgICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgdmFsIG9mIHZhbHVlcyhyZWMpKXtcbnZhbD09PXRvVGhyb3dhYmxlKHZhbCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7dmFsfWA7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmNvbnN0e3BheWxvYWR9PXRnO1xucGF5bG9hZD09PXRvVGhyb3dhYmxlKHBheWxvYWQpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke3BheWxvYWR9YDtcbmJyZWFrO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGVyPS8qICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5lcj09PXRvVGhyb3dhYmxlKGVyKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHtlcn1gO1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBBICR7cShwYXNzU3R5bGUpfSBpcyBub3QgdGhyb3dhYmxlOiAke3NwZWNpbWVufWA7XG4gfX1cblxuIH1cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH07JGjNj19vbmNlLnRvVGhyb3dhYmxlKHRvVGhyb3dhYmxlKTtcbmhhcmRlbih0b1Rocm93YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCJdLCJwYXNzU3R5bGVPZiI6WyJwYXNzU3R5bGVPZiJdLCJhc3NlcnRQYXNzYWJsZSI6WyJhc3NlcnRQYXNzYWJsZSJdLCJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXSwidG9QYXNzYWJsZUVycm9yIjpbInRvUGFzc2FibGVFcnJvciJdLCJ0b1Rocm93YWJsZSI6WyJ0b1Rocm93YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABShHt6phcAAKYXAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3JlbW90YWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiUmVtb3RhYmxlSGVscGVyIiwiYXNzZXJ0SWZhY2UiLCJnZXRJbnRlcmZhY2VPZiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsYXNzZXJ0Q2hlY2tlcixjYW5CZU1ldGhvZCxoYXNPd25Qcm9wZXJ0eU9mLFBBU1NfU1RZTEUsY2hlY2tUYWdSZWNvcmQsY2hlY2tGdW5jdGlvblRhZ1JlY29yZCxpc09iamVjdCxnZXRUYWcsQ1g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRozY9fYSA9PiAoY2FuQmVNZXRob2QgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja1RhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGUsXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1cbk9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IGNoZWNrSWZhY2U9KGlmYWNlLGNoZWNrKT0+e1xucmV0dXJuKFxuLy9cbih0eXBlb2YgaWZhY2U9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZvciBub3csIGludGVyZmFjZSAke2lmYWNlfSBtdXN0IGJlIGEgc3RyaW5nOyB1bmltcGxlbWVudGVkYCkmJihcbmlmYWNlPT09J1JlbW90YWJsZSd8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnQWxsZWdlZDogJyl8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnRGVidWdOYW1lOiAnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRm9yIG5vdywgaWZhY2UgJHtxKFxuaWZhY2UpXG4gfSBtdXN0IGJlIFwiUmVtb3RhYmxlXCIgb3IgYmVnaW4gd2l0aCBcIkFsbGVnZWQ6IFwiIG9yIFwiRGVidWdOYW1lOiBcIjsgdW5pbXBsZW1lbnRlZGApKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0SWZhY2U9KGlmYWNlKT0+Y2hlY2tJZmFjZShpZmFjZSxhc3NlcnRDaGVja2VyKTskaM2PX29uY2UuYXNzZXJ0SWZhY2UoYXNzZXJ0SWZhY2UpO1xuaGFyZGVuKGFzc2VydElmYWNlKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tSZW1vdGFibGVQcm90b09mPShvcmlnaW5hbCxjaGVjayk9PntcbmlzT2JqZWN0KG9yaWdpbmFsKXx8XG5GYWlsIGBSZW1vdGFibGVzIG11c3QgYmUgb2JqZWN0cyBvciBmdW5jdGlvbnM6ICR7b3JpZ2luYWx9YDtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBwcm90bz1nZXRQcm90b3R5cGVPZihvcmlnaW5hbCk7XG5pZihcbnByb3RvPT09b2JqZWN0UHJvdG90eXBlfHxcbnByb3RvPT09bnVsbHx8XG5wcm90bz09PUZ1bmN0aW9uLnByb3RvdHlwZSlcbntcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZW1vdGFibGVzIG11c3QgYmUgZXhwbGljaXRseSBkZWNsYXJlZDogJHtxKG9yaWdpbmFsKX1gKTtcblxuIH1cblxuaWYodHlwZW9mIG9yaWdpbmFsPT09J29iamVjdCcpe1xuY29uc3QgcHJvdG9Qcm90bz1nZXRQcm90b3R5cGVPZihwcm90byk7XG5pZihwcm90b1Byb3RvIT09b2JqZWN0UHJvdG90eXBlJiZwcm90b1Byb3RvIT09bnVsbCl7XG4vL1xucmV0dXJuIGNoZWNrUmVtb3RhYmxlKHByb3RvLGNoZWNrKTtcbiB9XG5pZighY2hlY2tUYWdSZWNvcmQocHJvdG8sJ3JlbW90YWJsZScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfWVsc2UgaWYodHlwZW9mIG9yaWdpbmFsPT09J2Z1bmN0aW9uJyl7XG5pZighY2hlY2tGdW5jdGlvblRhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06e3ZhbHVlOmlmYWNlfSxcbi4uLnJlc3REZXNjc309XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHByb3RvKTtcblxucmV0dXJuKFxuKG93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIFJlbW90YWJsZSBQcm90byAke293bktleXMocmVzdERlc2NzKX1gKSYmXG5jaGVja0lmYWNlKGlmYWNlLGNoZWNrKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbmZpcm1lZFJlbW90YWJsZXM9bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tSZW1vdGFibGU9KHZhbCxjaGVjayk9PntcbmlmKGNvbmZpcm1lZFJlbW90YWJsZXMuaGFzKHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoIWlzRnJvemVuKHZhbCkpe1xucmV0dXJuKFxuISFjaGVjayYmQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7dmFsfWApO1xuXG4gfVxuLy9cbmlmKCFSZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZCh2YWwsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCByZXN1bHQ9Y2hlY2tSZW1vdGFibGVQcm90b09mKHZhbCxjaGVjayk7XG5pZihyZXN1bHQpe1xuY29uZmlybWVkUmVtb3RhYmxlcy5hZGQodmFsKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEludGVyZmFjZU9mPSh2YWwpPT57XG5pZihcbiFpc09iamVjdCh2YWwpfHxcbnZhbFtQQVNTX1NUWUxFXSE9PSdyZW1vdGFibGUnfHxcbiFjaGVja1JlbW90YWJsZSh2YWwpKVxue1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuLy9cbnJldHVybiBnZXRUYWcodmFsKTtcbiB9OyRozY9fb25jZS5nZXRJbnRlcmZhY2VPZihnZXRJbnRlcmZhY2VPZik7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlT2YpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFJlbW90YWJsZUhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidyZW1vdGFibGUnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xuY29uc3QgdmFsaWRUeXBlPVxuKGlzT2JqZWN0KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLW9iamVjdHMgYXMgUmVtb3RhYmxlICR7Y2FuZGlkYXRlfWApJiYoXG4haXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIGFycmF5cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCk7XG5pZighdmFsaWRUeXBlKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbmlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nb2JqZWN0Jyl7XG4vL1xuLy9cbnJldHVybiBvd25LZXlzKGRlc2NzKS5ldmVyeSgoa2V5KT0+e1xucmV0dXJuKFxuLy9cbihoYXNPd25Qcm9wZXJ0eU9mKGRlc2NzWy8qICAgICAgICAgICAgICAgICAqL2tleV0sJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgUmVtb3RhYmxlcyB3aXRoIGFjY2Vzc29ycyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleT09PVN5bWJvbC50b1N0cmluZ1RhZyYmY2hlY2tJZmFjZShjYW5kaWRhdGVba2V5XSxjaGVjayl8fFxuKGNhbkJlTWV0aG9kKGNhbmRpZGF0ZVtrZXldKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggbm9uLW1ldGhvZHMgbGlrZSAke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGluICR7Y2FuZGlkYXRlfWApJiYoXG5rZXkhPT1QQVNTX1NUWUxFfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBBIHBhc3MtYnktcmVtb3RlIGNhbm5vdCBzaGFkb3cgJHtxKFBBU1NfU1RZTEUpfWApKSk7XG5cbiB9KTtcbiB9ZWxzZSBpZih0eXBlb2YgY2FuZGlkYXRlPT09J2Z1bmN0aW9uJyl7XG4vL1xuLy9cbmNvbnN0e1xubmFtZTpuYW1lRGVzYyxcbmxlbmd0aDpsZW5ndGhEZXNjLFxuLy9cbltTeW1ib2wudG9TdHJpbmdUYWddOnRvU3RyaW5nVGFnRGVzYyxcbi4uLnJlc3REZXNjc309XG5kZXNjcztcbmNvbnN0IHJlc3RLZXlzPW93bktleXMocmVzdERlc2NzKTtcbnJldHVybihcbihuYW1lRGVzYyYmdHlwZW9mIG5hbWVEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEZhciBmdW5jdGlvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiYoXG5sZW5ndGhEZXNjJiZ0eXBlb2YgbGVuZ3RoRGVzYy52YWx1ZT09PSdudW1iZXInfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9uIGxlbmd0aCBtdXN0IGJlIGEgbnVtYmVyLCBpbiAke2NhbmRpZGF0ZX1gKSYmKFxudG9TdHJpbmdUYWdEZXNjPT09dW5kZWZpbmVkfHxcbih0eXBlb2YgdG9TdHJpbmdUYWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgc3RyaW5nLCBpbiAke2NhbmRpZGF0ZX1gKSYmXG5jaGVja0lmYWNlKHRvU3RyaW5nVGFnRGVzYy52YWx1ZSxjaGVjaykpJiYoXG5yZXN0S2V5cy5sZW5ndGg9PT0wfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9ucyB1bmV4cGVjdGVkIHByb3BlcnRpZXMgYmVzaWRlcyAubmFtZSBhbmQgLmxlbmd0aCAke3Jlc3RLZXlzfWApKTtcblxuIH1cbnJldHVybiEhY2hlY2smJkNYKGNoZWNrKSBgdW5yZWNvZ25pemVkIHR5cGVvZiAke2NhbmRpZGF0ZX1gO1xuIH0sXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUpPT5jaGVja1JlbW90YWJsZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlciksXG5cbmV2ZXJ5OihfcGFzc2FibGUsX2ZuKT0+dHJ1ZX0pOyRozY9fb25jZS5SZW1vdGFibGVIZWxwZXIoUmVtb3RhYmxlSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydElmYWNlIjpbImFzc2VydElmYWNlIl0sImdldEludGVyZmFjZU9mIjpbImdldEludGVyZmFjZU9mIl0sIlJlbW90YWJsZUhlbHBlciI6WyJSZW1vdGFibGVIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxRgAzIYMAACGDAAAKwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zYWZlLXByb21pc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0U2FmZVByb21pc2UiLCJpc1NhZmVQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxxLGFzc2VydENoZWNrZXIsaGFzT3duUHJvcGVydHlPZixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7aXNGcm96ZW4sZ2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWd9PVN5bWJvbDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tQcm9taXNlT3duS2V5cz0ocHIsY2hlY2spPT57XG5jb25zdCBrZXlzPW93bktleXMocHIpO1xuXG5pZihrZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgdW5rbm93bktleXM9a2V5cy5maWx0ZXIoXG4oa2V5KT0+dHlwZW9mIGtleSE9PSdzeW1ib2wnfHwhaGFzT3duUHJvcGVydHlPZihQcm9taXNlLnByb3RvdHlwZSxrZXkpKTtcblxuXG5pZih1bmtub3duS2V5cy5sZW5ndGghPT0wKXtcbnJldHVybiBDWChcbmNoZWNrKVxuIGAke3ByfSAtIE11c3Qgbm90IGhhdmUgYW55IG93biBwcm9wZXJ0aWVzOiAke3EodW5rbm93bktleXMpfWA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tTYWZlT3duS2V5PShrZXkpPT57XG5pZihrZXk9PT10b1N0cmluZ1RhZyl7XG4vL1xuLy9cbmNvbnN0IHRhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByLHRvU3RyaW5nVGFnKTtcbmFzc2VydCh0YWdEZXNjIT09dW5kZWZpbmVkKTtcbnJldHVybihcbihoYXNPd25Qcm9wZXJ0eU9mKHRhZ0Rlc2MsJ3ZhbHVlJyl8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHksIG5vdCBhbiBhY2Nlc3NvcjogJHtxKHRhZ0Rlc2MpfWApJiYoXG50eXBlb2YgdGFnRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbkNYKFxuY2hlY2spXG4gYE93biBAQHRvU3RyaW5nVGFnIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICR7cSh0YWdEZXNjLnZhbHVlKX1gKSYmKFxuIXRhZ0Rlc2MuZW51bWVyYWJsZXx8XG5DWChjaGVjaykgYE93biBAQHRvU3RyaW5nVGFnIG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7cSh0YWdEZXNjKX1gKSk7XG5cbiB9XG5jb25zdCB2YWw9cHJba2V5XTtcbmlmKHZhbD09PXVuZGVmaW5lZHx8dHlwZW9mIHZhbD09PSdudW1iZXInKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKFxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZcbnZhbCE9PW51bGwmJlxuaXNGcm96ZW4odmFsKSYmXG5nZXRQcm90b3R5cGVPZih2YWwpPT09T2JqZWN0LnByb3RvdHlwZSlcbntcbmNvbnN0IHN1YktleXM9b3duS2V5cyh2YWwpO1xuaWYoc3ViS2V5cy5sZW5ndGg9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cblxuaWYoXG5zdWJLZXlzLmxlbmd0aD09PTEmJlxuc3ViS2V5c1swXT09PSdkZXN0cm95ZWQnJiZcbnZhbC5kZXN0cm95ZWQ9PT1mYWxzZSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBOb2RlIGFzeW5jX2hvb2tzIGFkZGl0aW9ucyB0byBwcm9taXNlOiAke3ByfS4ke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGlzICR7dmFsfWA7XG4gfTtcblxucmV0dXJuIGtleXMuZXZlcnkoY2hlY2tTYWZlT3duS2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tTYWZlUHJvbWlzZT0ocHIsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNGcm96ZW4ocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBmcm96ZW5gKSYmKFxuaXNQcm9taXNlKHByKXx8Q1goY2hlY2spIGAke3ByfSAtIE11c3QgYmUgYSBwcm9taXNlYCkmJihcbmdldFByb3RvdHlwZU9mKHByKT09PVByb21pc2UucHJvdG90eXBlfHxcbkNYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGluaGVyaXQgZnJvbSBQcm9taXNlLnByb3RvdHlwZTogJHtxKFxuZ2V0UHJvdG90eXBlT2YocHIpKVxuIH1gKSYmXG5jaGVja1Byb21pc2VPd25LZXlzKC8qICAgICAgICAgICAgICAgICAgKi9wcixjaGVjaykpO1xuXG4gfTtcbmhhcmRlbihjaGVja1NhZmVQcm9taXNlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLCh4KT0+eCk7JGjNj19vbmNlLmlzU2FmZVByb21pc2UoaXNTYWZlUHJvbWlzZSk7XG5oYXJkZW4oaXNTYWZlUHJvbWlzZSk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRTYWZlUHJvbWlzZShhc3NlcnRTYWZlUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1NhZmVQcm9taXNlIjpbImlzU2FmZVByb21pc2UiXSwiYXNzZXJ0U2FmZVByb21pc2UiOlsiYXNzZXJ0U2FmZVByb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmJdfLLIHAACyBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zdHJpbmcuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb24sRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjNj19hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vL1xuY29uc3QgaGFzV2VsbEZvcm1lZFN0cmluZ01ldGhvZD0hIVN0cmluZy5wcm90b3R5cGUuaXNXZWxsRm9ybWVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzV2VsbEZvcm1lZFN0cmluZz1oYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kP1xuKHN0cik9PnR5cGVvZiBzdHI9PT0nc3RyaW5nJyYmc3RyLmlzV2VsbEZvcm1lZCgpOlxuKHN0cik9PntcbmlmKHR5cGVvZiBzdHIhPT0nc3RyaW5nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuZm9yKGNvbnN0IGNoIG9mIHN0cil7XG4vL1xuLy9cbi8vXG5jb25zdCBjcD0vKiAgICAgICAgICAgICAgICAgKi9jaC5jb2RlUG9pbnRBdCgwKTtcbmlmKGNwPj0weGQ4MDAmJmNwPD0weGRmZmYpe1xuLy9cbi8vXG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9OyRozY9fb25jZS5pc1dlbGxGb3JtZWRTdHJpbmcoaXNXZWxsRm9ybWVkU3RyaW5nKTtcbmhhcmRlbihpc1dlbGxGb3JtZWRTdHJpbmcpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFdlbGxGb3JtZWRTdHJpbmc9KHN0cik9PntcbmlzV2VsbEZvcm1lZFN0cmluZyhzdHIpfHxGYWlsIGBFeHBlY3RlZCB3ZWxsLWZvcm1lZCB1bmljb2RlIHN0cmluZzogJHtzdHJ9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRXZWxsRm9ybWVkU3RyaW5nKGFzc2VydFdlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGFzc2VydFdlbGxGb3JtZWRTdHJpbmcpO1xuXG5jb25zdCBPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEU9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignT05MWV9XRUxMX0ZPUk1FRF9TVFJJTkdTX1BBU1NBQkxFJywnZGlzYWJsZWQnLFtcbidlbmFibGVkJ10pPT09XG4nZW5hYmxlZCc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZVN0cmluZz0oc3RyKT0+e1xudHlwZW9mIHN0cj09PSdzdHJpbmcnfHxGYWlsIGBFeHBlY3RlZCBzdHJpbmcgJHtzdHJ9YDtcbiFPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEV8fGFzc2VydFdlbGxGb3JtZWRTdHJpbmcoc3RyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRQYXNzYWJsZVN0cmluZyhhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTdHJpbmcpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNXZWxsRm9ybWVkU3RyaW5nIjpbImlzV2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIjpbImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSwiYXNzZXJ0UGFzc2FibGVTdHJpbmciOlsiYXNzZXJ0UGFzc2FibGVTdHJpbmciXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZj9ZlfwJAAD8CQAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zeW1ib2wuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIiwibmFtZUZvclBhc3NhYmxlU3ltYm9sIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cbiAqL1xuY29uc3Qgd2VsbEtub3duU3ltYm9sTmFtZXM9bmV3IE1hcChcbm93bktleXMoU3ltYm9sKS5cbmZpbHRlcihcbihuYW1lKT0+dHlwZW9mIG5hbWU9PT0nc3RyaW5nJyYmdHlwZW9mIFN5bWJvbFtuYW1lXT09PSdzeW1ib2wnKS5cblxuZmlsdGVyKChuYW1lKT0+e1xuLy9cbiFuYW1lLnN0YXJ0c1dpdGgoJ0BAJyl8fFxuRmFpbCBgRGlkIG5vdCBleHBlY3QgU3ltYm9sIHRvIGhhdmUgYSBzeW1ib2wtdmFsdWVkIHByb3BlcnR5IG5hbWUgc3RhcnRpbmcgd2l0aCBcIkBAXCIgJHtxKFxubmFtZSlcbiB9YDtcbnJldHVybiB0cnVlO1xuIH0pXG4vL1xuLm1hcCgobmFtZSk9PltTeW1ib2xbbmFtZV0sIGBAQCR7bmFtZX1gXSkpO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlU3ltYm9sPShzeW0pPT5cbnR5cGVvZiBzeW09PT0nc3ltYm9sJyYmKFxudHlwZW9mIFN5bWJvbC5rZXlGb3Ioc3ltKT09PSdzdHJpbmcnfHx3ZWxsS25vd25TeW1ib2xOYW1lcy5oYXMoc3ltKSk7JGjNj19vbmNlLmlzUGFzc2FibGVTeW1ib2woaXNQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oaXNQYXNzYWJsZVN5bWJvbCk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZVN5bWJvbD0oc3ltKT0+XG5pc1Bhc3NhYmxlU3ltYm9sKHN5bSl8fFxuRmFpbCBgT25seSByZWdpc3RlcmVkIHN5bWJvbHMgb3Igd2VsbC1rbm93biBzeW1ib2xzIGFyZSBwYXNzYWJsZTogJHtxKHN5bSl9YDskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGVTeW1ib2woYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlU3ltYm9sKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbmFtZUZvclBhc3NhYmxlU3ltYm9sPShzeW0pPT57XG5jb25zdCBuYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKG5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIHdlbGxLbm93blN5bWJvbE5hbWVzLmdldChzeW0pO1xuIH1cbmlmKG5hbWUuc3RhcnRzV2l0aCgnQEAnKSl7XG5yZXR1cm4gYEBAJHtuYW1lfWA7XG4gfVxucmV0dXJuIG5hbWU7XG4gfTskaM2PX29uY2UubmFtZUZvclBhc3NhYmxlU3ltYm9sKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4obmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgQXRBdFByZWZpeFBhdHRlcm49L15AQCguKikkLztcbmhhcmRlbihBdEF0UHJlZml4UGF0dGVybik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFzc2FibGVTeW1ib2xGb3JOYW1lPShuYW1lKT0+e1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5pZihtYXRjaCl7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5pZihzdWZmaXguc3RhcnRzV2l0aCgnQEAnKSl7XG5yZXR1cm4gU3ltYm9sLmZvcihzdWZmaXgpO1xuIH1lbHNle1xuY29uc3Qgc3ltPVN5bWJvbFtzdWZmaXhdO1xuaWYodHlwZW9mIHN5bT09PSdzeW1ib2wnKXtcbnJldHVybiBzeW07XG4gfVxuRmFpbCBgUmVzZXJ2ZWQgZm9yIHdlbGwga25vd24gc3ltYm9sICR7cShzdWZmaXgpfTogJHtxKG5hbWUpfWA7XG4gfVxuIH1cbnJldHVybiBTeW1ib2wuZm9yKG5hbWUpO1xuIH07JGjNj19vbmNlLnBhc3NhYmxlU3ltYm9sRm9yTmFtZShwYXNzYWJsZVN5bWJvbEZvck5hbWUpO1xuaGFyZGVuKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlU3ltYm9sIjpbImlzUGFzc2FibGVTeW1ib2wiXSwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSwibmFtZUZvclBhc3NhYmxlU3ltYm9sIjpbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiOlsicGFzc2FibGVTeW1ib2xGb3JOYW1lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGDVY54UBwAAFAcAACUAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdGFnZ2VkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJUYWdnZWRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxhc3NlcnRDaGVja2VyLGNoZWNrVGFnUmVjb3JkLFBBU1NfU1RZTEUsZ2V0T3duRGF0YURlc2NyaXB0b3IsY2hlY2tQYXNzU3R5bGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja1RhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiY2hlY2tQYXNzU3R5bGVcIiwgWyRozY9fYSA9PiAoY2hlY2tQYXNzU3R5bGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRhZ2dlZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOid0YWdnZWQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5jaGVja1Bhc3NTdHlsZShjYW5kaWRhdGUsY2FuZGlkYXRlW1BBU1NfU1RZTEVdLCd0YWdnZWQnLGNoZWNrKSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tUYWdSZWNvcmQoY2FuZGlkYXRlLCd0YWdnZWQnLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOl9sYWJlbERlc2MsXG5wYXlsb2FkOl9wYXlsb2FkRGVzYywvL1xuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbm93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbkZhaWwgYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiB0YWdnZWQgcmVjb3JkICR7b3duS2V5cyhyZXN0RGVzY3MpfWA7XG5cbi8vXG4vL1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwncGF5bG9hZCcsdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9fSk7JGjNj19vbmNlLlRhZ2dlZEhlbHBlcihUYWdnZWRIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGFnZ2VkSGVscGVyIjpbIlRhZ2dlZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAOvwkt/ggAAP4IAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbImFzc2VydENvcHlBcnJheSIsImFzc2VydFJlY29yZCIsImFzc2VydFJlbW90YWJsZSIsImlzQ29weUFycmF5IiwiaXNSZWNvcmQiLCJpc1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEscGFzc1N0eWxlT2Y7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzQ29weUFycmF5PShhcnIpPT5wYXNzU3R5bGVPZihhcnIpPT09J2NvcHlBcnJheSc7JGjNj19vbmNlLmlzQ29weUFycmF5KGlzQ29weUFycmF5KTtcbmhhcmRlbihpc0NvcHlBcnJheSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpc1JlY29yZD0ocmVjb3JkKT0+cGFzc1N0eWxlT2YocmVjb3JkKT09PSdjb3B5UmVjb3JkJzskaM2PX29uY2UuaXNSZWNvcmQoaXNSZWNvcmQpO1xuaGFyZGVuKGlzUmVjb3JkKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc1JlbW90YWJsZT0ocmVtb3RhYmxlKT0+cGFzc1N0eWxlT2YocmVtb3RhYmxlKT09PSdyZW1vdGFibGUnOyRozY9fb25jZS5pc1JlbW90YWJsZShpc1JlbW90YWJsZSk7XG5oYXJkZW4oaXNSZW1vdGFibGUpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRDb3B5QXJyYXk9KGFycmF5LG9wdE5hbWVPZkFycmF5PSdBbGxlZ2VkIGFycmF5Jyk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihhcnJheSk7XG5wYXNzU3R5bGU9PT0nY29weUFycmF5J3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mQXJyYXkpfSAke2FycmF5fSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IGFycmF5LCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlBcnJheShhc3NlcnRDb3B5QXJyYXkpO1xuaGFyZGVuKGFzc2VydENvcHlBcnJheSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlY29yZD0ocmVjb3JkLG9wdE5hbWVPZlJlY29yZD0nQWxsZWdlZCByZWNvcmQnKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlY29yZCk7XG5wYXNzU3R5bGU9PT0nY29weVJlY29yZCd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZlJlY29yZCl9ICR7cmVjb3JkfSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IHJlY29yZCwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRSZWNvcmQoYXNzZXJ0UmVjb3JkKTtcbmhhcmRlbihhc3NlcnRSZWNvcmQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRSZW1vdGFibGU9KFxucmVtb3RhYmxlLFxub3B0TmFtZU9mUmVtb3RhYmxlPSdBbGxlZ2VkIHJlbW90YWJsZScpPT5cbntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihyZW1vdGFibGUpO1xucGFzc1N0eWxlPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZlJlbW90YWJsZSl9ICR7cmVtb3RhYmxlfSBtdXN0IGJlIGEgcmVtb3RhYmxlLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlbW90YWJsZShhc3NlcnRSZW1vdGFibGUpO1xuaGFyZGVuKGFzc2VydFJlbW90YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlBcnJheSI6WyJpc0NvcHlBcnJheSJdLCJpc1JlY29yZCI6WyJpc1JlY29yZCJdLCJpc1JlbW90YWJsZSI6WyJpc1JlbW90YWJsZSJdLCJhc3NlcnRDb3B5QXJyYXkiOlsiYXNzZXJ0Q29weUFycmF5Il0sImFzc2VydFJlY29yZCI6WyJhc3NlcnRSZWNvcmQiXSwiYXNzZXJ0UmVtb3RhYmxlIjpbImFzc2VydFJlbW90YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAkAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFh1fptw4AALcOAAAeAAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2tleXMvY2hlY2tLZXkuanMiLCIuL3NyYy9rZXlzL2NvcHlTZXQuanMiLCIuL3NyYy9rZXlzL2NvcHlCYWcuanMiLCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIiwiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzIiwiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIiwiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIiwiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qcyIsIi4vc3JjL3R5cGVzLmpzIiwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5IiwiYmFnVW5pb24iLCJiYWdVbmlvbiIsImVsZW1lbnRzSXNEaXNqb2ludCIsImVsZW1lbnRzSXNEaXNqb2ludCIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCIsImdldFJhbmtDb3ZlciIsImdldFJhbmtDb3ZlciIsInNldENvbXBhcmUiLCJzZXRDb21wYXJlIixudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvcHlTZXQuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29weUJhZy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNcIiwgW11dLFtcIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6W1siaXNLZXkiLCJpc0tleSJdLFsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5Il0sWyJhc3NlcnRTY2FsYXJLZXkiLCJhc3NlcnRTY2FsYXJLZXkiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiYXNzZXJ0Q29weVNldCIsImFzc2VydENvcHlTZXQiXSxbIm1ha2VDb3B5U2V0IiwibWFrZUNvcHlTZXQiXSxbImdldENvcHlTZXRLZXlzIiwiZ2V0Q29weVNldEtleXMiXSxbImlzQ29weUJhZyIsImlzQ29weUJhZyJdLFsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlCYWciXSxbIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWciXSxbIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSxbImdldENvcHlCYWdFbnRyaWVzIiwiZ2V0Q29weUJhZ0VudHJpZXMiXSxbImlzQ29weU1hcCIsImlzQ29weU1hcCJdLFsiYXNzZXJ0Q29weU1hcCIsImFzc2VydENvcHlNYXAiXSxbIm1ha2VDb3B5TWFwIiwibWFrZUNvcHlNYXAiXSxbImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJpZXMiXV0sIi4vc3JjL2tleXMvY29weVNldC5qcyI6W1siY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXV0sIi4vc3JjL2tleXMvY29weUJhZy5qcyI6W1siY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl1dLCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIjpbWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsic2V0Q29tcGFyZSIsInNldENvbXBhcmUiXSxbImNvbXBhcmVLZXlzIiwiY29tcGFyZUtleXMiXSxbImtleUxUIiwia2V5TFQiXSxbImtleUxURSIsImtleUxURSJdLFsia2V5RVEiLCJrZXlFUSJdLFsia2V5R1RFIiwia2V5R1RFIl0sWyJrZXlHVCIsImtleUdUIl1dLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOltbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjpbWyJiYWdJc1N1cGVyYmFnIiwiYmFnSXNTdXBlcmJhZyJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjpbWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsibXVzdE1hdGNoIiwibXVzdE1hdGNoIl0sWyJpc0F3YWl0QXJnR3VhcmQiLCJpc0F3YWl0QXJnR3VhcmQiXSxbImFzc2VydEF3YWl0QXJnR3VhcmQiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sWyJpc1Jhd0d1YXJkIiwiaXNSYXdHdWFyZCJdLFsiYXNzZXJ0UmF3R3VhcmQiLCJhc3NlcnRSYXdHdWFyZCJdLFsiYXNzZXJ0TWV0aG9kR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCJdLFsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdLFsia2luZE9mIiwia2luZE9mIl1dLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjpbWyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCIsImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sWyJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSxbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLFsiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyIsImdldEludGVyZmFjZU1ldGhvZEtleXMiXV0sIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOltbImxpc3REaWZmZXJlbmNlIiwibGlzdERpZmZlcmVuY2UiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjpbWyJvYmplY3RNYXAiLCJvYmplY3RNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFulOQw5MgAAOTIAACoAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY2hlY2tLZXkuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5U2V0LmpzIiwiLi9jb3B5QmFnLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlNYXAiLCJhc3NlcnRDb3B5U2V0IiwiYXNzZXJ0S2V5IiwiYXNzZXJ0UHJpbWl0aXZlS2V5IiwiYXNzZXJ0U2NhbGFyS2V5IiwiY2hlY2tDb3B5QmFnIiwiY2hlY2tDb3B5TWFwIiwiY2hlY2tDb3B5U2V0IiwiY2hlY2tLZXkiLCJjaGVja1NjYWxhcktleSIsImNvcHlNYXBLZXlTZXQiLCJldmVyeUNvcHlCYWdFbnRyeSIsImV2ZXJ5Q29weU1hcEtleSIsImV2ZXJ5Q29weU1hcFZhbHVlIiwiZXZlcnlDb3B5U2V0S2V5IiwiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyeUFycmF5IiwiZ2V0Q29weU1hcEtleXMiLCJnZXRDb3B5TWFwVmFsdWVzIiwiZ2V0Q29weVNldEtleXMiLCJpc0NvcHlCYWciLCJpc0NvcHlNYXAiLCJpc0NvcHlTZXQiLCJpc0tleSIsImlzUHJpbWl0aXZlS2V5IiwiaXNTY2FsYXJLZXkiLCJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlNYXAiLCJtYWtlQ29weVNldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLGFzc2VydFBhc3NhYmxlLEZhcixnZXRUYWcsaXNPYmplY3QsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxpZGVudENoZWNrZXIsWCxxLEZhaWwsY2hlY2tFbGVtZW50cyxtYWtlU2V0T2ZFbGVtZW50cyxjaGVja0JhZ0VudHJpZXMsbWFrZUJhZ09mRW50cmllczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanNcIiwgW1tcImlkZW50Q2hlY2tlclwiLCBbJGjNj19hID0+IChpZGVudENoZWNrZXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5U2V0LmpzXCIsIFtbXCJjaGVja0VsZW1lbnRzXCIsIFskaM2PX2EgPT4gKGNoZWNrRWxlbWVudHMgPSAkaM2PX2EpXV0sW1wibWFrZVNldE9mRWxlbWVudHNcIiwgWyRozY9fYSA9PiAobWFrZVNldE9mRWxlbWVudHMgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlCYWcuanNcIiwgW1tcImNoZWNrQmFnRW50cmllc1wiLCBbJGjNj19hID0+IChjaGVja0JhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjNj19hID0+IChtYWtlQmFnT2ZFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1ByaW1pdGl2ZUtleT0odmFsLGNoZWNrKT0+e1xuaWYoaXNPYmplY3QodmFsKSl7XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG5jaGVjayhmYWxzZSxYIGBBICR7cSh0eXBlb2YgdmFsKX0gY2Fubm90IGJlIGEgcHJpbWl0aXZlOiAke3ZhbH1gKSk7XG5cbiB9XG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHZhbCk7XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUHJpbWl0aXZlS2V5PSh2YWwpPT5jaGVja1ByaW1pdGl2ZUtleSh2YWwsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNQcmltaXRpdmVLZXkoaXNQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGlzUHJpbWl0aXZlS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQcmltaXRpdmVLZXk9KHZhbCk9PntcbmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRQcmltaXRpdmVLZXkoYXNzZXJ0UHJpbWl0aXZlS2V5KTtcbmhhcmRlbihhc3NlcnRQcmltaXRpdmVLZXkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tTY2FsYXJLZXk9KHZhbCxjaGVjayk9PntcbmlmKGlzUHJpbWl0aXZlS2V5KHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5pZihwYXNzU3R5bGU9PT0ncmVtb3RhYmxlJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIGEgc2NhbGFyIGtleTogJHt2YWx9YCk7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuY2hlY2tTY2FsYXJLZXkoY2hlY2tTY2FsYXJLZXkpO1xuY29uc3QgICAgICAgIGlzU2NhbGFyS2V5PSh2YWwpPT5jaGVja1NjYWxhcktleSh2YWwsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNTY2FsYXJLZXkoaXNTY2FsYXJLZXkpO1xuaGFyZGVuKGlzU2NhbGFyS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRTY2FsYXJLZXk9KHZhbCk9PntcbmNoZWNrU2NhbGFyS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRTY2FsYXJLZXkoYXNzZXJ0U2NhbGFyS2V5KTtcbmhhcmRlbihhc3NlcnRTY2FsYXJLZXkpO1xuXG4vL1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3Qga2V5TWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tLZXk9KHZhbCxjaGVjayk9PntcbmlmKCFpc09iamVjdCh2YWwpKXtcbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUodmFsKTtcbnJldHVybiB0cnVlO1xuIH1cbi8vXG5pZihrZXlNZW1vLmhhcyh2YWwpKXtcbnJldHVybiB0cnVlO1xuIH1cbi8vXG5jb25zdCByZXN1bHQ9Y2hlY2tLZXlJbnRlcm5hbCh2YWwsY2hlY2spO1xuaWYocmVzdWx0KXtcbi8vXG4vL1xuLy9cbmtleU1lbW8uYWRkKHZhbCk7XG4gfVxuLy9cbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrS2V5KGNoZWNrS2V5KTtcbmhhcmRlbihjaGVja0tleSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzS2V5PSh2YWwpPT5jaGVja0tleSh2YWwsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNLZXkoaXNLZXkpO1xuaGFyZGVuKGlzS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRLZXk9KHZhbCk9PntcbmNoZWNrS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRLZXkoYXNzZXJ0S2V5KTtcbmhhcmRlbihhc3NlcnRLZXkpO1xuXG4vL1xuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29weVNldE1lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrQ29weVNldD0ocyxjaGVjayk9PntcbmlmKGNvcHlTZXRNZW1vLmhhcyhzKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCByZXN1bHQ9XG4ocGFzc1N0eWxlT2Yocyk9PT0ndGFnZ2VkJyYmZ2V0VGFnKHMpPT09J2NvcHlTZXQnfHxcbmNoZWNrKGZhbHNlLFggYE5vdCBhIGNvcHlTZXQ6ICR7c31gKSkmJlxuY2hlY2tFbGVtZW50cyhzLnBheWxvYWQsY2hlY2spJiZcbmNoZWNrS2V5KHMucGF5bG9hZCxjaGVjayk7XG5pZihyZXN1bHQpe1xuY29weVNldE1lbW8uYWRkKHMpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UuY2hlY2tDb3B5U2V0KGNoZWNrQ29weVNldCk7XG5oYXJkZW4oY2hlY2tDb3B5U2V0KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlTZXQ9KHMpPT5jaGVja0NvcHlTZXQocyxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc0NvcHlTZXQoaXNDb3B5U2V0KTtcbmhhcmRlbihpc0NvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5U2V0PShzKT0+e1xuY2hlY2tDb3B5U2V0KHMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weVNldChhc3NlcnRDb3B5U2V0KTtcbmhhcmRlbihhc3NlcnRDb3B5U2V0KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlTZXRLZXlzPShzKT0+e1xuYXNzZXJ0Q29weVNldChzKTtcbnJldHVybiBzLnBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0Q29weVNldEtleXMoZ2V0Q29weVNldEtleXMpO1xuaGFyZGVuKGdldENvcHlTZXRLZXlzKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5U2V0S2V5PShzLGZuKT0+XG5nZXRDb3B5U2V0S2V5cyhzKS5ldmVyeSgoa2V5LGluZGV4KT0+Zm4oa2V5LGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weVNldEtleShldmVyeUNvcHlTZXRLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weVNldEtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weVNldD0oZWxlbWVudEl0ZXIpPT57XG5jb25zdCByZXN1bHQ9bWFrZVNldE9mRWxlbWVudHMoZWxlbWVudEl0ZXIpO1xuYXNzZXJ0Q29weVNldChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5tYWtlQ29weVNldChtYWtlQ29weVNldCk7XG5oYXJkZW4obWFrZUNvcHlTZXQpO1xuXG4vL1xuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29weUJhZ01lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrQ29weUJhZz0oYixjaGVjayk9PntcbmlmKGNvcHlCYWdNZW1vLmhhcyhiKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCByZXN1bHQ9XG4ocGFzc1N0eWxlT2YoYik9PT0ndGFnZ2VkJyYmZ2V0VGFnKGIpPT09J2NvcHlCYWcnfHxcbmNoZWNrKGZhbHNlLFggYE5vdCBhIGNvcHlCYWc6ICR7Yn1gKSkmJlxuY2hlY2tCYWdFbnRyaWVzKGIucGF5bG9hZCxjaGVjaykmJlxuY2hlY2tLZXkoYi5wYXlsb2FkLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb3B5QmFnTWVtby5hZGQoYik7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlCYWcoY2hlY2tDb3B5QmFnKTtcbmhhcmRlbihjaGVja0NvcHlCYWcpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weUJhZz0oYik9PmNoZWNrQ29weUJhZyhiLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weUJhZyhpc0NvcHlCYWcpO1xuaGFyZGVuKGlzQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlCYWc9KGIpPT57XG5jaGVja0NvcHlCYWcoYixhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb3B5QmFnKGFzc2VydENvcHlCYWcpO1xuaGFyZGVuKGFzc2VydENvcHlCYWcpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weUJhZ0VudHJpZXM9KGIpPT57XG5hc3NlcnRDb3B5QmFnKGIpO1xucmV0dXJuIGIucGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRDb3B5QmFnRW50cmllcyhnZXRDb3B5QmFnRW50cmllcyk7XG5oYXJkZW4oZ2V0Q29weUJhZ0VudHJpZXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlCYWdFbnRyeT0oYixmbik9PlxuZ2V0Q29weUJhZ0VudHJpZXMoYikuZXZlcnkoKGVudHJ5LGluZGV4KT0+Zm4oZW50cnksaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5QmFnRW50cnkoZXZlcnlDb3B5QmFnRW50cnkpO1xuaGFyZGVuKGV2ZXJ5Q29weUJhZ0VudHJ5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5QmFnPShiYWdFbnRyeUl0ZXIpPT57XG5jb25zdCByZXN1bHQ9bWFrZUJhZ09mRW50cmllcyhiYWdFbnRyeUl0ZXIpO1xuYXNzZXJ0Q29weUJhZyhyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5tYWtlQ29weUJhZyhtYWtlQ29weUJhZyk7XG5oYXJkZW4obWFrZUNvcHlCYWcpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlCYWdGcm9tRWxlbWVudHM9KGVsZW1lbnRJdGVyKT0+e1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuY29uc3Qgc29ydGVkPXNvcnRCeVJhbmsoZWxlbWVudEl0ZXIsZnVsbENvbXBhcmUpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbnRyaWVzPVtdO1xuZm9yKGxldCBpPTA7aTxzb3J0ZWQubGVuZ3RoOyl7XG5jb25zdCBrPXNvcnRlZFtpXTtcbmxldCBqPWkrMTtcbndoaWxlKGo8c29ydGVkLmxlbmd0aCYmZnVsbENvbXBhcmUoayxzb3J0ZWRbal0pPT09MCl7XG5qKz0xO1xuIH1cbmVudHJpZXMucHVzaChbayxCaWdJbnQoai1pKV0pO1xuaT1qO1xuIH1cbnJldHVybiBtYWtlQ29weUJhZyhlbnRyaWVzKTtcbiB9OyRozY9fb25jZS5tYWtlQ29weUJhZ0Zyb21FbGVtZW50cyhtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5oYXJkZW4obWFrZUNvcHlCYWdGcm9tRWxlbWVudHMpO1xuXG4vL1xuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29weU1hcE1lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrQ29weU1hcD0obSxjaGVjayk9PntcbmlmKGNvcHlNYXBNZW1vLmhhcyhtKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighKHBhc3NTdHlsZU9mKG0pPT09J3RhZ2dlZCcmJmdldFRhZyhtKT09PSdjb3B5TWFwJykpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYE5vdCBhIGNvcHlNYXA6ICR7bX1gKTtcbiB9XG5jb25zdHtwYXlsb2FkfT1tO1xuaWYocGFzc1N0eWxlT2YocGF5bG9hZCkhPT0nY29weVJlY29yZCcpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBiZSBhIHJlY29yZDogJHttfWApO1xuIH1cbmNvbnN0e2tleXMsdmFsdWVzLC4uLnJlc3R9PXBheWxvYWQ7XG5jb25zdCByZXN1bHQ9XG4ob3duS2V5cyhyZXN0KS5sZW5ndGg9PT0wfHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBBIGNvcHlNYXAncyBwYXlsb2FkIG11c3Qgb25seSBoYXZlIC5rZXlzIGFuZCAudmFsdWVzOiAke219YCkpJiZcblxuY2hlY2tFbGVtZW50cyhrZXlzLGNoZWNrKSYmXG5jaGVja0tleShrZXlzLGNoZWNrKSYmKFxucGFzc1N0eWxlT2YodmFsdWVzKT09PSdjb3B5QXJyYXknfHxcbmNoZWNrKGZhbHNlLFggYEEgY29weU1hcCdzIC52YWx1ZXMgbXVzdCBiZSBhIGNvcHlBcnJheTogJHttfWApKSYmKFxua2V5cy5sZW5ndGg9PT12YWx1ZXMubGVuZ3RofHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBBIGNvcHlNYXAgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBrZXlzIGFuZCB2YWx1ZXM6ICR7bX1gKSk7XG5cbmlmKHJlc3VsdCl7XG5jb3B5TWFwTWVtby5hZGQobSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlNYXAoY2hlY2tDb3B5TWFwKTtcbmhhcmRlbihjaGVja0NvcHlNYXApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9PmNoZWNrQ29weU1hcChtLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weU1hcChpc0NvcHlNYXApO1xuaGFyZGVuKGlzQ29weU1hcCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q29weU1hcD0obSk9PntcbmNoZWNrQ29weU1hcChtLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlNYXAoYXNzZXJ0Q29weU1hcCk7XG5oYXJkZW4oYXNzZXJ0Q29weU1hcCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBLZXlzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbnJldHVybiBtLnBheWxvYWQua2V5cztcbiB9OyRozY9fb25jZS5nZXRDb3B5TWFwS2V5cyhnZXRDb3B5TWFwS2V5cyk7XG5oYXJkZW4oZ2V0Q29weU1hcEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwVmFsdWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbnJldHVybiBtLnBheWxvYWQudmFsdWVzO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBWYWx1ZXMoZ2V0Q29weU1hcFZhbHVlcyk7XG5oYXJkZW4oZ2V0Q29weU1hcFZhbHVlcyk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwRW50cnlBcnJheT0obSk9PntcbmFzc2VydENvcHlNYXAobSk7XG5jb25zdHtcbnBheWxvYWQ6e2tleXMsdmFsdWVzfX09XG5tO1xucmV0dXJuIGhhcmRlbihrZXlzLm1hcCgoa2V5LGkpPT5ba2V5LHZhbHVlc1tpXV0pKTtcbiB9OyRozY9fb25jZS5nZXRDb3B5TWFwRW50cnlBcnJheShnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5oYXJkZW4oZ2V0Q29weU1hcEVudHJ5QXJyYXkpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwRW50cmllcz0obSk9PntcbmFzc2VydENvcHlNYXAobSk7XG5jb25zdHtcbnBheWxvYWQ6e2tleXMsdmFsdWVzfX09XG5tO1xuY29uc3R7bGVuZ3RofT0vKiAgICAgICAgICAgICAgICAqL2tleXM7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5sZXQgaT0wO1xucmV0dXJuIEZhcignQ29weU1hcCBlbnRyaWVzIGl0ZXJhdG9yJyx7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlc3VsdDtcbmlmKGk8bGVuZ3RoKXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6W2tleXNbaV0sdmFsdWVzW2ldXX0pO1xuaSs9MTtcbnJldHVybiByZXN1bHQ7XG4gfWVsc2V7XG5yZXN1bHQ9aGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9OyRozY9fb25jZS5nZXRDb3B5TWFwRW50cmllcyhnZXRDb3B5TWFwRW50cmllcyk7XG5oYXJkZW4oZ2V0Q29weU1hcEVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weU1hcEtleT0obSxmbik9PlxuZ2V0Q29weU1hcEtleXMobSkuZXZlcnkoKGtleSxpbmRleCk9PmZuKGtleSxpbmRleCkpOyRozY9fb25jZS5ldmVyeUNvcHlNYXBLZXkoZXZlcnlDb3B5TWFwS2V5KTtcbmhhcmRlbihldmVyeUNvcHlNYXBLZXkpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weU1hcFZhbHVlPShtLGZuKT0+XG5nZXRDb3B5TWFwVmFsdWVzKG0pLmV2ZXJ5KCh2YWx1ZSxpbmRleCk9PmZuKHZhbHVlLGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weU1hcFZhbHVlKGV2ZXJ5Q29weU1hcFZhbHVlKTtcbmhhcmRlbihldmVyeUNvcHlNYXBWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvcHlNYXBLZXlTZXQ9KG0pPT5cbi8vXG5tYWtlVGFnZ2VkKCdjb3B5U2V0JyxtLnBheWxvYWQua2V5cyk7JGjNj19vbmNlLmNvcHlNYXBLZXlTZXQoY29weU1hcEtleVNldCk7XG5oYXJkZW4oY29weU1hcEtleVNldCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5TWFwPShlbnRyaWVzKT0+e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBzb3J0ZWRFbnRyaWVzPXNvcnRCeVJhbmsoZW50cmllcyxjb21wYXJlQW50aVJhbmspO1xuY29uc3Qga2V5cz1zb3J0ZWRFbnRyaWVzLm1hcCgoW2ssX3ZdKT0+ayk7XG5jb25zdCB2YWx1ZXM9c29ydGVkRW50cmllcy5tYXAoKFtfayx2XSk9PnYpO1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2NvcHlNYXAnLHtrZXlzLHZhbHVlc30pO1xuYXNzZXJ0Q29weU1hcChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5tYWtlQ29weU1hcChtYWtlQ29weU1hcCk7XG5oYXJkZW4obWFrZUNvcHlNYXApO1xuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja0tleUludGVybmFsPSh2YWwsY2hlY2spPT57XG5jb25zdCBjaGVja0l0PShjaGlsZCk9PmNoZWNrS2V5KGNoaWxkLGNoZWNrKTtcblxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbnJldHVybiBPYmplY3QudmFsdWVzKHZhbCkuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5yZXR1cm4gdmFsLmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdCB0YWc9Z2V0VGFnKHZhbCk7XG5zd2l0Y2godGFnKXtcbmNhc2UnY29weVNldCc6e1xucmV0dXJuIGNoZWNrQ29weVNldCh2YWwsY2hlY2spO1xuIH1cbmNhc2UnY29weUJhZyc6e1xucmV0dXJuIGNoZWNrQ29weUJhZyh2YWwsY2hlY2spO1xuIH1cbmNhc2UnY29weU1hcCc6e1xucmV0dXJuKFxuY2hlY2tDb3B5TWFwKHZhbCxjaGVjaykmJlxuLy9cbi8vXG4vL1xuZXZlcnlDb3B5TWFwVmFsdWUodmFsLGNoZWNrSXQpKTtcblxuIH1cbmRlZmF1bHQ6e1xucmV0dXJuKFxuY2hlY2shPT1pZGVudENoZWNrZXImJlxuY2hlY2soZmFsc2UsWCBgQSBwYXNzYWJsZSB0YWdnZWQgJHtxKHRhZyl9IGlzIG5vdCBhIGtleTogJHt2YWx9YCkpO1xuXG4gfX1cblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG4vL1xucmV0dXJuIHRydWU7XG4gfVxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgYSBrZXlgKTtcbiB9XG5kZWZhdWx0Ontcbi8vXG4vL1xudGhyb3cgRmFpbCBgdW5leHBlY3RlZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3ZhbH1gO1xuIH19XG5cbiB9O1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQcmltaXRpdmVLZXkiOlsiaXNQcmltaXRpdmVLZXkiXSwiYXNzZXJ0UHJpbWl0aXZlS2V5IjpbImFzc2VydFByaW1pdGl2ZUtleSJdLCJjaGVja1NjYWxhcktleSI6WyJjaGVja1NjYWxhcktleSJdLCJpc1NjYWxhcktleSI6WyJpc1NjYWxhcktleSJdLCJhc3NlcnRTY2FsYXJLZXkiOlsiYXNzZXJ0U2NhbGFyS2V5Il0sImNoZWNrS2V5IjpbImNoZWNrS2V5Il0sImlzS2V5IjpbImlzS2V5Il0sImFzc2VydEtleSI6WyJhc3NlcnRLZXkiXSwiY2hlY2tDb3B5U2V0IjpbImNoZWNrQ29weVNldCJdLCJpc0NvcHlTZXQiOlsiaXNDb3B5U2V0Il0sImFzc2VydENvcHlTZXQiOlsiYXNzZXJ0Q29weVNldCJdLCJnZXRDb3B5U2V0S2V5cyI6WyJnZXRDb3B5U2V0S2V5cyJdLCJldmVyeUNvcHlTZXRLZXkiOlsiZXZlcnlDb3B5U2V0S2V5Il0sIm1ha2VDb3B5U2V0IjpbIm1ha2VDb3B5U2V0Il0sImNoZWNrQ29weUJhZyI6WyJjaGVja0NvcHlCYWciXSwiaXNDb3B5QmFnIjpbImlzQ29weUJhZyJdLCJhc3NlcnRDb3B5QmFnIjpbImFzc2VydENvcHlCYWciXSwiZ2V0Q29weUJhZ0VudHJpZXMiOlsiZ2V0Q29weUJhZ0VudHJpZXMiXSwiZXZlcnlDb3B5QmFnRW50cnkiOlsiZXZlcnlDb3B5QmFnRW50cnkiXSwibWFrZUNvcHlCYWciOlsibWFrZUNvcHlCYWciXSwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiOlsibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSwiY2hlY2tDb3B5TWFwIjpbImNoZWNrQ29weU1hcCJdLCJpc0NvcHlNYXAiOlsiaXNDb3B5TWFwIl0sImFzc2VydENvcHlNYXAiOlsiYXNzZXJ0Q29weU1hcCJdLCJnZXRDb3B5TWFwS2V5cyI6WyJnZXRDb3B5TWFwS2V5cyJdLCJnZXRDb3B5TWFwVmFsdWVzIjpbImdldENvcHlNYXBWYWx1ZXMiXSwiZ2V0Q29weU1hcEVudHJ5QXJyYXkiOlsiZ2V0Q29weU1hcEVudHJ5QXJyYXkiXSwiZ2V0Q29weU1hcEVudHJpZXMiOlsiZ2V0Q29weU1hcEVudHJpZXMiXSwiZXZlcnlDb3B5TWFwS2V5IjpbImV2ZXJ5Q29weU1hcEtleSJdLCJldmVyeUNvcHlNYXBWYWx1ZSI6WyJldmVyeUNvcHlNYXBWYWx1ZSJdLCJjb3B5TWFwS2V5U2V0IjpbImNvcHlNYXBLZXlTZXQiXSwibWFrZUNvcHlNYXAiOlsibWFrZUNvcHlNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAhD+LBxMVAAATFQAALQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jb21wYXJlS2V5cy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIiwiLi9jaGVja0tleS5qcyIsIi4va2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanMiXSwiZXhwb3J0cyI6WyJiYWdDb21wYXJlIiwiY29tcGFyZUtleXMiLCJrZXlFUSIsImtleUdUIiwia2V5R1RFIiwia2V5TFQiLCJrZXlMVEUiLCJzZXRDb21wYXJlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGdldFRhZyxjb21wYXJlUmFuayxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXMsdHJpdmlhbENvbXBhcmF0b3IscSxGYWlsLGFzc2VydEtleSxnZXRDb3B5QmFnRW50cmllcyxnZXRDb3B5TWFwRW50cnlBcnJheSxnZXRDb3B5U2V0S2V5cyxtYWtlQ29tcGFyZUNvbGxlY3Rpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV0sW1widHJpdmlhbENvbXBhcmF0b3JcIiwgWyRozY9fYSA9PiAodHJpdmlhbENvbXBhcmF0b3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NoZWNrS2V5LmpzXCIsIFtbXCJhc3NlcnRLZXlcIiwgWyRozY9fYSA9PiAoYXNzZXJ0S2V5ID0gJGjNj19hKV1dLFtcImdldENvcHlCYWdFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlCYWdFbnRyaWVzID0gJGjNj19hKV1dLFtcImdldENvcHlNYXBFbnRyeUFycmF5XCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBFbnRyeUFycmF5ID0gJGjNj19hKV1dLFtcImdldENvcHlTZXRLZXlzXCIsIFskaM2PX2EgPT4gKGdldENvcHlTZXRLZXlzID0gJGjNj19hKV1dXV0sW1wiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qc1wiLCBbW1wibWFrZUNvbXBhcmVDb2xsZWN0aW9uXCIsIFskaM2PX2EgPT4gKG1ha2VDb21wYXJlQ29sbGVjdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzZXRDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4ocyk9PmhhcmRlbihnZXRDb3B5U2V0S2V5cyhzKS5tYXAoKGtleSk9PltrZXksMV0pKSxcblxuMCxcbnRyaXZpYWxDb21wYXJhdG9yKTskaM2PX29uY2Uuc2V0Q29tcGFyZShzZXRDb21wYXJlKTtcblxuaGFyZGVuKHNldENvbXBhcmUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYmFnQ29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG5nZXRDb3B5QmFnRW50cmllcyxcbjBuLFxudHJpdmlhbENvbXBhcmF0b3IpOyRozY9fb25jZS5iYWdDb21wYXJlKGJhZ0NvbXBhcmUpO1xuXG5oYXJkZW4oYmFnQ29tcGFyZSk7XG5cbi8vXG4vL1xuLy9cbi8vXG4vKlxuXG5cbiAqL1xuY29uc3QgQUJTRU5UPVN5bWJvbCgnYWJzZW50Jyk7XG4vKlxuXG5cblxuXG5cblxuICovXG4vL1xuY29uc3QgX21hcENvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuZ2V0Q29weU1hcEVudHJ5QXJyYXksXG5BQlNFTlQsXG4obGVmdFZhbHVlLHJpZ2h0VmFsdWUpPT57XG5pZihsZWZ0VmFsdWU9PT1BQlNFTlQmJnJpZ2h0VmFsdWU9PT1BQlNFTlQpe1xudGhyb3cgRmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgYWJzZW50IGVudHJ5IHBhaXJgO1xuIH1lbHNlIGlmKGxlZnRWYWx1ZT09PUFCU0VOVCl7XG5yZXR1cm4tMTtcbiB9ZWxzZSBpZihyaWdodFZhbHVlPT09QUJTRU5UKXtcbnJldHVybiAxO1xuIH1lbHNle1xuLy9cbnJldHVybiBjb21wYXJlS2V5cyhsZWZ0VmFsdWUscmlnaHRWYWx1ZSk7XG4gfVxuIH0pO1xuXG5oYXJkZW4oX21hcENvbXBhcmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29tcGFyZUtleXM9KGxlZnQscmlnaHQpPT57XG5hc3NlcnRLZXkobGVmdCk7XG5hc3NlcnRLZXkocmlnaHQpO1xuY29uc3QgbGVmdFN0eWxlPXBhc3NTdHlsZU9mKGxlZnQpO1xuY29uc3QgcmlnaHRTdHlsZT1wYXNzU3R5bGVPZihyaWdodCk7XG5pZihsZWZ0U3R5bGUhPT1yaWdodFN0eWxlKXtcbi8vXG5yZXR1cm4gTmFOO1xuIH1cbnN3aXRjaChsZWZ0U3R5bGUpe1xuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ2JpZ2ludCc6XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ3N5bWJvbCc6e1xuLy9cbnJldHVybiBjb21wYXJlUmFuayhsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ251bWJlcic6e1xuY29uc3QgcmFua0NvbXA9Y29tcGFyZVJhbmsobGVmdCxyaWdodCk7XG5pZihyYW5rQ29tcD09PTApe1xucmV0dXJuIDA7XG4gfVxuaWYoTnVtYmVyLmlzTmFOKGxlZnQpfHxOdW1iZXIuaXNOYU4ocmlnaHQpKXtcbi8vXG5hc3NlcnQoIU51bWJlci5pc05hTihsZWZ0KXx8IU51bWJlci5pc05hTihyaWdodCkpO1xucmV0dXJuIE5hTjtcbiB9XG4vL1xuLy9cbnJldHVybiByYW5rQ29tcDtcbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuaWYobGVmdD09PXJpZ2h0KXtcbnJldHVybiAwO1xuIH1cbi8vXG4vL1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuLy9cbmNvbnN0IHJlc3VsdD1jb21wYXJlS2V5cyhsZWZ0W2ldLHJpZ2h0W2ldKTtcbmlmKHJlc3VsdCE9PTApe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuLy9cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmVSYW5rKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbmNvbnN0IGxlZnROYW1lcz1yZWNvcmROYW1lcyhsZWZ0KTtcbi8vXG5jb25zdCByaWdodE5hbWVzPXJlY29yZE5hbWVzKHJpZ2h0KTtcblxuLy9cbmlmKCFrZXlFUShsZWZ0TmFtZXMscmlnaHROYW1lcykpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gTmFOO1xuIH1cbi8vXG5jb25zdCBsZWZ0VmFsdWVzPXJlY29yZFZhbHVlcyhsZWZ0LGxlZnROYW1lcyk7XG4vL1xuY29uc3QgcmlnaHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHJpZ2h0LHJpZ2h0TmFtZXMpO1xuLy9cbi8vXG5sZXQgcmVzdWx0PTA7XG5mb3IobGV0IGk9MDtpPGxlZnRWYWx1ZXMubGVuZ3RoO2krPTEpe1xuY29uc3QgY29tcD1jb21wYXJlS2V5cyhsZWZ0VmFsdWVzW2ldLHJpZ2h0VmFsdWVzW2ldKTtcbmlmKE51bWJlci5pc05hTihjb21wKSl7XG5yZXR1cm4gTmFOO1xuIH1cbmlmKHJlc3VsdCE9PWNvbXAmJmNvbXAhPT0wKXtcbmlmKHJlc3VsdD09PTApe1xucmVzdWx0PWNvbXA7XG4gfWVsc2V7XG5hc3NlcnQoXG5yZXN1bHQ9PT0tMSYmY29tcD09PTF8fHJlc3VsdD09PTEmJmNvbXA9PT0tMSk7XG5cbnJldHVybiBOYU47XG4gfVxuIH1cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIHJlc3VsdDtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxlZnRUYWc9Z2V0VGFnKGxlZnQpO1xuLy9cbmNvbnN0IHJpZ2h0VGFnPWdldFRhZyhyaWdodCk7XG5pZihsZWZ0VGFnIT09cmlnaHRUYWcpe1xuLy9cbnJldHVybiBOYU47XG4gfVxuc3dpdGNoKGxlZnRUYWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG4vL1xucmV0dXJuIHNldENvbXBhcmUobGVmdCxyaWdodCk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG4vL1xucmV0dXJuIGJhZ0NvbXBhcmUobGVmdCxyaWdodCk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbnRocm93IEZhaWwgYE1hcCBjb21wYXJpc29uIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6ICR7bGVmdH0gdnMgJHtyaWdodH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgdW5leHBlY3RlZCB0YWcgJHtxKGxlZnRUYWcpfTogJHtsZWZ0fWA7XG4gfX1cblxuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgdW5leHBlY3RlZCBwYXNzU3R5bGUgJHtxKGxlZnRTdHlsZSl9OiAke2xlZnR9YDtcbiB9fVxuXG4gfTskaM2PX29uY2UuY29tcGFyZUtleXMoY29tcGFyZUtleXMpO1xuaGFyZGVuKGNvbXBhcmVLZXlzKTtcblxuY29uc3QgICAgICAgIGtleUxUPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk8MDskaM2PX29uY2Uua2V5TFQoa2V5TFQpO1xuaGFyZGVuKGtleUxUKTtcblxuY29uc3QgICAgICAgIGtleUxURT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPD0wOyRozY9fb25jZS5rZXlMVEUoa2V5TFRFKTtcbmhhcmRlbihrZXlMVEUpO1xuXG5jb25zdCAgICAgICAga2V5RVE9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KT09PTA7JGjNj19vbmNlLmtleUVRKGtleUVRKTtcbmhhcmRlbihrZXlFUSk7XG5cbmNvbnN0ICAgICAgICBrZXlHVEU9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KT49MDskaM2PX29uY2Uua2V5R1RFKGtleUdURSk7XG5oYXJkZW4oa2V5R1RFKTtcblxuY29uc3QgICAgICAgIGtleUdUPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk+MDskaM2PX29uY2Uua2V5R1Qoa2V5R1QpO1xuaGFyZGVuKGtleUdUKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InNldENvbXBhcmUiOlsic2V0Q29tcGFyZSJdLCJiYWdDb21wYXJlIjpbImJhZ0NvbXBhcmUiXSwiY29tcGFyZUtleXMiOlsiY29tcGFyZUtleXMiXSwia2V5TFQiOlsia2V5TFQiXSwia2V5TFRFIjpbImtleUxURSJdLCJrZXlFUSI6WyJrZXlFUSJdLCJrZXlHVEUiOlsia2V5R1RFIl0sImtleUdUIjpbImtleUdUIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEybZhbHDQAAxw0AACkAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weUJhZy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0QmFnRW50cmllcyIsImFzc2VydE5vRHVwbGljYXRlS2V5cyIsImNoZWNrQmFnRW50cmllcyIsImNvZXJjZVRvQmFnRW50cmllcyIsIm1ha2VCYWdPZkVudHJpZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxpc1JhbmtTb3J0ZWQsbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcImlzUmFua1NvcnRlZFwiLCBbJGjNj19hID0+IChpc1JhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrTm9EdXBsaWNhdGVLZXlzPShiYWdFbnRyaWVzLGZ1bGxDb21wYXJlLGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuLy9cbmZ1bGxDb21wYXJlPWZ1bGxDb21wYXJlfHxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG4vL1xuLy9cbi8vXG5iYWdFbnRyaWVzPXNvcnRCeVJhbmsoYmFnRW50cmllcyxmdWxsQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWJhZ0VudHJpZXM7XG5mb3IobGV0IGk9MTtpPGxlbmd0aDtpKz0xKXtcbmNvbnN0IGswPWJhZ0VudHJpZXNbaS0xXVswXTtcbmNvbnN0IGsxPWJhZ0VudHJpZXNbaV1bMF07XG5pZihmdWxsQ29tcGFyZShrMCxrMSk9PT0wKXtcbnJldHVybiBjaGVjayhmYWxzZSxYIGB2YWx1ZSBoYXMgZHVwbGljYXRlIGtleXM6ICR7azB9YCk7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydE5vRHVwbGljYXRlS2V5cz0oYmFnRW50cmllcyxmdWxsQ29tcGFyZT11bmRlZmluZWQpPT57XG5jaGVja05vRHVwbGljYXRlS2V5cyhiYWdFbnRyaWVzLGZ1bGxDb21wYXJlLGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKGFzc2VydE5vRHVwbGljYXRlS2V5cyk7XG5jb25zdCAgICAgICAgY2hlY2tCYWdFbnRyaWVzPShiYWdFbnRyaWVzLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2YoYmFnRW50cmllcykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIGEgY29weUFycmF5OiAke2JhZ0VudHJpZXN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rKSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmZvcihjb25zdCBlbnRyeSBvZiBiYWdFbnRyaWVzKXtcbmlmKFxucGFzc1N0eWxlT2YoZW50cnkpIT09J2NvcHlBcnJheSd8fFxuZW50cnkubGVuZ3RoIT09Mnx8XG50eXBlb2YgZW50cnlbMV0hPT0nYmlnaW50JylcbntcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRWFjaCBlbnRyeSBvZiBhIGNvcHlCYWcgbXVzdCBiZSBwYWlyIG9mIGEga2V5IGFuZCBhIGJpZ2ludCByZXByZXNlbnRpbmcgYSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbmlmKGVudHJ5WzFdPDEpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbiB9XG4vL1xucmV0dXJuIGNoZWNrTm9EdXBsaWNhdGVLZXlzKGJhZ0VudHJpZXMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRozY9fb25jZS5jaGVja0JhZ0VudHJpZXMoY2hlY2tCYWdFbnRyaWVzKTtcbmhhcmRlbihjaGVja0JhZ0VudHJpZXMpO1xuXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRCYWdFbnRyaWVzPShiYWdFbnRyaWVzKT0+e1xuY2hlY2tCYWdFbnRyaWVzKGJhZ0VudHJpZXMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0QmFnRW50cmllcyhhc3NlcnRCYWdFbnRyaWVzKTtcbmhhcmRlbihhc3NlcnRCYWdFbnRyaWVzKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VUb0JhZ0VudHJpZXM9KGJhZ0VudHJpZXNMaXN0KT0+e1xuY29uc3QgYmFnRW50cmllcz1zb3J0QnlSYW5rKGJhZ0VudHJpZXNMaXN0LGNvbXBhcmVBbnRpUmFuayk7XG5hc3NlcnRCYWdFbnRyaWVzKGJhZ0VudHJpZXMpO1xucmV0dXJuIGJhZ0VudHJpZXM7XG4gfTskaM2PX29uY2UuY29lcmNlVG9CYWdFbnRyaWVzKGNvZXJjZVRvQmFnRW50cmllcyk7XG5oYXJkZW4oY29lcmNlVG9CYWdFbnRyaWVzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VCYWdPZkVudHJpZXM9KGJhZ0VudHJ5SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weUJhZycsY29lcmNlVG9CYWdFbnRyaWVzKGJhZ0VudHJ5SXRlcikpOyRozY9fb25jZS5tYWtlQmFnT2ZFbnRyaWVzKG1ha2VCYWdPZkVudHJpZXMpO1xuaGFyZGVuKG1ha2VCYWdPZkVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIjpbImFzc2VydE5vRHVwbGljYXRlS2V5cyJdLCJjaGVja0JhZ0VudHJpZXMiOlsiY2hlY2tCYWdFbnRyaWVzIl0sImFzc2VydEJhZ0VudHJpZXMiOlsiYXNzZXJ0QmFnRW50cmllcyJdLCJjb2VyY2VUb0JhZ0VudHJpZXMiOlsiY29lcmNlVG9CYWdFbnRyaWVzIl0sIm1ha2VCYWdPZkVudHJpZXMiOlsibWFrZUJhZ09mRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAApnmdszgsAAM4LAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NvcHlTZXQuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEVsZW1lbnRzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVzIiwiY2hlY2tFbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiLCJtYWtlU2V0T2ZFbGVtZW50cyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsY29tcGFyZUFudGlSYW5rLGlzUmFua1NvcnRlZCxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLFg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wiaXNSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGlzUmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tOb0R1cGxpY2F0ZXM9KGVsZW1lbnRzLGZ1bGxDb21wYXJlLGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuLy9cbmZ1bGxDb21wYXJlPWZ1bGxDb21wYXJlfHxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG5lbGVtZW50cz1zb3J0QnlSYW5rKGVsZW1lbnRzLGZ1bGxDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZWxlbWVudHM7XG5mb3IobGV0IGk9MTtpPGxlbmd0aDtpKz0xKXtcbmNvbnN0IGswPWVsZW1lbnRzW2ktMV07XG5jb25zdCBrMT1lbGVtZW50c1tpXTtcbmlmKGZ1bGxDb21wYXJlKGswLGsxKT09PTApe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYHZhbHVlIGhhcyBkdXBsaWNhdGUga2V5czogJHtrMH1gKTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGVzPShlbGVtZW50cyxmdWxsQ29tcGFyZT11bmRlZmluZWQpPT57XG5jaGVja05vRHVwbGljYXRlcyhlbGVtZW50cyxmdWxsQ29tcGFyZSxhc3NlcnRDaGVja2VyKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmFzc2VydE5vRHVwbGljYXRlcyhhc3NlcnROb0R1cGxpY2F0ZXMpO1xuY29uc3QgICAgICAgIGNoZWNrRWxlbWVudHM9KGVsZW1lbnRzLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2YoZWxlbWVudHMpIT09J2NvcHlBcnJheScpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBUaGUga2V5cyBvZiBhIGNvcHlTZXQgb3IgY29weU1hcCBtdXN0IGJlIGEgY29weUFycmF5OiAke2VsZW1lbnRzfWApO1xuXG4gfVxuaWYoIWlzUmFua1NvcnRlZChlbGVtZW50cyxjb21wYXJlQW50aVJhbmspKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGtleXMgb2YgYSBjb3B5U2V0IG9yIGNvcHlNYXAgbXVzdCBiZSBzb3J0ZWQgaW4gcmV2ZXJzZSByYW5rIG9yZGVyOiAke2VsZW1lbnRzfWApO1xuXG4gfVxucmV0dXJuIGNoZWNrTm9EdXBsaWNhdGVzKGVsZW1lbnRzLHVuZGVmaW5lZCxjaGVjayk7XG4gfTskaM2PX29uY2UuY2hlY2tFbGVtZW50cyhjaGVja0VsZW1lbnRzKTtcbmhhcmRlbihjaGVja0VsZW1lbnRzKTtcblxuY29uc3QgICAgICAgIGFzc2VydEVsZW1lbnRzPShlbGVtZW50cyk9PntcbmNoZWNrRWxlbWVudHMoZWxlbWVudHMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0RWxlbWVudHMoYXNzZXJ0RWxlbWVudHMpO1xuaGFyZGVuKGFzc2VydEVsZW1lbnRzKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VUb0VsZW1lbnRzPShlbGVtZW50c0xpc3QpPT57XG5jb25zdCBlbGVtZW50cz1zb3J0QnlSYW5rKGVsZW1lbnRzTGlzdCxjb21wYXJlQW50aVJhbmspO1xuYXNzZXJ0RWxlbWVudHMoZWxlbWVudHMpO1xucmV0dXJuIGVsZW1lbnRzO1xuIH07JGjNj19vbmNlLmNvZXJjZVRvRWxlbWVudHMoY29lcmNlVG9FbGVtZW50cyk7XG5oYXJkZW4oY29lcmNlVG9FbGVtZW50cyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU2V0T2ZFbGVtZW50cz0oZWxlbWVudEl0ZXIpPT5cbm1ha2VUYWdnZWQoJ2NvcHlTZXQnLGNvZXJjZVRvRWxlbWVudHMoZWxlbWVudEl0ZXIpKTskaM2PX29uY2UubWFrZVNldE9mRWxlbWVudHMobWFrZVNldE9mRWxlbWVudHMpO1xuaGFyZGVuKG1ha2VTZXRPZkVsZW1lbnRzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydE5vRHVwbGljYXRlcyI6WyJhc3NlcnROb0R1cGxpY2F0ZXMiXSwiY2hlY2tFbGVtZW50cyI6WyJjaGVja0VsZW1lbnRzIl0sImFzc2VydEVsZW1lbnRzIjpbImFzc2VydEVsZW1lbnRzIl0sImNvZXJjZVRvRWxlbWVudHMiOlsiY29lcmNlVG9FbGVtZW50cyJdLCJtYWtlU2V0T2ZFbGVtZW50cyI6WyJtYWtlU2V0T2ZFbGVtZW50cyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABNkSIn4BIAAOASAAA5AAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyIsIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiLCJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxtYWtlSXRlcmF0b3IsbWFrZUFycmF5SXRlcmF0b3IscSxGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0UmFua1NvcnRlZFwiLCBbJGjNj19hID0+IChhc3NlcnRSYW5rU29ydGVkID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VJdGVyYXRvclwiLCBbJGjNj19hID0+IChtYWtlSXRlcmF0b3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUFycmF5SXRlcmF0b3JcIiwgWyRozY9fYSA9PiAobWFrZUFycmF5SXRlcmF0b3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBnZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzPShlbnRyaWVzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuLy9cbmFzc2VydFJhbmtTb3J0ZWQoZW50cmllcyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWVudHJpZXM7XG5sZXQgaT0wO1xubGV0IHNhbWVSYW5rSXRlcmF0b3I7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG5pZihzYW1lUmFua0l0ZXJhdG9yKXtcbmNvbnN0IHJlc3VsdD1zYW1lUmFua0l0ZXJhdG9yLm5leHQoKTtcbmlmKCFyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnNhbWVSYW5rSXRlcmF0b3I9dW5kZWZpbmVkO1xuIH1cbmlmKGk8bGVuZ3RoKXtcbmNvbnN0IGVudHJ5PWVudHJpZXNbaV07XG4vL1xubGV0IGo9aSsxO1xud2hpbGUoajxsZW5ndGgmJnJhbmtDb21wYXJlKGVudHJ5WzBdLGVudHJpZXNbal1bMF0pPT09MCl7XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuLy9cbmk9ajtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6ZW50cnl9KTtcbiB9XG5jb25zdCB0aWVzPWVudHJpZXMuc2xpY2UoaSxqKTtcbmk9ajtcblxuLy9cbi8vXG4vL1xuY29uc3Qgc29ydGVkVGllcz1zb3J0QnlSYW5rKHRpZXMsZnVsbENvbXBhcmUpO1xuZm9yKGxldCBrPTE7azxzb3J0ZWRUaWVzLmxlbmd0aDtrKz0xKXtcbi8vXG5jb25zdFtrZXkwXT1zb3J0ZWRUaWVzW2stMV07XG5jb25zdFtrZXkxXT1zb3J0ZWRUaWVzW2tdO1xuTWF0aC5zaWduKGZ1bGxDb21wYXJlKGtleTAsa2V5MSkpfHxcbkZhaWwgYER1cGxpY2F0ZSBlbnRyeSBrZXk6ICR7a2V5MH1gO1xuIH1cbnNhbWVSYW5rSXRlcmF0b3I9bWFrZUFycmF5SXRlcmF0b3Ioc29ydGVkVGllcyk7XG5yZXR1cm4gc2FtZVJhbmtJdGVyYXRvci5uZXh0KCk7XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH0pO1xuIH07XG5oYXJkZW4oZ2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcz0oXG5jMSxcbmMyLFxuZ2V0RW50cmllcyxcbmFic2VudFZhbHVlKT0+XG57XG5jb25zdCBlMT1nZXRFbnRyaWVzKGMxKTtcbmNvbnN0IGUyPWdldEVudHJpZXMoYzIpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuY29uc3QgeD1nZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKGUxLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5jb25zdCB5PWdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMoZTIsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcblxuLy9cbi8vXG5sZXQgeERvbmU7XG5sZXQgeEtleTtcbmxldCB4VmFsdWU7XG5sZXQgeURvbmU7XG5sZXQgeUtleTtcbmxldCB5VmFsdWU7XG5jb25zdCBub25FbnRyeT1bdW5kZWZpbmVkLHVuZGVmaW5lZF07XG5jb25zdCBuZXh0WD0oKT0+e1xuIXhEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFggbXVzdCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG5jb25zdCByZXN1bHQ9eFZhbHVlO1xuKHtkb25lOnhEb25lLHZhbHVlOlt4S2V5LHhWYWx1ZV09bm9uRW50cnl9PXgubmV4dCgpKTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbm5leHRYKCk7XG5jb25zdCBuZXh0WT0oKT0+e1xuIXlEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFkgbXVzdCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG5jb25zdCByZXN1bHQ9eVZhbHVlO1xuKHtkb25lOnlEb25lLHZhbHVlOlt5S2V5LHlWYWx1ZV09bm9uRW50cnl9PXkubmV4dCgpKTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbm5leHRZKCk7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbnZhbHVlPVt1bmRlZmluZWQsYWJzZW50VmFsdWUsYWJzZW50VmFsdWVdO1xuIH1lbHNlIGlmKHhEb25lKXtcbnZhbHVlPVt5S2V5LGFic2VudFZhbHVlLG5leHRZKCldO1xuIH1lbHNlIGlmKHlEb25lKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksYWJzZW50VmFsdWVdO1xuIH1lbHNle1xuLy9cbi8vXG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHhLZXkseUtleSk7XG5pZihjb21wPT09MCl7XG52YWx1ZT1beEtleSxuZXh0WCgpLG5leHRZKCldO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG52YWx1ZT1beEtleSxuZXh0WCgpLGFic2VudFZhbHVlXTtcbiB9ZWxzZSBpZihjb21wPjApe1xudmFsdWU9W3lLZXksYWJzZW50VmFsdWUsbmV4dFkoKV07XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbmV4cGVjdGVkIGtleSBjb21wYXJpc29uICR7cShjb21wKX0gZm9yICR7eEtleX0gdnMgJHt5S2V5fWA7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9KTtcbiB9OyRozY9fb25jZS5nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyk7XG5oYXJkZW4oZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb21wYXJlQ29sbGVjdGlvbj0oZ2V0RW50cmllcyxhYnNlbnRWYWx1ZSxjb21wYXJlVmFsdWVzKT0+XG5oYXJkZW4oKGxlZnQscmlnaHQpPT57XG5jb25zdCBtZXJnZWQ9Z2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoXG5sZWZ0LFxucmlnaHQsXG5nZXRFbnRyaWVzLFxuYWJzZW50VmFsdWUpO1xuXG5sZXQgbGVmdElzQmlnZ2VyPWZhbHNlO1xubGV0IHJpZ2h0SXNCaWdnZXI9ZmFsc2U7XG5mb3IoY29uc3RbX2tleSxsZWZ0VmFsdWUscmlnaHRWYWx1ZV1vZiBtZXJnZWQpe1xuY29uc3QgY29tcD1jb21wYXJlVmFsdWVzKGxlZnRWYWx1ZSxyaWdodFZhbHVlKTtcbmlmKGNvbXA9PT0wKXtcbi8vXG5jb250aW51ZTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnJpZ2h0SXNCaWdnZXI9dHJ1ZTtcbiB9ZWxzZSBpZihjb21wPjApe1xuLy9cbmxlZnRJc0JpZ2dlcj10cnVlO1xuIH1lbHNle1xuTnVtYmVyLmlzTmFOKGNvbXApfHxcbi8vXG5GYWlsIGBVbmV4cGVjdGVkIHZhbHVlIGNvbXBhcmlzb24gJHtxKGNvbXApfSBmb3IgJHtsZWZ0VmFsdWV9IHZzICR7cmlnaHRWYWx1ZX1gO1xucmV0dXJuIE5hTjtcbiB9XG5pZihsZWZ0SXNCaWdnZXImJnJpZ2h0SXNCaWdnZXIpe1xucmV0dXJuIE5hTjtcbiB9XG4gfVxuLy9cbnJldHVybiBsZWZ0SXNCaWdnZXI/MTpyaWdodElzQmlnZ2VyPy0xOjA7XG4gfSk7JGjNj19vbmNlLm1ha2VDb21wYXJlQ29sbGVjdGlvbihtYWtlQ29tcGFyZUNvbGxlY3Rpb24pO1xuaGFyZGVuKG1ha2VDb21wYXJlQ29sbGVjdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyI6WyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyJdLCJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iOlsibWFrZUNvbXBhcmVDb2xsZWN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFs61ctSFgAAUhYAADUAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5QmFnLmpzIl0sImV4cG9ydHMiOlsiYmFnRGlzam9pbnRTdWJ0cmFjdCIsImJhZ0ludGVyc2VjdGlvbiIsImJhZ0lzRGlzam9pbnQiLCJiYWdJc1N1cGVyYmFnIiwiYmFnVW5pb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxxLEZhaWwsYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzLG1ha2VCYWdPZkVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlCYWcuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlS2V5c1wiLCBbJGjNj19hID0+IChhc3NlcnROb0R1cGxpY2F0ZUtleXMgPSAkaM2PX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjNj19hID0+IChtYWtlQmFnT2ZFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWdXaW5kb3dSZXNvcnQ9KGJhZ0VudHJpZXMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG5hc3NlcnRSYW5rU29ydGVkKGJhZ0VudHJpZXMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1iYWdFbnRyaWVzO1xubGV0IGk9MDtcbmxldCBvcHRJbm5lckl0ZXJhdG9yO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+XG5oYXJkZW4oe1xubmV4dDooKT0+e1xuaWYob3B0SW5uZXJJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9b3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG5pZihyZXN1bHQuZG9uZSl7XG5vcHRJbm5lckl0ZXJhdG9yPXVuZGVmaW5lZDtcbi8vXG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCBlbnRyeT1iYWdFbnRyaWVzW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoXG5qPGxlbmd0aCYmXG5yYW5rQ29tcGFyZShlbnRyeVswXSxiYWdFbnRyaWVzW2pdWzBdKT09PTApXG57XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTplbnRyeX0pO1xuIH1cbmNvbnN0IHNpbWlsYXJSdW49YmFnRW50cmllcy5zbGljZShpLGopO1xuaT1qO1xuY29uc3QgcmVzb3J0ZWQ9c29ydEJ5UmFuayhzaW1pbGFyUnVuLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbmFzc2VydE5vRHVwbGljYXRlS2V5cyhyZXNvcnRlZCxmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbm9wdElubmVySXRlcmF0b3I9cmVzb3J0ZWRbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIG9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOltudWxsLDBuXX0pO1xuIH1cbiB9fSl9KTtcblxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1lcmdlPSh4YmFnRW50cmllcyx5YmFnRW50cmllcyk9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuY29uc3QgeHM9YmFnV2luZG93UmVzb3J0KHhiYWdFbnRyaWVzLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5jb25zdCB5cz1iYWdXaW5kb3dSZXNvcnQoeWJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgKi9cbmxldCB4O1xubGV0IHhjO1xubGV0IHhEb25lO1xuLyogICAgICAgICAgICAqL1xubGV0IHk7XG5sZXQgeWM7XG5sZXQgeURvbmU7XG5cbmNvbnN0IHhpPXhzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtcbmRvbmU6eERvbmUsXG52YWx1ZTpbeCx4Y119PVxueGkubmV4dCgpKTtcbiB9O1xubmV4dFgoKTtcblxuY29uc3QgeWk9eXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe1xuZG9uZTp5RG9uZSxcbnZhbHVlOlt5LHljXX09XG55aS5uZXh0KCkpO1xuIH07XG5uZXh0WSgpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKHhEb25lJiZ5RG9uZSl7XG5kb25lPXRydWU7XG4vL1xudmFsdWU9W251bGwsMG4sMG5dO1xuIH1lbHNlIGlmKHhEb25lKXtcbi8vXG52YWx1ZT1beSwwbix5Y107XG5uZXh0WSgpO1xuIH1lbHNlIGlmKHlEb25lKXtcbi8vXG52YWx1ZT1beCx4Yywwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuY29uc3QgY29tcD1mdWxsQ29tcGFyZSh4LHkpO1xuaWYoY29tcD09PTApe1xuLy9cbnZhbHVlPVt4LHhjLHljXTtcbm5leHRYKCk7XG5uZXh0WSgpO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG4vL1xudmFsdWU9W3gseGMsMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbi8vXG5jb21wPjB8fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvbXAgJHtxKGNvbXApfWA7XG52YWx1ZT1beSwwbix5Y107XG5uZXh0WSgpO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lLHZhbHVlfSk7XG4gfX0pO1xuXG4gfX0pO1xuXG4gfTtcbmhhcmRlbihtZXJnZSk7XG5cbi8vXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlcklzU3VwZXJiYWc9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM8eWMpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLy9cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySXNEaXNqb2ludD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVyVW5pb249KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnJlc3VsdC5wdXNoKFttLHhjK3ljXSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySW50ZXJzZWN0aW9uPSh4eWkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5jb25zdCBtYz14Yzw9eWM/eGM6eWM7XG5yZXN1bHQucHVzaChbbSxtY10pO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlckRpc2pvaW50U3VidHJhY3Q9KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmNvbnN0IG1jPXhjLXljO1xubWM+PTBufHxGYWlsIGByaWdodCBlbGVtZW50ICR7bX0gd2FzIG5vdCBpbiBsZWZ0YDtcbmlmKG1jPj0xbil7XG4vL1xucmVzdWx0LnB1c2goW20sbWNdKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG5jb25zdCBtZXJnZWlmeT0oYmFnSXRlck9wKT0+KHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKT0+XG5iYWdJdGVyT3AobWVyZ2UoeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpKTtcblxuY29uc3QgYmFnRW50cmllc0lzU3VwZXJiYWc9bWVyZ2VpZnkoYmFnSXRlcklzU3VwZXJiYWcpO1xuY29uc3QgYmFnRW50cmllc0lzRGlzam9pbnQ9bWVyZ2VpZnkoYmFnSXRlcklzRGlzam9pbnQpO1xuY29uc3QgYmFnRW50cmllc1VuaW9uPW1lcmdlaWZ5KGJhZ0l0ZXJVbmlvbik7XG5jb25zdCBiYWdFbnRyaWVzSW50ZXJzZWN0aW9uPW1lcmdlaWZ5KGJhZ0l0ZXJJbnRlcnNlY3Rpb24pO1xuY29uc3QgYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3Q9bWVyZ2VpZnkoYmFnSXRlckRpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdCYWdpZnk9KGJhZ0VudHJpZXNPcCk9Pih4YmFnLHliYWcpPT5cbmJhZ0VudHJpZXNPcCh4YmFnLnBheWxvYWQseWJhZy5wYXlsb2FkKTtcblxuY29uc3QgYmFnaWZ5PShiYWdFbnRyaWVzT3ApPT4oeGJhZyx5YmFnKT0+XG5tYWtlQmFnT2ZFbnRyaWVzKGJhZ0VudHJpZXNPcCh4YmFnLnBheWxvYWQseWJhZy5wYXlsb2FkKSk7XG5cbmNvbnN0ICAgICAgICBiYWdJc1N1cGVyYmFnPXJhd0JhZ2lmeShiYWdFbnRyaWVzSXNTdXBlcmJhZyk7JGjNj19vbmNlLmJhZ0lzU3VwZXJiYWcoYmFnSXNTdXBlcmJhZyk7XG5jb25zdCAgICAgICAgYmFnSXNEaXNqb2ludD1yYXdCYWdpZnkoYmFnRW50cmllc0lzRGlzam9pbnQpOyRozY9fb25jZS5iYWdJc0Rpc2pvaW50KGJhZ0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGJhZ1VuaW9uPWJhZ2lmeShiYWdFbnRyaWVzVW5pb24pOyRozY9fb25jZS5iYWdVbmlvbihiYWdVbmlvbik7XG5jb25zdCAgICAgICAgYmFnSW50ZXJzZWN0aW9uPWJhZ2lmeShiYWdFbnRyaWVzSW50ZXJzZWN0aW9uKTskaM2PX29uY2UuYmFnSW50ZXJzZWN0aW9uKGJhZ0ludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgYmFnRGlzam9pbnRTdWJ0cmFjdD1iYWdpZnkoYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5iYWdEaXNqb2ludFN1YnRyYWN0KGJhZ0Rpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmFnSXNTdXBlcmJhZyI6WyJiYWdJc1N1cGVyYmFnIl0sImJhZ0lzRGlzam9pbnQiOlsiYmFnSXNEaXNqb2ludCJdLCJiYWdVbmlvbiI6WyJiYWdVbmlvbiJdLCJiYWdJbnRlcnNlY3Rpb24iOlsiYmFnSW50ZXJzZWN0aW9uIl0sImJhZ0Rpc2pvaW50U3VidHJhY3QiOlsiYmFnRGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB9YIszixwAAIscAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weVNldC5qcyJdLCJleHBvcnRzIjpbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNVbmlvbiIsInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFVuaW9uIiwic2V0SW50ZXJzZWN0aW9uIiwic2V0SXNEaXNqb2ludCIsInNldElzU3VwZXJzZXQiLCJzZXRVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLHEsRmFpbCxhc3NlcnROb0R1cGxpY2F0ZXMsbWFrZVNldE9mRWxlbWVudHM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlTZXQuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlc1wiLCBbJGjNj19hID0+IChhc3NlcnROb0R1cGxpY2F0ZXMgPSAkaM2PX2EpXV0sW1wibWFrZVNldE9mRWxlbWVudHNcIiwgWyRozY9fYSA9PiAobWFrZVNldE9mRWxlbWVudHMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgd2luZG93UmVzb3J0PShlbGVtZW50cyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoZWxlbWVudHMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbGVtZW50cztcbmxldCBpPTA7XG5sZXQgb3B0SW5uZXJJdGVyYXRvcjtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PlxuaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKG9wdElubmVySXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PW9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuaWYocmVzdWx0LmRvbmUpe1xub3B0SW5uZXJJdGVyYXRvcj11bmRlZmluZWQ7XG4vL1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgdmFsdWU9ZWxlbWVudHNbaV07XG5sZXQgaj1pKzE7XG53aGlsZShqPGxlbmd0aCYmcmFua0NvbXBhcmUodmFsdWUsZWxlbWVudHNbal0pPT09MCl7XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbmNvbnN0IHNpbWlsYXJSdW49ZWxlbWVudHMuc2xpY2UoaSxqKTtcbmk9ajtcbmNvbnN0IHJlc29ydGVkPXNvcnRCeVJhbmsoc2ltaWxhclJ1bixmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG5hc3NlcnROb0R1cGxpY2F0ZXMocmVzb3J0ZWQsZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5vcHRJbm5lckl0ZXJhdG9yPXJlc29ydGVkW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBvcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTpudWxsfSk7XG4gfVxuIH19KX0pO1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWVyZ2U9KHhlbGVtZW50cyx5ZWxlbWVudHMpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmNvbnN0IHhzPXdpbmRvd1Jlc29ydCh4ZWxlbWVudHMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHlzPXdpbmRvd1Jlc29ydCh5ZWxlbWVudHMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgKi9cbmxldCB4O1xubGV0IHhEb25lO1xuLyogICAgICAgICAgICAqL1xubGV0IHk7XG5sZXQgeURvbmU7XG5cbmNvbnN0IHhpPXhzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtkb25lOnhEb25lLHZhbHVlOnh9PXhpLm5leHQoKSk7XG4gfTtcbm5leHRYKCk7XG5cbmNvbnN0IHlpPXlzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtkb25lOnlEb25lLHZhbHVlOnl9PXlpLm5leHQoKSk7XG4gfTtcbm5leHRZKCk7XG5cbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbi8vXG52YWx1ZT1bbnVsbCwwbiwwbl07XG4gfWVsc2UgaWYoeERvbmUpe1xuLy9cbnZhbHVlPVt5LDBuLDFuXTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoeURvbmUpe1xuLy9cbnZhbHVlPVt4LDFuLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHgseSk7XG5pZihjb21wPT09MCl7XG4vL1xudmFsdWU9W3gsMW4sMW5dO1xubmV4dFgoKTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG52YWx1ZT1beCwxbiwwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuLy9cbmNvbXA+MHx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY29tcCAke3EoY29tcCl9YDtcbnZhbHVlPVt5LDBuLDFuXTtcbm5leHRZKCk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9O1xuaGFyZGVuKG1lcmdlKTtcblxuY29uc3QgaXRlcklzU3VwZXJzZXQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4YyxfeWNdb2YgeHlpKXtcbmlmKHhjPT09MG4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlcklzRGlzam9pbnQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckNvbXBhcmU9KHh5aSk9PntcbmxldCBsb25lWT1mYWxzZTtcbmxldCBsb25lWD1mYWxzZTtcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM9PT0wbil7XG4vL1xubG9uZVk9dHJ1ZTtcbiB9XG5pZih5Yz09PTBuKXtcbi8vXG5sb25lWD10cnVlO1xuIH1cbmlmKGxvbmVYJiZsb25lWSl7XG5yZXR1cm4gTmFOO1xuIH1cbiB9XG5pZihsb25lWCl7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihsb25lWSl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbiFsb25lWCYmIWxvbmVZfHxcbkZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGxvbmUgcGFpciAke3EoW2xvbmVYLGxvbmVZXSl9YDtcbnJldHVybiAwO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyVW5pb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MG4pe1xucmVzdWx0LnB1c2gobSk7XG4gfWVsc2V7XG55Yz49MG58fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvdW50ICR7cSh5Yyl9YDtcbi8vXG4vL1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckRpc2pvaW50VW5pb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG54Yz09PTBufHx5Yz09PTBufHxGYWlsIGBTZXRzIG11c3Qgbm90IGhhdmUgY29tbW9uIGVsZW1lbnRzOiAke219YDtcbmlmKHhjPj0xbil7XG5yZXN1bHQucHVzaChtKTtcbiB9ZWxzZXtcbnljPj0xbnx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY291bnQgJHtxKHljKX1gO1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckludGVyc2VjdGlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0xbiYmeWM+PTFuKXtcbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyRGlzam9pbnRTdWJ0cmFjdD0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnhjPj0xbnx8RmFpbCBgcmlnaHQgZWxlbWVudCAke219IHdhcyBub3QgaW4gbGVmdGA7XG5pZih5Yz09PTBuKXtcbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG5jb25zdCBtZXJnZWlmeT0oaXRlck9wKT0+KHhlbGVtZW50cyx5ZWxlbWVudHMpPT5cbml0ZXJPcChtZXJnZSh4ZWxlbWVudHMseWVsZW1lbnRzKSk7XG5cbmNvbnN0ICAgICAgICBlbGVtZW50c0lzU3VwZXJzZXQ9bWVyZ2VpZnkoaXRlcklzU3VwZXJzZXQpOyRozY9fb25jZS5lbGVtZW50c0lzU3VwZXJzZXQoZWxlbWVudHNJc1N1cGVyc2V0KTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0lzRGlzam9pbnQ9bWVyZ2VpZnkoaXRlcklzRGlzam9pbnQpOyRozY9fb25jZS5lbGVtZW50c0lzRGlzam9pbnQoZWxlbWVudHNJc0Rpc2pvaW50KTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0NvbXBhcmU9bWVyZ2VpZnkoaXRlckNvbXBhcmUpOyRozY9fb25jZS5lbGVtZW50c0NvbXBhcmUoZWxlbWVudHNDb21wYXJlKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c1VuaW9uPW1lcmdlaWZ5KGl0ZXJVbmlvbik7JGjNj19vbmNlLmVsZW1lbnRzVW5pb24oZWxlbWVudHNVbmlvbik7XG5jb25zdCAgICAgICAgZWxlbWVudHNEaXNqb2ludFVuaW9uPW1lcmdlaWZ5KGl0ZXJEaXNqb2ludFVuaW9uKTskaM2PX29uY2UuZWxlbWVudHNEaXNqb2ludFVuaW9uKGVsZW1lbnRzRGlzam9pbnRVbmlvbik7XG5jb25zdCAgICAgICAgZWxlbWVudHNJbnRlcnNlY3Rpb249bWVyZ2VpZnkoaXRlckludGVyc2VjdGlvbik7JGjNj19vbmNlLmVsZW1lbnRzSW50ZXJzZWN0aW9uKGVsZW1lbnRzSW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50U3VidHJhY3Q9bWVyZ2VpZnkoaXRlckRpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5lbGVtZW50c0Rpc2pvaW50U3VidHJhY3QoZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0KTtcblxuY29uc3QgcmF3U2V0aWZ5PShlbGVtZW50c09wKT0+KHhzZXQseXNldCk9PlxuZWxlbWVudHNPcCh4c2V0LnBheWxvYWQseXNldC5wYXlsb2FkKTtcblxuY29uc3Qgc2V0aWZ5PShlbGVtZW50c09wKT0+KHhzZXQseXNldCk9PlxubWFrZVNldE9mRWxlbWVudHMoZWxlbWVudHNPcCh4c2V0LnBheWxvYWQseXNldC5wYXlsb2FkKSk7XG5cbmNvbnN0ICAgICAgICBzZXRJc1N1cGVyc2V0PXJhd1NldGlmeShlbGVtZW50c0lzU3VwZXJzZXQpOyRozY9fb25jZS5zZXRJc1N1cGVyc2V0KHNldElzU3VwZXJzZXQpO1xuY29uc3QgICAgICAgIHNldElzRGlzam9pbnQ9cmF3U2V0aWZ5KGVsZW1lbnRzSXNEaXNqb2ludCk7JGjNj19vbmNlLnNldElzRGlzam9pbnQoc2V0SXNEaXNqb2ludCk7XG5jb25zdCAgICAgICAgc2V0VW5pb249c2V0aWZ5KGVsZW1lbnRzVW5pb24pOyRozY9fb25jZS5zZXRVbmlvbihzZXRVbmlvbik7XG5jb25zdCAgICAgICAgc2V0RGlzam9pbnRVbmlvbj1zZXRpZnkoZWxlbWVudHNEaXNqb2ludFVuaW9uKTskaM2PX29uY2Uuc2V0RGlzam9pbnRVbmlvbihzZXREaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBzZXRJbnRlcnNlY3Rpb249c2V0aWZ5KGVsZW1lbnRzSW50ZXJzZWN0aW9uKTskaM2PX29uY2Uuc2V0SW50ZXJzZWN0aW9uKHNldEludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgc2V0RGlzam9pbnRTdWJ0cmFjdD1zZXRpZnkoZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0KTskaM2PX29uY2Uuc2V0RGlzam9pbnRTdWJ0cmFjdChzZXREaXNqb2ludFN1YnRyYWN0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImVsZW1lbnRzSXNTdXBlcnNldCI6WyJlbGVtZW50c0lzU3VwZXJzZXQiXSwiZWxlbWVudHNJc0Rpc2pvaW50IjpbImVsZW1lbnRzSXNEaXNqb2ludCJdLCJlbGVtZW50c0NvbXBhcmUiOlsiZWxlbWVudHNDb21wYXJlIl0sImVsZW1lbnRzVW5pb24iOlsiZWxlbWVudHNVbmlvbiJdLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iOlsiZWxlbWVudHNEaXNqb2ludFVuaW9uIl0sImVsZW1lbnRzSW50ZXJzZWN0aW9uIjpbImVsZW1lbnRzSW50ZXJzZWN0aW9uIl0sImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCI6WyJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QiXSwic2V0SXNTdXBlcnNldCI6WyJzZXRJc1N1cGVyc2V0Il0sInNldElzRGlzam9pbnQiOlsic2V0SXNEaXNqb2ludCJdLCJzZXRVbmlvbiI6WyJzZXRVbmlvbiJdLCJzZXREaXNqb2ludFVuaW9uIjpbInNldERpc2pvaW50VW5pb24iXSwic2V0SW50ZXJzZWN0aW9uIjpbInNldEludGVyc2VjdGlvbiJdLCJzZXREaXNqb2ludFN1YnRyYWN0IjpbInNldERpc2pvaW50U3VidHJhY3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApEMnKO0YAADtGAAANgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIi4vcGF0dGVybk1hdGNoZXJzLmpzIiwiLi4va2V5cy9jaGVja0tleS5qcyJdLCJleHBvcnRzIjpbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIiwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIiwiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBvYmplY3RNYXAsQXJnR3VhcmRMaXN0U2hhcGUsQXdhaXRBcmdHdWFyZFNoYXBlLEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlLEludGVyZmFjZUd1YXJkU2hhcGUsTSxNZXRob2RHdWFyZFBheWxvYWRTaGFwZSxNZXRob2RHdWFyZFNoYXBlLFJhd0d1YXJkU2hhcGUsU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsU3luY1ZhbHVlR3VhcmRTaGFwZSxhc3NlcnRBd2FpdEFyZ0d1YXJkLG1hdGNoZXMsbXVzdE1hdGNoLGdldENvcHlNYXBLZXlzLG1ha2VDb3B5TWFwOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCIuL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbW1wiQXJnR3VhcmRMaXN0U2hhcGVcIiwgWyRozY9fYSA9PiAoQXJnR3VhcmRMaXN0U2hhcGUgPSAkaM2PX2EpXV0sW1wiQXdhaXRBcmdHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKEF3YWl0QXJnR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZVwiLCBbJGjNj19hID0+IChJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSA9ICRozY9fYSldXSxbXCJJbnRlcmZhY2VHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKEludGVyZmFjZUd1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlXCIsIFskaM2PX2EgPT4gKE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlID0gJGjNj19hKV1dLFtcIk1ldGhvZEd1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoTWV0aG9kR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJSYXdHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKFJhd0d1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGVcIiwgWyRozY9fYSA9PiAoU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUgPSAkaM2PX2EpXV0sW1wiU3luY1ZhbHVlR3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChTeW5jVmFsdWVHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcImFzc2VydEF3YWl0QXJnR3VhcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QXdhaXRBcmdHdWFyZCA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4uL2tleXMvY2hlY2tLZXkuanNcIiwgW1tcImdldENvcHlNYXBLZXlzXCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBLZXlzID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5TWFwXCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5TWFwID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlPWhhcmRlbih7XG5rbGFzczonYXdhaXRBcmcnLFxuYXJnR3VhcmQ6TS5wYXR0ZXJuKCl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQ9KGF3YWl0QXJnR3VhcmQpPT57XG5pZihtYXRjaGVzKGF3YWl0QXJnR3VhcmQsTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlKSl7XG4vL1xuY29uc3R7a2xhc3M6XywuLi5wYXlsb2FkfT1hd2FpdEFyZ0d1YXJkO1xuLy9cbnJldHVybiBwYXlsb2FkO1xuIH1cbmFzc2VydEF3YWl0QXJnR3VhcmQoYXdhaXRBcmdHdWFyZCk7XG5yZXR1cm4gYXdhaXRBcmdHdWFyZC5wYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKTtcbmhhcmRlbihnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeVN5bmNNZXRob2RHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonbWV0aG9kR3VhcmQnLFxuY2FsbEtpbmQ6J3N5bmMnLFxuYXJnR3VhcmRzOlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0sXG5cbntcbm9wdGlvbmFsQXJnR3VhcmRzOlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFxucmVzdEFyZ0d1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFyZ0d1YXJkU2hhcGU9TS5vcihcblJhd0d1YXJkU2hhcGUsXG5Bd2FpdEFyZ0d1YXJkU2hhcGUsXG5MZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUsXG5NLnBhdHRlcm4oKSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFyZ0d1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihMZWdhY3lBcmdHdWFyZFNoYXBlKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXN5bmNNZXRob2RHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonbWV0aG9kR3VhcmQnLFxuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpMZWdhY3lBcmdHdWFyZExpc3RTaGFwZSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9LFxuXG57XG5vcHRpb25hbEFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbnJlc3RBcmdHdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lNZXRob2RHdWFyZFNoYXBlPU0ub3IoXG5MZWdhY3lTeW5jTWV0aG9kR3VhcmRTaGFwZSxcbkxlZ2FjeUFzeW5jTWV0aG9kR3VhcmRTaGFwZSk7XG5cblxuY29uc3QgYWRhcHRMZWdhY3lBcmdHdWFyZD0oYXJnR3VhcmQpPT5cbm1hdGNoZXMoYXJnR3VhcmQsTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlKT9cbk0uYXdhaXQoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoYXJnR3VhcmQpLmFyZ0d1YXJkKTpcbmFyZ0d1YXJkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE1ldGhvZEd1YXJkUGF5bG9hZD0obWV0aG9kR3VhcmQpPT57XG5pZihtYXRjaGVzKG1ldGhvZEd1YXJkLE1ldGhvZEd1YXJkU2hhcGUpKXtcbnJldHVybiBtZXRob2RHdWFyZC5wYXlsb2FkO1xuIH1cbm11c3RNYXRjaChtZXRob2RHdWFyZCxMZWdhY3lNZXRob2RHdWFyZFNoYXBlLCdsZWdhY3lNZXRob2RHdWFyZCcpO1xuY29uc3R7XG4vL1xua2xhc3M6Xyxcbi8vXG5jYWxsS2luZCxcbi8vXG5yZXR1cm5HdWFyZCxcbi8vXG5yZXN0QXJnR3VhcmR9PVxubWV0aG9kR3VhcmQ7XG5sZXR7XG4vL1xuYXJnR3VhcmRzLFxuLy9cbm9wdGlvbmFsQXJnR3VhcmRzfT1cbm1ldGhvZEd1YXJkO1xuaWYoY2FsbEtpbmQ9PT0nYXN5bmMnKXtcbmFyZ0d1YXJkcz1hcmdHdWFyZHMubWFwKGFkYXB0TGVnYWN5QXJnR3VhcmQpO1xub3B0aW9uYWxBcmdHdWFyZHM9XG5vcHRpb25hbEFyZ0d1YXJkcyYmb3B0aW9uYWxBcmdHdWFyZHMubWFwKGFkYXB0TGVnYWN5QXJnR3VhcmQpO1xuIH1cbmNvbnN0IHBheWxvYWQ9aGFyZGVuKHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yZXN0QXJnR3VhcmQsXG5yZXR1cm5HdWFyZH0pO1xuXG4vL1xubXVzdE1hdGNoKHBheWxvYWQsTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsJ2ludGVybmFsTWV0aG9kR3VhcmRBZGFwdG9yJyk7XG5yZXR1cm4gcGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRNZXRob2RHdWFyZFBheWxvYWQoZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKTtcbmhhcmRlbihnZXRNZXRob2RHdWFyZFBheWxvYWQpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lJbnRlcmZhY2VHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonSW50ZXJmYWNlJyxcbmludGVyZmFjZU5hbWU6TS5zdHJpbmcoKSxcbm1ldGhvZEd1YXJkczpNLnJlY29yZE9mKFxuTS5zdHJpbmcoKSxcbk0ub3IoTWV0aG9kR3VhcmRTaGFwZSxMZWdhY3lNZXRob2RHdWFyZFNoYXBlKSl9LFxuXG5cbntcbmRlZmF1bHRHdWFyZHM6TS5vcihNLnVuZGVmaW5lZCgpLCdwYXNzYWJsZScsJ3JhdycpLFxuc2xvcHB5Ok0uYm9vbGVhbigpLFxuLy9cbi8vXG4vL1xuc3ltYm9sTWV0aG9kR3VhcmRzOk0ubWFwT2YoTS5zeW1ib2woKSxNZXRob2RHdWFyZFNoYXBlKX0pO1xuXG5cblxuY29uc3QgYWRhcHRNZXRob2RHdWFyZD0obWV0aG9kR3VhcmQpPT57XG5pZihtYXRjaGVzKG1ldGhvZEd1YXJkLExlZ2FjeU1ldGhvZEd1YXJkU2hhcGUpKXtcbmNvbnN0e1xuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZD1NLmFueSgpLFxucmV0dXJuR3VhcmR9PVxuZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKG1ldGhvZEd1YXJkKTtcbmNvbnN0IG1DYWxsPWNhbGxLaW5kPT09J3N5bmMnP00uY2FsbDpNLmNhbGxXaGVuO1xucmV0dXJuIG1DYWxsKC4uLmFyZ0d1YXJkcykuXG5vcHRpb25hbCguLi5vcHRpb25hbEFyZ0d1YXJkcykuXG5yZXN0KHJlc3RBcmdHdWFyZCkuXG5yZXR1cm5zKHJldHVybkd1YXJkKTtcbiB9XG5yZXR1cm4gbWV0aG9kR3VhcmQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEludGVyZmFjZUd1YXJkUGF5bG9hZD0oaW50ZXJmYWNlR3VhcmQpPT57XG5pZihtYXRjaGVzKGludGVyZmFjZUd1YXJkLEludGVyZmFjZUd1YXJkU2hhcGUpKXtcbnJldHVybiBpbnRlcmZhY2VHdWFyZC5wYXlsb2FkO1xuIH1cbm11c3RNYXRjaChpbnRlcmZhY2VHdWFyZCxMZWdhY3lJbnRlcmZhY2VHdWFyZFNoYXBlLCdsZWdhY3lJbnRlcmZhY2VHdWFyZCcpO1xuLy9cbi8vXG5sZXR7a2xhc3M6XyxpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcywuLi5yZXN0fT1pbnRlcmZhY2VHdWFyZDtcbm1ldGhvZEd1YXJkcz1vYmplY3RNYXAobWV0aG9kR3VhcmRzLGFkYXB0TWV0aG9kR3VhcmQpO1xuY29uc3QgcGF5bG9hZD1oYXJkZW4oe1xuaW50ZXJmYWNlTmFtZSxcbm1ldGhvZEd1YXJkcyxcbi4uLnJlc3R9KTtcblxubXVzdE1hdGNoKFxucGF5bG9hZCxcbkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlLFxuJ2ludGVybmFsSW50ZXJmYWNlR3VhcmRBZGFwdG9yJyk7XG5cbnJldHVybiBwYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCk7XG5cbmNvbnN0IGVtcHR5Q29weU1hcD1tYWtlQ29weU1hcChbXSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cz0oaW50ZXJmYWNlR3VhcmQpPT57XG5jb25zdHttZXRob2RHdWFyZHMsc3ltYm9sTWV0aG9kR3VhcmRzPWVtcHR5Q29weU1hcH09XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoaW50ZXJmYWNlR3VhcmQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKFtcbi4uLlJlZmxlY3Qub3duS2V5cyhtZXRob2RHdWFyZHMpLFxuLi4uZ2V0Q29weU1hcEtleXMoc3ltYm9sTWV0aG9kR3VhcmRzKV0pO1xuXG4gfTskaM2PX29uY2UuZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyhnZXRJbnRlcmZhY2VNZXRob2RLZXlzKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VNZXRob2RLZXlzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIjpbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sImdldE1ldGhvZEd1YXJkUGF5bG9hZCI6WyJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIjpbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIjpbImdldEludGVyZmFjZU1ldGhvZEtleXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAHTgMlMitAADIrQAANQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyIsIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIiwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyIsIkBlbmRvL2Vycm9ycyIsIi4uL2tleXMvY29tcGFyZUtleXMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIiwiLi4va2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIiwiQXdhaXRBcmdHdWFyZFNoYXBlIiwiSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUiLCJJbnRlcmZhY2VHdWFyZFNoYXBlIiwiTSIsIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIiwiTWV0aG9kR3VhcmRTaGFwZSIsIlJhd0d1YXJkU2hhcGUiLCJTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSIsIlN5bmNWYWx1ZUd1YXJkU2hhcGUiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIiwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCIsImFzc2VydFBhdHRlcm4iLCJhc3NlcnRSYXdHdWFyZCIsImNoZWNrTWF0Y2hlcyIsImRlZmF1bHRMaW1pdHMiLCJnZXRSYW5rQ292ZXIiLCJpc0F3YWl0QXJnR3VhcmQiLCJpc1BhdHRlcm4iLCJpc1Jhd0d1YXJkIiwia2luZE9mIiwibWF0Y2hlcyIsIm11c3RNYXRjaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLEZhcixnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixoYXNPd25Qcm9wZXJ0eU9mLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxjb21wYXJlUmFuayxnZXRQYXNzU3R5bGVDb3ZlcixpbnRlcnNlY3RSYW5rQ292ZXJzLHVuaW9uUmFua0NvdmVycyxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXMsaWRlbnRDaGVja2VyLGFwcGx5TGFiZWxpbmdFcnJvcixmcm9tVW5pcXVlRW50cmllcyxsaXN0RGlmZmVyZW5jZSxxLGIsWCxGYWlsLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLGtleUVRLGtleUdULGtleUdURSxrZXlMVCxrZXlMVEUsYXNzZXJ0S2V5LGNoZWNrS2V5LGlzS2V5LGNoZWNrU2NhbGFyS2V5LGNoZWNrQ29weVNldCxjaGVja0NvcHlNYXAsY29weU1hcEtleVNldCxjaGVja0NvcHlCYWcsZ2V0Q29weU1hcEVudHJ5QXJyYXksbWFrZUNvcHlNYXAsZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJjb21wYXJlUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlUmFuayA9ICRozY9fYSldXSxbXCJnZXRQYXNzU3R5bGVDb3ZlclwiLCBbJGjNj19hID0+IChnZXRQYXNzU3R5bGVDb3ZlciA9ICRozY9fYSldXSxbXCJpbnRlcnNlY3RSYW5rQ292ZXJzXCIsIFskaM2PX2EgPT4gKGludGVyc2VjdFJhbmtDb3ZlcnMgPSAkaM2PX2EpXV0sW1widW5pb25SYW5rQ292ZXJzXCIsIFskaM2PX2EgPT4gKHVuaW9uUmFua0NvdmVycyA9ICRozY9fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjNj19hID0+IChyZWNvcmROYW1lcyA9ICRozY9fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanNcIiwgW1tcImlkZW50Q2hlY2tlclwiLCBbJGjNj19hID0+IChpZGVudENoZWNrZXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanNcIiwgW1tcImFwcGx5TGFiZWxpbmdFcnJvclwiLCBbJGjNj19hID0+IChhcHBseUxhYmVsaW5nRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qc1wiLCBbW1wiZnJvbVVuaXF1ZUVudHJpZXNcIiwgWyRozY9fYSA9PiAoZnJvbVVuaXF1ZUVudHJpZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzXCIsIFtbXCJsaXN0RGlmZmVyZW5jZVwiLCBbJGjNj19hID0+IChsaXN0RGlmZmVyZW5jZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcImJcIiwgWyRozY9fYSA9PiAoYiA9ICRozY9fYSldXSxbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wia2V5R1RcIiwgWyRozY9fYSA9PiAoa2V5R1QgPSAkaM2PX2EpXV0sW1wia2V5R1RFXCIsIFskaM2PX2EgPT4gKGtleUdURSA9ICRozY9fYSldXSxbXCJrZXlMVFwiLCBbJGjNj19hID0+IChrZXlMVCA9ICRozY9fYSldXSxbXCJrZXlMVEVcIiwgWyRozY9fYSA9PiAoa2V5TFRFID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jaGVja0tleS5qc1wiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJjaGVja0tleVwiLCBbJGjNj19hID0+IChjaGVja0tleSA9ICRozY9fYSldXSxbXCJpc0tleVwiLCBbJGjNj19hID0+IChpc0tleSA9ICRozY9fYSldXSxbXCJjaGVja1NjYWxhcktleVwiLCBbJGjNj19hID0+IChjaGVja1NjYWxhcktleSA9ICRozY9fYSldXSxbXCJjaGVja0NvcHlTZXRcIiwgWyRozY9fYSA9PiAoY2hlY2tDb3B5U2V0ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weU1hcFwiLCBbJGjNj19hID0+IChjaGVja0NvcHlNYXAgPSAkaM2PX2EpXV0sW1wiY29weU1hcEtleVNldFwiLCBbJGjNj19hID0+IChjb3B5TWFwS2V5U2V0ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weUJhZ1wiLCBbJGjNj19hID0+IChjaGVja0NvcHlCYWcgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJ5QXJyYXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzXCIsIFtbXCJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllc1wiLCBbJGjNj19hID0+IChnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyx2YWx1ZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBhdHRlcm5NZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IE1NO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmF1bHRMaW1pdHM9aGFyZGVuKHtcbmRlY2ltYWxEaWdpdHNMaW1pdDoxMDAsXG5zdHJpbmdMZW5ndGhMaW1pdDoxMDBfMDAwLFxuc3ltYm9sTmFtZUxlbmd0aExpbWl0OjEwMCxcbm51bVByb3BlcnRpZXNMaW1pdDo4MCxcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0OjEwMCxcbmFycmF5TGVuZ3RoTGltaXQ6MTBfMDAwLFxubnVtU2V0RWxlbWVudHNMaW1pdDoxMF8wMDAsXG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bU1hcEVudHJpZXNMaW1pdDo1MDAwfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0TGltaXRzKGRlZmF1bHRMaW1pdHMpO1xuY29uc3QgbGltaXQ9KGxpbWl0cz17fSk9PlxuLyogICAgICAgICAgICAgICAgICAgICovaGFyZGVuKHtfX3Byb3RvX186ZGVmYXVsdExpbWl0cywuLi5saW1pdHN9KTtcblxuY29uc3QgY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQ9KFxucGF5bG9hZCxcbm1haW5QYXlsb2FkU2hhcGUsXG5jaGVjayxcbmxhYmVsKT0+XG57XG5hc3NlcnQoQXJyYXkuaXNBcnJheShtYWluUGF5bG9hZFNoYXBlKSk7XG5pZighQXJyYXkuaXNBcnJheShwYXlsb2FkKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtxKGxhYmVsKX0gcGF5bG9hZCBtdXN0IGJlIGFuIGFycmF5OiAke3BheWxvYWR9YCk7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuY29uc3QgbWFpbkxlbmd0aD1tYWluUGF5bG9hZFNoYXBlLmxlbmd0aDtcbmlmKCEocGF5bG9hZC5sZW5ndGg9PT1tYWluTGVuZ3RofHxwYXlsb2FkLmxlbmd0aD09PW1haW5MZW5ndGgrMSkpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7cShsYWJlbCl9IHBheWxvYWQgdW5leHBlY3RlZCBzaXplOiAke3BheWxvYWR9YCk7XG4gfVxuY29uc3QgbGltaXRzPXBheWxvYWRbbWFpbkxlbmd0aF07XG5wYXlsb2FkPWhhcmRlbihwYXlsb2FkLnNsaWNlKDAsbWFpbkxlbmd0aCkpO1xuLy9cbmlmKCFjaGVja01hdGNoZXMocGF5bG9hZCxtYWluUGF5bG9hZFNoYXBlLGNoZWNrLGxhYmVsKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuaWYobGltaXRzPT09dW5kZWZpbmVkKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybihcbihwYXNzU3R5bGVPZihsaW1pdHMpPT09J2NvcHlSZWNvcmQnfHxcbmNoZWNrKGZhbHNlLFggYExpbWl0cyBtdXN0IGJlIGEgcmVjb3JkOiAke3EobGltaXRzKX1gKSkmJlxuZW50cmllcyhsaW1pdHMpLmV2ZXJ5KFxuKFtrZXksdmFsdWVdKT0+XG5wYXNzU3R5bGVPZih2YWx1ZSk9PT0nbnVtYmVyJ3x8XG5jaGVjayhmYWxzZSxYIGBWYWx1ZSBvZiBsaW1pdCAke3Eoa2V5KX0gYnV0IGJlIGEgbnVtYmVyOiAke3EodmFsdWUpfWApKSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0PShzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spPT57XG5pZihcbk1hdGguZmxvb3IoTWF0aC5sb2cxMChNYXRoLmFicyhOdW1iZXIoc3BlY2ltZW4pKSkpKzE8PVxuZGVjaW1hbERpZ2l0c0xpbWl0KVxue1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBiaWdpbnQgJHtzcGVjaW1lbn0gbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtkZWNpbWFsRGlnaXRzTGltaXR9IGRpZ2l0c2ApO1xuXG4gfTtcblxuLypcblxuICovXG5jb25zdCBtYWtlUGF0dGVybktpdD0oKT0+e1xuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVNYXRjaEhlbHBlcj0odGFnKT0+XG4vL1xuSGVscGVyc0J5TWF0Y2hUYWdbdGFnXTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVBheWxvYWRTaGFwZT0odGFnKT0+XG4vL1xuR3VhcmRQYXlsb2FkU2hhcGVzW3RhZ107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2luZ2xldG9uS2luZHM9bmV3IE1hcChbXG5bJ251bGwnLG51bGxdLFxuWyd1bmRlZmluZWQnLHVuZGVmaW5lZF1dKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHRhZ01lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnZ2VkPSh0YWdnZWQsdGFnLGNoZWNrKT0+e1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcih0YWcpO1xuaWYobWF0Y2hIZWxwZXIpe1xuLy9cbi8vXG5yZXR1cm4gbWF0Y2hIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQodGFnZ2VkLnBheWxvYWQsY2hlY2spO1xuIH1lbHNle1xuY29uc3QgcGF5bG9hZFNoYXBlPW1heWJlUGF5bG9hZFNoYXBlKHRhZyk7XG5pZihwYXlsb2FkU2hhcGUhPT11bmRlZmluZWQpe1xuLy9cbnJldHVybiBjaGVja01hdGNoZXModGFnZ2VkLnBheWxvYWQscGF5bG9hZFNoYXBlLGNoZWNrLHRhZyk7XG4gfVxuIH1cbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHRhZ2dlZCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHRhZ2dlZCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4gY2hlY2tDb3B5TWFwKHRhZ2dlZCxjaGVjayk7XG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYGNhbm5vdCBjaGVjayB1bnJlY29nbml6ZWQgdGFnICR7cSh0YWcpfTogJHt0YWdnZWR9YCk7XG5cbiB9fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGtpbmRPZj0oc3BlY2ltZW4sY2hlY2s9aWRlbnRDaGVja2VyKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHNwZWNpbWVuKTtcbmlmKHBhc3NTdHlsZSE9PSd0YWdnZWQnKXtcbnJldHVybiBwYXNzU3R5bGU7XG4gfVxuLy9cbi8vXG4vL1xuaWYodGFnTWVtby5oYXMoc3BlY2ltZW4pKXtcbnJldHVybiB0YWdNZW1vLmdldChzcGVjaW1lbik7XG4gfVxuY29uc3QgdGFnPWdldFRhZyhzcGVjaW1lbik7XG5pZihjaGVja1RhZ2dlZChzcGVjaW1lbix0YWcsY2hlY2spKXtcbnRhZ01lbW8uc2V0KHNwZWNpbWVuLHRhZyk7XG5yZXR1cm4gdGFnO1xuIH1cbmlmKGNoZWNrIT09aWRlbnRDaGVja2VyKXtcbmNoZWNrKGZhbHNlLFggYGNhbm5vdCBjaGVjayB1bnJlY29nbml6ZWQgdGFnICR7cSh0YWcpfWApO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfTtcbmhhcmRlbihraW5kT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tLaW5kPShzcGVjaW1lbixraW5kLGNoZWNrKT0+e1xuLy9cbmlmKHNpbmdsZXRvbktpbmRzLmhhcyhraW5kKSl7XG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHNpbmdsZXRvbktpbmRzLmdldChraW5kKSxjaGVjayk7XG4gfVxuXG5jb25zdCByZWFsS2luZD1raW5kT2Yoc3BlY2ltZW4sY2hlY2spO1xuaWYoa2luZD09PXJlYWxLaW5kKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNoZWNrIT09aWRlbnRDaGVja2VyKXtcbi8vXG4vL1xuY2hlY2soZmFsc2UsWCBgJHtiKHJlYWxLaW5kKX0gJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgJHtiKGtpbmQpfWApO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGlzS2luZD0oc3BlY2ltZW4sa2luZCk9PmNoZWNrS2luZChzcGVjaW1lbixraW5kLGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja0FzS2V5UGF0dD0oc3BlY2ltZW4sa2V5QXNQYXR0ZXJuLGNoZWNrKT0+e1xuaWYoaXNLZXkoc3BlY2ltZW4pJiZrZXlFUShzcGVjaW1lbixrZXlBc1BhdHRlcm4pKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbi8vXG4vL1xuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlOiAke2tleUFzUGF0dGVybn1gKSk7XG5cbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNoZWNrUGF0dGVybj0ocGF0dCxjaGVjayk9PntcbmlmKGlzS2V5KHBhdHQpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihwYXR0ZXJuTWVtby5oYXMocGF0dCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja1BhdHRlcm5JbnRlcm5hbChwYXR0LGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5wYXR0ZXJuTWVtby5hZGQocGF0dCk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tQYXR0ZXJuSW50ZXJuYWw9KHBhdHQsY2hlY2spPT57XG4vL1xuLy9cbi8vXG5jb25zdCBjaGVja0l0PShjaGlsZCk9PmNoZWNrUGF0dGVybihjaGlsZCxjaGVjayk7XG5cbmNvbnN0IGtpbmQ9a2luZE9mKHBhdHQsY2hlY2spO1xuc3dpdGNoKGtpbmQpe1xuY2FzZSB1bmRlZmluZWQ6e1xucmV0dXJuIGZhbHNlO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG5yZXR1cm4gdmFsdWVzKHBhdHQpLmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbnJldHVybiBwYXR0LmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weU1hcCc6e1xuLy9cbi8vXG4vL1xucmV0dXJuIGNoZWNrUGF0dGVybihwYXR0LnZhbHVlcyxjaGVjayk7XG4gfVxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShraW5kKX0gY2Fubm90IGJlIGEgcGF0dGVybmApO1xuIH1cbmRlZmF1bHQ6e1xuaWYobWF5YmVNYXRjaEhlbHBlcihraW5kKSE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEEgcGFzc2FibGUgb2Yga2luZCAke3Eoa2luZCl9IGlzIG5vdCBhIHBhdHRlcm46ICR7cGF0dH1gKTtcblxuIH19XG5cbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBpc1BhdHRlcm49KHBhdHQpPT5jaGVja1BhdHRlcm4ocGF0dCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0UGF0dGVybj0ocGF0dCk9PntcbmNoZWNrUGF0dGVybihwYXR0LGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8vXG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrTWF0Y2hlcz0oc3BlY2ltZW4scGF0dGVybixjaGVjayxsYWJlbD11bmRlZmluZWQpPT5cbi8vXG5hcHBseUxhYmVsaW5nRXJyb3IoY2hlY2tNYXRjaGVzSW50ZXJuYWwsW3NwZWNpbWVuLHBhdHRlcm4sY2hlY2tdLGxhYmVsKTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrTWF0Y2hlc0ludGVybmFsPShzcGVjaW1lbixwYXR0LGNoZWNrKT0+e1xuLy9cbmNvbnN0IHBhdHRlcm5LaW5kPWtpbmRPZihwYXR0LGNoZWNrKTtcbmNvbnN0IHNwZWNpbWVuS2luZD1raW5kT2Yoc3BlY2ltZW4pOy8vXG5zd2l0Y2gocGF0dGVybktpbmQpe1xuY2FzZSB1bmRlZmluZWQ6e1xucmV0dXJuIEZhaWwgYHBhdHRlcm4gZXhwZWN0ZWQ6ICR7cGF0dH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIEZhaWwgYHByb21pc2VzIGNhbm5vdCBiZSBwYXR0ZXJuczogJHtwYXR0fWA7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIEZhaWwgYGVycm9ycyBjYW5ub3QgYmUgcGF0dGVybnM6ICR7cGF0dH1gO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOlxuY2FzZSdzeW1ib2wnOlxuY2FzZSdjb3B5U2V0JzpcbmNhc2UnY29weUJhZyc6XG5jYXNlJ3JlbW90YWJsZSc6e1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlBcnJheScpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5QXJyYXkgdG8gbWF0Y2ggYSBjb3B5QXJyYXkgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG5jb25zdHtsZW5ndGh9PXBhdHQ7XG5pZihzcGVjaW1lbi5sZW5ndGghPT1sZW5ndGgpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBBcnJheSAke3NwZWNpbWVufSAtIE11c3QgYmUgYXMgbG9uZyBhcyBjb3B5QXJyYXkgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG5yZXR1cm4gcGF0dC5ldmVyeSgocCxpKT0+Y2hlY2tNYXRjaGVzKHNwZWNpbWVuW2ldLHAsY2hlY2ssaSkpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlSZWNvcmQnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgY29weVJlY29yZCB0byBtYXRjaCBhIGNvcHlSZWNvcmQgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHNwZWNpbWVuTmFtZXM9cmVjb3JkTmFtZXMoc3BlY2ltZW4pO1xuY29uc3QgcGF0dE5hbWVzPXJlY29yZE5hbWVzKHBhdHQpO1xuY29uc3QgbWlzc2luZz1saXN0RGlmZmVyZW5jZShwYXR0TmFtZXMsc3BlY2ltZW5OYW1lcyk7XG5pZihtaXNzaW5nLmxlbmd0aD49MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBoYXZlIG1pc3NpbmcgcHJvcGVydGllcyAke3EobWlzc2luZyl9YCk7XG5cbiB9XG5jb25zdCB1bmV4cGVjdGVkPWxpc3REaWZmZXJlbmNlKHNwZWNpbWVuTmFtZXMscGF0dE5hbWVzKTtcbmlmKHVuZXhwZWN0ZWQubGVuZ3RoPj0xKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IG5vdCBoYXZlIHVuZXhwZWN0ZWQgcHJvcGVydGllczogJHtxKFxudW5leHBlY3RlZClcbiB9YCk7XG5cbiB9XG5jb25zdCBzcGVjaW1lblZhbHVlcz1yZWNvcmRWYWx1ZXMoc3BlY2ltZW4sc3BlY2ltZW5OYW1lcyk7XG5jb25zdCBwYXR0VmFsdWVzPXJlY29yZFZhbHVlcyhwYXR0LHBhdHROYW1lcyk7XG5yZXR1cm4gcGF0dE5hbWVzLmV2ZXJ5KChsYWJlbCxpKT0+XG5jaGVja01hdGNoZXMoc3BlY2ltZW5WYWx1ZXNbaV0scGF0dFZhbHVlc1tpXSxjaGVjayxsYWJlbCkpO1xuXG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weU1hcCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5TWFwIHRvIG1hdGNoIGEgY29weU1hcCBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbi8vXG5jb25zdCBwYXR0S2V5U2V0PWNvcHlNYXBLZXlTZXQocGF0dCk7XG5jb25zdCBzcGVjaW1lbktleVNldD1jb3B5TWFwS2V5U2V0KHNwZWNpbWVuKTtcbmlmKCFjaGVja01hdGNoZXMoc3BlY2ltZW5LZXlTZXQscGF0dEtleVNldCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhdHRWYWx1ZXM9W107XG5jb25zdCBzcGVjaW1lblZhbHVlcz1bXTtcbmNvbnN0IGVudHJ5UGFpcnM9Z2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoXG5wYXR0LFxuc3BlY2ltZW4sXG5nZXRDb3B5TWFwRW50cnlBcnJheSxcbnVuZGVmaW5lZCk7XG5cbmZvcihjb25zdFtfa2V5LHBhdHRWYWx1ZSxzcGVjaW1lblZhbHVlXW9mIGVudHJ5UGFpcnMpe1xucGF0dFZhbHVlcy5wdXNoKHBhdHRWYWx1ZSk7XG5zcGVjaW1lblZhbHVlcy5wdXNoKHNwZWNpbWVuVmFsdWUpO1xuIH1cbnJldHVybiBjaGVja01hdGNoZXMoaGFyZGVuKHNwZWNpbWVuVmFsdWVzKSxoYXJkZW4ocGF0dFZhbHVlcyksY2hlY2spO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcihwYXR0ZXJuS2luZCk7XG5pZihtYXRjaEhlbHBlcil7XG5yZXR1cm4gbWF0Y2hIZWxwZXIuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQucGF5bG9hZCxjaGVjayk7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IHNob3VsZCBoYXZlIHJlY29nbml6ZWQgJHtxKHBhdHRlcm5LaW5kKX0gYDtcbiB9fVxuXG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYXRjaGVzPShzcGVjaW1lbixwYXR0KT0+XG5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG11c3RNYXRjaD0oc3BlY2ltZW4scGF0dCxsYWJlbD11bmRlZmluZWQpPT57XG5sZXQgaW5uZXJFcnJvcjtcbnRyeXtcbmlmKGNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGlkZW50Q2hlY2tlcix1bmRlZmluZWQpKXtcbnJldHVybjtcbiB9XG4gfWNhdGNoKGVyKXtcbmlubmVyRXJyb3I9ZXI7XG4gfVxuLy9cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGFzc2VydENoZWNrZXIsbGFiZWwpO1xuY29uc3Qgb3V0ZXJFcnJvcj1tYWtlRXJyb3IoXG5YIGBpbnRlcm5hbDogJHtsYWJlbH06IGluY29uc2lzdGVudCBwYXR0ZXJuIG1hdGNoOiAke3EocGF0dCl9YCk7XG5cbmlmKGlubmVyRXJyb3IhPT11bmRlZmluZWQpe1xuYW5ub3RhdGVFcnJvcihvdXRlckVycm9yLFggYGNhdXNlZCBieSAke2lubmVyRXJyb3J9YCk7XG4gfVxudGhyb3cgb3V0ZXJFcnJvcjtcbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldFJhbmtDb3Zlcj0ocGF0dCxlbmNvZGVQYXNzYWJsZSk9PntcbmlmKGlzS2V5KHBhdHQpKXtcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlUGFzc2FibGUocGF0dCk7XG5pZihlbmNvZGVkIT09dW5kZWZpbmVkKXtcbnJldHVybltlbmNvZGVkLCBgJHtlbmNvZGVkfX5gXTtcbiB9XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhdHQpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGFnPWdldFRhZyhwYXR0KTtcbmNvbnN0IG1hdGNoSGVscGVyPW1heWJlTWF0Y2hIZWxwZXIodGFnKTtcbmlmKG1hdGNoSGVscGVyKXtcbi8vXG4vL1xucmV0dXJuIG1hdGNoSGVscGVyLmdldFJhbmtDb3ZlcihwYXR0LnBheWxvYWQsZW5jb2RlUGFzc2FibGUpO1xuIH1cbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7Ly9cbiB9fVxuXG5icmVhazsvL1xuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7Ly9cbiB9fVxuXG5yZXR1cm4gZ2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuPShhcnJheSxwYXR0LGNoZWNrLGxhYmVsUHJlZml4PScnKT0+e1xuaWYoaXNLaW5kKHBhdHQsJ21hdGNoOmFueScpKXtcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gYXJyYXkuZXZlcnkoKGVsLGkpPT5cbmNoZWNrTWF0Y2hlcyhlbCxwYXR0LGNoZWNrLCBgJHtsYWJlbFByZWZpeH1bJHtpfV1gKSk7XG5cbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBbnlIZWxwZXI9RmFyKCdtYXRjaDphbnkgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KF9zcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsX2NoZWNrKT0+dHJ1ZSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KG1hdGNoZXJQYXlsb2FkLGNoZWNrKT0+XG5tYXRjaGVyUGF5bG9hZD09PXVuZGVmaW5lZHx8XG5jaGVjayhmYWxzZSxYIGBtYXRjaDphbnkgcGF5bG9hZDogJHttYXRjaGVyUGF5bG9hZH0gLSBNdXN0IGJlIHVuZGVmaW5lZGApLFxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+WycnLCd7J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBbmRIZWxwZXI9RmFyKCdtYXRjaDphbmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHRzLGNoZWNrKT0+e1xucmV0dXJuIHBhdHRzLmV2ZXJ5KChwYXR0KT0+Y2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsY2hlY2spKTtcbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZFBhdHRzLGNoZWNrKT0+e1xuY29uc3QgY2hlY2tJdD0ocGF0dCk9PmNoZWNrUGF0dGVybihwYXR0LGNoZWNrKTtcbnJldHVybihcbihwYXNzU3R5bGVPZihhbGxlZ2VkUGF0dHMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgTmVlZHMgYXJyYXkgb2Ygc3ViLXBhdHRlcm5zOiAke3EoYWxsZWdlZFBhdHRzKX1gKSkmJlxuYWxsZWdlZFBhdHRzLmV2ZXJ5KGNoZWNrSXQpKTtcblxuIH0sXG5cbmdldFJhbmtDb3ZlcjoocGF0dHMsZW5jb2RlUGFzc2FibGUpPT5cbmludGVyc2VjdFJhbmtDb3ZlcnMoXG5jb21wYXJlUmFuayxcbnBhdHRzLm1hcCgocCk9PmdldFJhbmtDb3ZlcihwLGVuY29kZVBhc3NhYmxlKSkpfSk7XG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hPckhlbHBlcj1GYXIoJ21hdGNoOm9yIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0cyxjaGVjayk9PntcbmNvbnN0e2xlbmd0aH09cGF0dHM7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBubyBwYXR0ZXJuIGRpc2p1bmN0cyB0byBtYXRjaDogJHtxKHBhdHRzKX1gKTtcblxuIH1cbmlmKFxucGF0dHMubGVuZ3RoPT09MiYmXG4hbWF0Y2hlcyhzcGVjaW1lbixwYXR0c1swXSkmJlxuaXNLaW5kKHBhdHRzWzBdLCdtYXRjaDpraW5kJykmJlxucGF0dHNbMF0ucGF5bG9hZD09PSd1bmRlZmluZWQnKVxue1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHRzWzFdLGNoZWNrKTtcbiB9XG5pZihwYXR0cy5zb21lKChwYXR0KT0+bWF0Y2hlcyhzcGVjaW1lbixwYXR0KSkpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBtYXRjaCBvbmUgb2YgJHtxKHBhdHRzKX1gKTtcbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFuZEhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihwYXR0cyxlbmNvZGVQYXNzYWJsZSk9PlxudW5pb25SYW5rQ292ZXJzKFxuY29tcGFyZVJhbmssXG5wYXR0cy5tYXAoKHApPT5nZXRSYW5rQ292ZXIocCxlbmNvZGVQYXNzYWJsZSkpKX0pO1xuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoTm90SGVscGVyPUZhcignbWF0Y2g6bm90IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0LGNoZWNrKT0+e1xuaWYobWF0Y2hlcyhzcGVjaW1lbixwYXR0KSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBmYWlsIG5lZ2F0ZWQgcGF0dGVybjogJHtxKHBhdHQpfWApO1xuXG4gfWVsc2V7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tQYXR0ZXJuLFxuXG5nZXRSYW5rQ292ZXI6KF9wYXR0LF9lbmNvZGVQYXNzYWJsZSk9PlsnJywneyddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU2NhbGFySGVscGVyPUZhcignbWF0Y2g6c2NhbGFyIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrU2NhbGFyS2V5KHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoS2V5SGVscGVyPUZhcignbWF0Y2g6a2V5IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrS2V5KHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUGF0dGVybkhlbHBlcj1GYXIoJ21hdGNoOnBhdHRlcm4gaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tQYXR0ZXJuKHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoS2luZEhlbHBlcj1GYXIoJ21hdGNoOmtpbmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6Y2hlY2tLaW5kLFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZEtleUtpbmQsY2hlY2spPT5cbnR5cGVvZiBhbGxlZ2VkS2V5S2luZD09PSdzdHJpbmcnfHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBtYXRjaDpraW5kOiBwYXlsb2FkOiAke2FsbGVnZWRLZXlLaW5kfSAtIEEga2luZCBuYW1lIG11c3QgYmUgYSBzdHJpbmdgKSxcblxuXG5nZXRSYW5rQ292ZXI6KGtpbmQsX2VuY29kZVBhc3NhYmxlKT0+e1xubGV0IHN0eWxlO1xuc3dpdGNoKGtpbmQpe1xuY2FzZSdjb3B5U2V0JzpcbmNhc2UnY29weU1hcCc6e1xuc3R5bGU9J3RhZ2dlZCc7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnN0eWxlPWtpbmQ7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4gZ2V0UGFzc1N0eWxlQ292ZXIoc3R5bGUpO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hUYWdnZWRIZWxwZXI9RmFyKCdtYXRjaDp0YWdnZWQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFt0YWdQYXR0LHBheWxvYWRQYXR0XSxjaGVjayk9PntcbmlmKHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PSd0YWdnZWQnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRXhwZWN0ZWQgdGFnZ2VkIG9iamVjdCwgbm90ICR7cShcbnBhc3NTdHlsZU9mKHNwZWNpbWVuKSlcbiB9OiAke3NwZWNpbWVufWApO1xuXG4gfVxucmV0dXJuKFxuY2hlY2tNYXRjaGVzKGdldFRhZyhzcGVjaW1lbiksdGFnUGF0dCxjaGVjaywndGFnJykmJlxuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLnBheWxvYWQscGF5bG9hZFBhdHQsY2hlY2ssJ3BheWxvYWQnKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tNYXRjaGVzKFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6dGFnZ2VkIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9raW5kLF9lbmNvZGVQYXNzYWJsZSk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEJpZ2ludEhlbHBlcj1GYXIoJ21hdGNoOmJpZ2ludCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7ZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdiaWdpbnQnLGNoZWNrKSYmXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdChzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6YmlnaW50IHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcignYmlnaW50Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hOYXRIZWxwZXI9RmFyKCdtYXRjaDpuYXQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2RlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnYmlnaW50JyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbj49MG4sXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgbm9uLW5lZ2F0aXZlYCkmJlxuXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdChzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6bmF0IHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG4vL1xuZ2V0UGFzc1N0eWxlQ292ZXIoJ2JpZ2ludCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3RyaW5nSGVscGVyPUZhcignbWF0Y2g6c3RyaW5nIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtzdHJpbmdMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbi8vXG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ3N0cmluZycsY2hlY2spJiYoXG4vL1xuLyogICAgICAgICAgICAgICAgICovc3BlY2ltZW4ubGVuZ3RoPD1zdHJpbmdMZW5ndGhMaW1pdHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgc3RyaW5nICR7c3BlY2ltZW59IG11c3Qgbm90IGJlIGJpZ2dlciB0aGFuICR7c3RyaW5nTGVuZ3RoTGltaXR9YCkpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpzdHJpbmcgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdzdHJpbmcnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFN5bWJvbEhlbHBlcj1GYXIoJ21hdGNoOnN5bWJvbCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7c3ltYm9sTmFtZUxlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnc3ltYm9sJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHN5bWJvbE5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHNwZWNpbWVuKTtcblxuaWYodHlwZW9mIHN5bWJvbE5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUGFzc2FibGUgc3ltYm9sICR7c3BlY2ltZW59IG11c3QgaGF2ZSBhIHBhc3NhYmxlIG5hbWVgO1xuIH1cbnJldHVybiBjaGVjayhcbnN5bWJvbE5hbWUubGVuZ3RoPD1zeW1ib2xOYW1lTGVuZ3RoTGltaXQsXG5YIGBTeW1ib2wgbmFtZSAke3EoXG5zeW1ib2xOYW1lKVxuIH0gbXVzdCBub3QgYmUgYmlnZ2VyIHRoYW4gJHtzeW1ib2xOYW1lTGVuZ3RoTGltaXR9YCk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtdKSxcbmNoZWNrLFxuJ21hdGNoOnN5bWJvbCBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ3N5bWJvbCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUmVtb3RhYmxlSGVscGVyPUZhcignbWF0Y2g6cmVtb3RhYmxlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyZW1vdGFibGVEZXNjLGNoZWNrKT0+e1xuaWYoaXNLaW5kKHNwZWNpbWVuLCdyZW1vdGFibGUnKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjaGVjaz09PWlkZW50Q2hlY2tlcil7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7bGFiZWx9PXJlbW90YWJsZURlc2M7XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuY29uc3Qga2luZERldGFpbHM9XG5wYXNzU3R5bGUhPT0ndGFnZ2VkJz9cbi8vXG5iKHBhc3NTdHlsZSk6XG4vL1xuLy9cbnEoZ2V0VGFnKHNwZWNpbWVuKSk7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcbi8vXG4vL1xuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgcmVtb3RhYmxlICR7YihsYWJlbCl9LCBub3QgJHtraW5kRGV0YWlsc31gKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkUmVtb3RhYmxlRGVzYyxjaGVjayk9PlxuY2hlY2tNYXRjaGVzKFxuYWxsZWdlZFJlbW90YWJsZURlc2MsXG5oYXJkZW4oe2xhYmVsOk1NLnN0cmluZygpfSksXG5jaGVjayxcbidtYXRjaDpyZW1vdGFibGUgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX3JlbW90YWJsZURlc2MsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcigncmVtb3RhYmxlJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hMVEVIZWxwZXI9RmFyKCdtYXRjaDpsdGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5TFRFKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIDw9ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOihyaWdodE9wZXJhbmQsZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmlnaHRPcGVyYW5kKTtcbi8vXG4vL1xuLy9cbmxldFtsZWZ0Qm91bmQscmlnaHRCb3VuZF09Z2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbmNvbnN0IG5ld1JpZ2h0Qm91bmQ9IGAke2VuY29kZVBhc3NhYmxlKHJpZ2h0T3BlcmFuZCl9fmA7XG5pZihuZXdSaWdodEJvdW5kIT09dW5kZWZpbmVkKXtcbnJpZ2h0Qm91bmQ9bmV3UmlnaHRCb3VuZDtcbiB9XG5yZXR1cm5bbGVmdEJvdW5kLHJpZ2h0Qm91bmRdO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hMVEhlbHBlcj1GYXIoJ21hdGNoOmx0IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUxUKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIDwgJHtyaWdodE9wZXJhbmR9YCksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrS2V5LFxuXG5nZXRSYW5rQ292ZXI6bWF0Y2hMVEVIZWxwZXIuZ2V0UmFua0NvdmVyfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoR1RFSGVscGVyPUZhcignbWF0Y2g6Z3RlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUdURShzcGVjaW1lbixyaWdodE9wZXJhbmQpfHxcbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSA+PSAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjoocmlnaHRPcGVyYW5kLGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0T3BlcmFuZCk7XG4vL1xuLy9cbi8vXG5sZXRbbGVmdEJvdW5kLHJpZ2h0Qm91bmRdPWdldFBhc3NTdHlsZUNvdmVyKHBhc3NTdHlsZSk7XG5jb25zdCBuZXdMZWZ0Qm91bmQ9ZW5jb2RlUGFzc2FibGUocmlnaHRPcGVyYW5kKTtcbmlmKG5ld0xlZnRCb3VuZCE9PXVuZGVmaW5lZCl7XG5sZWZ0Qm91bmQ9bmV3TGVmdEJvdW5kO1xuIH1cbnJldHVybltsZWZ0Qm91bmQscmlnaHRCb3VuZF07XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEdUSGVscGVyPUZhcignbWF0Y2g6Z3QgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5R1Qoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPiAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjptYXRjaEdURUhlbHBlci5nZXRSYW5rQ292ZXJ9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hSZWNvcmRPZkhlbHBlcj1GYXIoJ21hdGNoOnJlY29yZE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bVByb3BlcnRpZXNMaW1pdCxwcm9wZXJ0eU5hbWVMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weVJlY29yZCcsY2hlY2spJiZcbmNoZWNrKFxub3duS2V5cyhzcGVjaW1lbikubGVuZ3RoPD1udW1Qcm9wZXJ0aWVzTGltaXQsXG5YIGBNdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke3EoXG5udW1Qcm9wZXJ0aWVzTGltaXQpXG4gfSBwcm9wZXJ0aWVzOiAke3NwZWNpbWVufWApJiZcblxuZW50cmllcyhzcGVjaW1lbikuZXZlcnkoXG4oW2tleSx2YWx1ZV0pPT5cbmFwcGx5TGFiZWxpbmdFcnJvcihcbmNoZWNrLFxuW1xua2V5Lmxlbmd0aDw9cHJvcGVydHlOYW1lTGVuZ3RoTGltaXQsXG5YIGBQcm9wZXJ0eSBuYW1lIG11c3Qgbm90IGJlIGxvbmdlciB0aGFuICR7cShcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0KVxuIH1gXSxcblxua2V5KSYmXG5cbmNoZWNrTWF0Y2hlcyhcbmhhcmRlbihba2V5LHZhbHVlXSksXG5oYXJkZW4oW2tleVBhdHQsdmFsdWVQYXR0XSksXG5jaGVjayxcbmtleSkpKTtcblxuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpyZWNvcmRPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfZW50cnlQYXR0KT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlSZWNvcmQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFycmF5T2ZIZWxwZXI9RmFyKCdtYXRjaDphcnJheU9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbc3ViUGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2FycmF5TGVuZ3RoTGltaXR9PWxpbWl0KGxpbWl0cyk7XG4vL1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QXJyYXknLGNoZWNrKSYmKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5sZW5ndGg8PWFycmF5TGVuZ3RoTGltaXR8fFxuY2hlY2soXG5mYWxzZSxcblggYEFycmF5IGxlbmd0aCAke3NwZWNpbWVuLmxlbmd0aH0gbXVzdCBiZSA8PSBsaW1pdCAke2FycmF5TGVuZ3RoTGltaXR9YCkpJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihzcGVjaW1lbixzdWJQYXR0LGNoZWNrKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOmFycmF5T2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlBcnJheScpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU2V0T2ZIZWxwZXI9RmFyKCdtYXRjaDpzZXRPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2tleVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtudW1TZXRFbGVtZW50c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5U2V0JyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQubGVuZ3RoPG51bVNldEVsZW1lbnRzTGltaXQsXG5YIGBTZXQgbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtxKG51bVNldEVsZW1lbnRzTGltaXQpfSBlbGVtZW50czogJHtcbnNwZWNpbWVuLnBheWxvYWQubGVuZ3RoXG4gfWApJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihzcGVjaW1lbi5wYXlsb2FkLGtleVBhdHQsY2hlY2ssJ3NldCBlbGVtZW50cycpKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6c2V0T2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQmFnT2ZIZWxwZXI9RmFyKCdtYXRjaDpiYWdPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltrZXlQYXR0LGNvdW50UGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxcbmNoZWNrKT0+XG57XG5jb25zdHtudW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0LGRlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weUJhZycsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmxlbmd0aDw9XG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0LFxuWCBgQmFnIG11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICR7cShcbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQpXG4gfSB1bmlxdWUgZWxlbWVudHM6ICR7c3BlY2ltZW59YCkmJlxuXG5zcGVjaW1lbi5wYXlsb2FkLmV2ZXJ5KFxuKFtrZXksY291bnRdLGkpPT5cbmNoZWNrTWF0Y2hlcyhrZXksa2V5UGF0dCxjaGVjaywgYGJhZyBrZXlzWyR7aX1dYCkmJlxuYXBwbHlMYWJlbGluZ0Vycm9yKFxuY2hlY2tEZWNpbWFsRGlnaXRzTGltaXQsXG5bY291bnQsZGVjaW1hbERpZ2l0c0xpbWl0LGNoZWNrXSxcbiBgYmFnIGNvdW50c1ske2l9XWApJiZcblxuY2hlY2tNYXRjaGVzKGNvdW50LGNvdW50UGF0dCxjaGVjaywgYGJhZyBjb3VudHNbJHtpfV1gKSkpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpiYWdPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcigndGFnZ2VkJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hNYXBPZkhlbHBlcj1GYXIoJ21hdGNoOm1hcE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bU1hcEVudHJpZXNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weU1hcCcsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmtleXMubGVuZ3RoPD1cbm51bU1hcEVudHJpZXNMaW1pdCxcblggYENvcHlNYXAgbXVzdCBoYXZlIG5vIG1vcmUgdGhhbiAke3EoXG5udW1NYXBFbnRyaWVzTGltaXQpXG4gfSBlbnRyaWVzOiAke3NwZWNpbWVufWApJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihcbnNwZWNpbWVuLnBheWxvYWQua2V5cyxcbmtleVBhdHQsXG5jaGVjayxcbidtYXAga2V5cycpJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihcbnNwZWNpbWVuLnBheWxvYWQudmFsdWVzLFxudmFsdWVQYXR0LFxuY2hlY2ssXG4nbWFwIHZhbHVlcycpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6bWFwT2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX2VudHJ5UGF0dCk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHNwbGl0QXJyYXlQYXJ0cz0oc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk9PntcbmNvbnN0IG51bVJlcXVpcmVkPXJlcXVpcmVkUGF0dC5sZW5ndGg7XG5jb25zdCBudW1PcHRpb25hbD1vcHRpb25hbFBhdHQubGVuZ3RoO1xuY29uc3QgcmVxdWlyZWRTcGVjaW1lbj1zcGVjaW1lbi5zbGljZSgwLG51bVJlcXVpcmVkKTtcbmNvbnN0IG9wdGlvbmFsU3BlY2ltZW49c3BlY2ltZW4uc2xpY2UoXG5udW1SZXF1aXJlZCxcbm51bVJlcXVpcmVkK251bU9wdGlvbmFsKTtcblxuY29uc3QgcmVzdFNwZWNpbWVuPXNwZWNpbWVuLnNsaWNlKG51bVJlcXVpcmVkK251bU9wdGlvbmFsKTtcbnJldHVybiBoYXJkZW4oe3JlcXVpcmVkU3BlY2ltZW4sb3B0aW9uYWxTcGVjaW1lbixyZXN0U3BlY2ltZW59KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYWRhcHRBcnJheVBhdHRlcm49KG9wdGlvbmFsUGF0dCxsZW5ndGgpPT5cbmhhcmRlbihvcHRpb25hbFBhdHQuc2xpY2UoMCxsZW5ndGgpLm1hcCgocGF0dCk9Pk1NLm9wdChwYXR0KSkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTcGxpdEFycmF5SGVscGVyPUZhcignbWF0Y2g6c3BsaXRBcnJheSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0PVtdLHJlc3RQYXR0PU1NLmFueSgpXSxcbmNoZWNrKT0+XG57XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QXJyYXknLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7cmVxdWlyZWRTcGVjaW1lbixvcHRpb25hbFNwZWNpbWVuLHJlc3RTcGVjaW1lbn09XG5zcGxpdEFycmF5UGFydHMoc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk7XG5jb25zdCBwYXJ0aWFsUGF0dD1hZGFwdEFycmF5UGF0dGVybihcbm9wdGlvbmFsUGF0dCxcbm9wdGlvbmFsU3BlY2ltZW4ubGVuZ3RoKTtcblxubGV0IGFyZ051bT0wO1xucmV0dXJuKFxuKHJlcXVpcmVkU3BlY2ltZW4ubGVuZ3RoPT09cmVxdWlyZWRQYXR0Lmxlbmd0aHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgRXhwZWN0ZWQgYXQgbGVhc3QgJHtxKFxucmVxdWlyZWRQYXR0Lmxlbmd0aClcbiB9IGFyZ3VtZW50czogJHtzcGVjaW1lbn1gKSkmJlxuXG5yZXF1aXJlZFBhdHQuZXZlcnkoKHAsaSk9PlxuLy9cbmNoZWNrTWF0Y2hlcyhyZXF1aXJlZFNwZWNpbWVuW2ldLHAsY2hlY2ssIGBhcmcgJHthcmdOdW0rK31gKSkmJlxuXG5wYXJ0aWFsUGF0dC5ldmVyeSgocCxpKT0+XG4vL1xuY2hlY2tNYXRjaGVzKG9wdGlvbmFsU3BlY2ltZW5baV0scCxjaGVjaywgYGFyZyAke2FyZ051bSsrfT9gKSkmJlxuXG5jaGVja01hdGNoZXMocmVzdFNwZWNpbWVuLHJlc3RQYXR0LGNoZWNrLCcuLi5yZXN0JykpO1xuXG4gfSxcblxuLypcblxuXG4gICAgICovXG5jaGVja0lzV2VsbEZvcm1lZDooc3BsaXRBcnJheSxjaGVjayk9PntcbmlmKFxucGFzc1N0eWxlT2Yoc3BsaXRBcnJheSk9PT0nY29weUFycmF5JyYmKFxuc3BsaXRBcnJheS5sZW5ndGg+PTF8fHNwbGl0QXJyYXkubGVuZ3RoPD0zKSlcbntcbmNvbnN0W3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9dW5kZWZpbmVkLHJlc3RQYXR0PXVuZGVmaW5lZF09XG5zcGxpdEFycmF5O1xuaWYoXG5pc1BhdHRlcm4ocmVxdWlyZWRQYXR0KSYmXG5wYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpPT09J2NvcHlBcnJheScmJihcbm9wdGlvbmFsUGF0dD09PXVuZGVmaW5lZHx8XG5pc1BhdHRlcm4ob3B0aW9uYWxQYXR0KSYmXG5wYXNzU3R5bGVPZihvcHRpb25hbFBhdHQpPT09J2NvcHlBcnJheScpJiYoXG5yZXN0UGF0dD09PXVuZGVmaW5lZHx8aXNQYXR0ZXJuKHJlc3RQYXR0KSkpXG57XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBNdXN0IGJlIGFuIGFycmF5IG9mIGEgcmVxdWlyZWRQYXR0IGFycmF5LCBhbiBvcHRpb25hbCBvcHRpb25hbFBhdHQgYXJyYXksIGFuZCBhbiBvcHRpb25hbCByZXN0UGF0dDogJHtxKFxuc3BsaXRBcnJheSlcbiB9YCk7XG5cbiB9LFxuXG5nZXRSYW5rQ292ZXI6KFtcbl9yZXF1aXJlZFBhdHQsXG5fb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxcbl9yZXN0UGF0dD11bmRlZmluZWRdKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcignY29weUFycmF5Jyl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBzcGxpdFJlY29yZFBhcnRzPShzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KT0+e1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXF1aXJlZEVudHJpZXM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3B0aW9uYWxFbnRyaWVzPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3RFbnRyaWVzPVtdO1xuZm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgZW50cmllcyhzcGVjaW1lbikpe1xuaWYoaGFzT3duUHJvcGVydHlPZihyZXF1aXJlZFBhdHQsbmFtZSkpe1xucmVxdWlyZWRFbnRyaWVzLnB1c2goW25hbWUsdmFsdWVdKTtcbiB9ZWxzZSBpZihoYXNPd25Qcm9wZXJ0eU9mKG9wdGlvbmFsUGF0dCxuYW1lKSl7XG5vcHRpb25hbEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1lbHNle1xucmVzdEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtcbnJlcXVpcmVkU3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMocmVxdWlyZWRFbnRyaWVzKSxcbm9wdGlvbmFsU3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMob3B0aW9uYWxFbnRyaWVzKSxcbnJlc3RTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhyZXN0RW50cmllcyl9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGFwdFJlY29yZFBhdHRlcm49KG9wdGlvbmFsUGF0dCxuYW1lcyk9PlxuZnJvbVVuaXF1ZUVudHJpZXMobmFtZXMubWFwKChuYW1lKT0+W25hbWUsTU0ub3B0KG9wdGlvbmFsUGF0dFtuYW1lXSldKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFNwbGl0UmVjb3JkSGVscGVyPUZhcignbWF0Y2g6c3BsaXRSZWNvcmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5bcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD17fSxyZXN0UGF0dD1NTS5hbnkoKV0sXG5jaGVjayk9Plxue1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnY29weVJlY29yZCcsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtyZXF1aXJlZFNwZWNpbWVuLG9wdGlvbmFsU3BlY2ltZW4scmVzdFNwZWNpbWVufT1cbnNwbGl0UmVjb3JkUGFydHMoc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk7XG5cbmNvbnN0IHBhcnRpYWxOYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMob3B0aW9uYWxTcGVjaW1lbik7XG5jb25zdCBwYXJ0aWFsUGF0dD1hZGFwdFJlY29yZFBhdHRlcm4ob3B0aW9uYWxQYXR0LHBhcnRpYWxOYW1lcyk7XG5yZXR1cm4oXG5jaGVja01hdGNoZXMocmVxdWlyZWRTcGVjaW1lbixyZXF1aXJlZFBhdHQsY2hlY2spJiZcbnBhcnRpYWxOYW1lcy5ldmVyeSgobmFtZSk9PlxuY2hlY2tNYXRjaGVzKFxub3B0aW9uYWxTcGVjaW1lbltuYW1lXSxcbnBhcnRpYWxQYXR0W25hbWVdLFxuY2hlY2ssXG4gYCR7bmFtZX0/YCkpJiZcblxuXG5jaGVja01hdGNoZXMocmVzdFNwZWNpbWVuLHJlc3RQYXR0LGNoZWNrLCcuLi5yZXN0JykpO1xuXG4gfSxcblxuLypcblxuXG4gICAgICovXG5jaGVja0lzV2VsbEZvcm1lZDooc3BsaXRBcnJheSxjaGVjayk9PntcbmlmKFxucGFzc1N0eWxlT2Yoc3BsaXRBcnJheSk9PT0nY29weUFycmF5JyYmKFxuc3BsaXRBcnJheS5sZW5ndGg+PTF8fHNwbGl0QXJyYXkubGVuZ3RoPD0zKSlcbntcbmNvbnN0W3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9dW5kZWZpbmVkLHJlc3RQYXR0PXVuZGVmaW5lZF09XG5zcGxpdEFycmF5O1xuaWYoXG5pc1BhdHRlcm4ocmVxdWlyZWRQYXR0KSYmXG5wYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpPT09J2NvcHlSZWNvcmQnJiYoXG5vcHRpb25hbFBhdHQ9PT11bmRlZmluZWR8fFxuaXNQYXR0ZXJuKG9wdGlvbmFsUGF0dCkmJlxucGFzc1N0eWxlT2Yob3B0aW9uYWxQYXR0KT09PSdjb3B5UmVjb3JkJykmJihcbnJlc3RQYXR0PT09dW5kZWZpbmVkfHxpc1BhdHRlcm4ocmVzdFBhdHQpKSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYE11c3QgYmUgYW4gYXJyYXkgb2YgYSByZXF1aXJlZFBhdHQgcmVjb3JkLCBhbiBvcHRpb25hbCBvcHRpb25hbFBhdHQgcmVjb3JkLCBhbmQgYW4gb3B0aW9uYWwgcmVzdFBhdHQ6ICR7cShcbnNwbGl0QXJyYXkpXG4gfWApO1xuXG4gfSxcblxuZ2V0UmFua0NvdmVyOihbXG5yZXF1aXJlZFBhdHQsXG5fb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxcbl9yZXN0UGF0dD11bmRlZmluZWRdKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgSGVscGVyc0J5TWF0Y2hUYWc9aGFyZGVuKHtcbidtYXRjaDphbnknOm1hdGNoQW55SGVscGVyLFxuJ21hdGNoOmFuZCc6bWF0Y2hBbmRIZWxwZXIsXG4nbWF0Y2g6b3InOm1hdGNoT3JIZWxwZXIsXG4nbWF0Y2g6bm90JzptYXRjaE5vdEhlbHBlcixcblxuJ21hdGNoOnNjYWxhcic6bWF0Y2hTY2FsYXJIZWxwZXIsXG4nbWF0Y2g6a2V5JzptYXRjaEtleUhlbHBlcixcbidtYXRjaDpwYXR0ZXJuJzptYXRjaFBhdHRlcm5IZWxwZXIsXG4nbWF0Y2g6a2luZCc6bWF0Y2hLaW5kSGVscGVyLFxuJ21hdGNoOnRhZ2dlZCc6bWF0Y2hUYWdnZWRIZWxwZXIsXG4nbWF0Y2g6YmlnaW50JzptYXRjaEJpZ2ludEhlbHBlcixcbidtYXRjaDpuYXQnOm1hdGNoTmF0SGVscGVyLFxuJ21hdGNoOnN0cmluZyc6bWF0Y2hTdHJpbmdIZWxwZXIsXG4nbWF0Y2g6c3ltYm9sJzptYXRjaFN5bWJvbEhlbHBlcixcbidtYXRjaDpyZW1vdGFibGUnOm1hdGNoUmVtb3RhYmxlSGVscGVyLFxuXG4nbWF0Y2g6bHQnOm1hdGNoTFRIZWxwZXIsXG4nbWF0Y2g6bHRlJzptYXRjaExURUhlbHBlcixcbidtYXRjaDpndGUnOm1hdGNoR1RFSGVscGVyLFxuJ21hdGNoOmd0JzptYXRjaEdUSGVscGVyLFxuXG4nbWF0Y2g6YXJyYXlPZic6bWF0Y2hBcnJheU9mSGVscGVyLFxuJ21hdGNoOnJlY29yZE9mJzptYXRjaFJlY29yZE9mSGVscGVyLFxuJ21hdGNoOnNldE9mJzptYXRjaFNldE9mSGVscGVyLFxuJ21hdGNoOmJhZ09mJzptYXRjaEJhZ09mSGVscGVyLFxuJ21hdGNoOm1hcE9mJzptYXRjaE1hcE9mSGVscGVyLFxuJ21hdGNoOnNwbGl0QXJyYXknOm1hdGNoU3BsaXRBcnJheUhlbHBlcixcbidtYXRjaDpzcGxpdFJlY29yZCc6bWF0Y2hTcGxpdFJlY29yZEhlbHBlcn0pO1xuXG5cbmNvbnN0IG1ha2VNYXRjaGVyPSh0YWcscGF5bG9hZCk9PntcbmNvbnN0IG1hdGNoZXI9bWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG5hc3NlcnRQYXR0ZXJuKG1hdGNoZXIpO1xucmV0dXJuIG1hdGNoZXI7XG4gfTtcblxuY29uc3QgbWFrZUtpbmRNYXRjaGVyPShraW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmtpbmQnLGtpbmQpO1xuXG5jb25zdCBBbnlTaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6YW55Jyx1bmRlZmluZWQpO1xuY29uc3QgU2NhbGFyU2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOnNjYWxhcicsdW5kZWZpbmVkKTtcbmNvbnN0IEtleVNoYXBlPW1ha2VNYXRjaGVyKCdtYXRjaDprZXknLHVuZGVmaW5lZCk7XG5jb25zdCBQYXR0ZXJuU2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOnBhdHRlcm4nLHVuZGVmaW5lZCk7XG5jb25zdCBCb29sZWFuU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdib29sZWFuJyk7XG5jb25zdCBOdW1iZXJTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ251bWJlcicpO1xuY29uc3QgQmlnSW50U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YmlnaW50JyxbXSk7XG5jb25zdCBOYXRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpuYXQnLFtdKTtcbmNvbnN0IFN0cmluZ1NoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOnN0cmluZycsW10pO1xuY29uc3QgU3ltYm9sU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c3ltYm9sJyxbXSk7XG5jb25zdCBSZWNvcmRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpyZWNvcmRPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBBcnJheVNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOmFycmF5T2YnLFtBbnlTaGFwZV0pO1xuY29uc3QgU2V0U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c2V0T2YnLFtBbnlTaGFwZV0pO1xuY29uc3QgQmFnU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YmFnT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgTWFwU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6bWFwT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgUmVtb3RhYmxlU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdyZW1vdGFibGUnKTtcbmNvbnN0IEVycm9yU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdlcnJvcicpO1xuY29uc3QgUHJvbWlzZVNoYXBlPW1ha2VLaW5kTWF0Y2hlcigncHJvbWlzZScpO1xuY29uc3QgVW5kZWZpbmVkU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCd1bmRlZmluZWQnKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlTGltaXRzTWF0Y2hlcj0odGFnLHBheWxvYWQpPT57XG5pZihwYXlsb2FkW3BheWxvYWQubGVuZ3RoLTFdPT09dW5kZWZpbmVkKXtcbnBheWxvYWQ9aGFyZGVuKHBheWxvYWQuc2xpY2UoMCxwYXlsb2FkLmxlbmd0aC0xKSk7XG4gfVxucmV0dXJuIG1ha2VNYXRjaGVyKHRhZyxwYXlsb2FkKTtcbiB9O1xuXG5jb25zdCBtYWtlUmVtb3RhYmxlTWF0Y2hlcj0obGFiZWw9dW5kZWZpbmVkKT0+XG5sYWJlbD09PXVuZGVmaW5lZD9cblJlbW90YWJsZVNoYXBlOlxubWFrZU1hdGNoZXIoJ21hdGNoOnJlbW90YWJsZScsaGFyZGVuKHtsYWJlbH0pKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlU3BsaXRQYXlsb2FkPShcbmVtcHR5LFxuYmFzZSxcbm9wdGlvbmFsPXVuZGVmaW5lZCxcbnJlc3Q9dW5kZWZpbmVkKT0+XG57XG5pZihyZXN0KXtcbnJldHVybltiYXNlLG9wdGlvbmFsfHxlbXB0eSxyZXN0XTtcbiB9XG5pZihvcHRpb25hbCl7XG5yZXR1cm5bYmFzZSxvcHRpb25hbF07XG4gfVxucmV0dXJuW2Jhc2VdO1xuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IE09aGFyZGVuKHtcbmFueTooKT0+QW55U2hhcGUsXG5hbmQ6KC4uLnBhdHRzKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmFuZCcscGF0dHMpLFxub3I6KC4uLnBhdHRzKT0+bWFrZU1hdGNoZXIoJ21hdGNoOm9yJyxwYXR0cyksXG5ub3Q6KHN1YlBhdHQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6bm90JyxzdWJQYXR0KSxcblxuc2NhbGFyOigpPT5TY2FsYXJTaGFwZSxcbmtleTooKT0+S2V5U2hhcGUsXG5wYXR0ZXJuOigpPT5QYXR0ZXJuU2hhcGUsXG5raW5kOm1ha2VLaW5kTWF0Y2hlcixcbnRhZ2dlZDoodGFnUGF0dD1NLnN0cmluZygpLHBheWxvYWRQYXR0PU0uYW55KCkpPT5cbm1ha2VNYXRjaGVyKCdtYXRjaDp0YWdnZWQnLGhhcmRlbihbdGFnUGF0dCxwYXlsb2FkUGF0dF0pKSxcbmJvb2xlYW46KCk9PkJvb2xlYW5TaGFwZSxcbm51bWJlcjooKT0+TnVtYmVyU2hhcGUsXG5iaWdpbnQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YmlnaW50JyxbbGltaXRzXSk6QmlnSW50U2hhcGUsXG5uYXQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6bmF0JyxbbGltaXRzXSk6TmF0U2hhcGUsXG5zdHJpbmc6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c3RyaW5nJyxbbGltaXRzXSk6U3RyaW5nU2hhcGUsXG5zeW1ib2w6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c3ltYm9sJyxbbGltaXRzXSk6U3ltYm9sU2hhcGUsXG5yZWNvcmQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLnJlY29yZE9mKE0uYW55KCksTS5hbnkoKSxsaW1pdHMpOlJlY29yZFNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmFycmF5OihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5hcnJheU9mKE0uYW55KCksbGltaXRzKTpBcnJheVNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuc2V0OihsaW1pdHM9dW5kZWZpbmVkKT0+bGltaXRzP00uc2V0T2YoTS5hbnkoKSxsaW1pdHMpOlNldFNoYXBlLFxuYmFnOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5iYWdPZihNLmFueSgpLE0uYW55KCksbGltaXRzKTpCYWdTaGFwZSxcbm1hcDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP00ubWFwT2YoTS5hbnkoKSxNLmFueSgpLGxpbWl0cyk6TWFwU2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmVtb3RhYmxlOm1ha2VSZW1vdGFibGVNYXRjaGVyLFxuZXJyb3I6KCk9PkVycm9yU2hhcGUsXG5wcm9taXNlOigpPT5Qcm9taXNlU2hhcGUsXG51bmRlZmluZWQ6KCk9PlVuZGVmaW5lZFNoYXBlLFxubnVsbDooKT0+bnVsbCxcblxubHQ6KHJpZ2h0T3BlcmFuZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpsdCcscmlnaHRPcGVyYW5kKSxcbmx0ZToocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmx0ZScscmlnaHRPcGVyYW5kKSxcbmVxOihrZXkpPT57XG5hc3NlcnRLZXkoa2V5KTtcbnJldHVybiBrZXk9PT11bmRlZmluZWQ/TS51bmRlZmluZWQoKTprZXk7XG4gfSxcbm5lcTooa2V5KT0+TS5ub3QoTS5lcShrZXkpKSxcbmd0ZToocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmd0ZScscmlnaHRPcGVyYW5kKSxcbmd0OihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6Z3QnLHJpZ2h0T3BlcmFuZCksXG5cbnJlY29yZE9mOihrZXlQYXR0PU0uYW55KCksdmFsdWVQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOnJlY29yZE9mJyxba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzXSksXG5hcnJheU9mOihzdWJQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOmFycmF5T2YnLFtzdWJQYXR0LGxpbWl0c10pLFxuc2V0T2Y6KGtleVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c2V0T2YnLFtrZXlQYXR0LGxpbWl0c10pLFxuYmFnT2Y6KGtleVBhdHQ9TS5hbnkoKSxjb3VudFBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YmFnT2YnLFtrZXlQYXR0LGNvdW50UGF0dCxsaW1pdHNdKSxcbm1hcE9mOihrZXlQYXR0PU0uYW55KCksdmFsdWVQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOm1hcE9mJyxba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzXSksXG5zcGxpdEFycmF5OihiYXNlLG9wdGlvbmFsPXVuZGVmaW5lZCxyZXN0PXVuZGVmaW5lZCk9PlxubWFrZU1hdGNoZXIoXG4nbWF0Y2g6c3BsaXRBcnJheScsXG5tYWtlU3BsaXRQYXlsb2FkKFtdLGJhc2Usb3B0aW9uYWwscmVzdCkpLFxuXG5zcGxpdFJlY29yZDooYmFzZSxvcHRpb25hbD11bmRlZmluZWQscmVzdD11bmRlZmluZWQpPT5cbm1ha2VNYXRjaGVyKFxuJ21hdGNoOnNwbGl0UmVjb3JkJyxcbm1ha2VTcGxpdFBheWxvYWQoe30sYmFzZSxvcHRpb25hbCxyZXN0KSksXG5cbnNwbGl0OihiYXNlLHJlc3Q9dW5kZWZpbmVkKT0+e1xuaWYocGFzc1N0eWxlT2YoaGFyZGVuKGJhc2UpKT09PSdjb3B5QXJyYXknKXtcbi8vXG4vL1xucmV0dXJuIE0uc3BsaXRBcnJheShiYXNlLHJlc3QmJltdLHJlc3QpO1xuIH1lbHNle1xucmV0dXJuIE0uc3BsaXRSZWNvcmQoYmFzZSxyZXN0JiZ7fSxyZXN0KTtcbiB9XG4gfSxcbnBhcnRpYWw6KGJhc2UscmVzdD11bmRlZmluZWQpPT57XG5pZihwYXNzU3R5bGVPZihoYXJkZW4oYmFzZSkpPT09J2NvcHlBcnJheScpe1xuLy9cbi8vXG5yZXR1cm4gTS5zcGxpdEFycmF5KFtdLGJhc2UscmVzdCk7XG4gfWVsc2V7XG5yZXR1cm4gTS5zcGxpdFJlY29yZCh7fSxiYXNlLHJlc3QpO1xuIH1cbiB9LFxuXG5lcmVmOih0KT0+TS5vcih0LE0ucHJvbWlzZSgpKSxcbm9wdDoodCk9Pk0ub3IoTS51bmRlZmluZWQoKSx0KSxcblxuaW50ZXJmYWNlOihpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zKT0+XG4vL1xubWFrZUludGVyZmFjZUd1YXJkKGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLG9wdGlvbnMpLFxuY2FsbDooLi4uYXJnUGF0dGVybnMpPT5cbi8vXG5tYWtlTWV0aG9kR3VhcmRNYWtlcignc3luYycsYXJnUGF0dGVybnMpLFxuY2FsbFdoZW46KC4uLmFyZ0d1YXJkcyk9PlxuLy9cbm1ha2VNZXRob2RHdWFyZE1ha2VyKCdhc3luYycsYXJnR3VhcmRzKSxcblxuYXdhaXQ6KGFyZ1BhdHRlcm4pPT5cbi8vXG5tYWtlQXdhaXRBcmdHdWFyZChhcmdQYXR0ZXJuKSxcbnJhdzooKT0+XG4vL1xubWFrZVJhd0d1YXJkKCl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmNoZWNrTWF0Y2hlcyxcbm1hdGNoZXMsXG5tdXN0TWF0Y2gsXG5hc3NlcnRQYXR0ZXJuLFxuaXNQYXR0ZXJuLFxuZ2V0UmFua0NvdmVyLFxuTSxcbmtpbmRPZn0pO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAge1xuY2hlY2tNYXRjaGVzLFxubWF0Y2hlcyxcbm11c3RNYXRjaCxcbmFzc2VydFBhdHRlcm4sXG5pc1BhdHRlcm4sXG5nZXRSYW5rQ292ZXIsXG5NLFxua2luZE9mfT1cbm1ha2VQYXR0ZXJuS2l0KCk7JGjNj19vbmNlLmNoZWNrTWF0Y2hlcyhjaGVja01hdGNoZXMpOyRozY9fb25jZS5tYXRjaGVzKG1hdGNoZXMpOyRozY9fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTskaM2PX29uY2UuYXNzZXJ0UGF0dGVybihhc3NlcnRQYXR0ZXJuKTskaM2PX29uY2UuaXNQYXR0ZXJuKGlzUGF0dGVybik7JGjNj19vbmNlLmdldFJhbmtDb3ZlcihnZXRSYW5rQ292ZXIpOyRozY9fb25jZS5NKE0pOyRozY9fb25jZS5raW5kT2Yoa2luZE9mKTtcblxuTU09TTtcblxuLy9cblxuLy9cbmNvbnN0IEF3YWl0QXJnR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmFyZ0d1YXJkOk0ucGF0dGVybigpfSk7XG5cblxuY29uc3QgICAgICAgIEF3YWl0QXJnR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnKTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuQXdhaXRBcmdHdWFyZFNoYXBlKEF3YWl0QXJnR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgaXNBd2FpdEFyZ0d1YXJkPShzcGVjaW1lbik9PlxubWF0Y2hlcyhzcGVjaW1lbixBd2FpdEFyZ0d1YXJkU2hhcGUpOyRozY9fb25jZS5pc0F3YWl0QXJnR3VhcmQoaXNBd2FpdEFyZ0d1YXJkKTtcbmhhcmRlbihpc0F3YWl0QXJnR3VhcmQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEF3YWl0QXJnR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLEF3YWl0QXJnR3VhcmRTaGFwZSwnYXdhaXRBcmdHdWFyZCcpO1xuIH07JGjNj19vbmNlLmFzc2VydEF3YWl0QXJnR3VhcmQoYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlQXdhaXRBcmdHdWFyZD0oYXJnUGF0dGVybik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1tYWtlVGFnZ2VkKCdndWFyZDphd2FpdEFyZ0d1YXJkJyx7XG5hcmdHdWFyZDphcmdQYXR0ZXJufSk7XG5cbmFzc2VydEF3YWl0QXJnR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLy9cblxuY29uc3QgUmF3R3VhcmRQYXlsb2FkU2hhcGU9TS5yZWNvcmQoKTtcblxuY29uc3QgICAgICAgIFJhd0d1YXJkU2hhcGU9TS5raW5kKCdndWFyZDpyYXdHdWFyZCcpOyRozY9fb25jZS5SYXdHdWFyZFNoYXBlKFJhd0d1YXJkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgaXNSYXdHdWFyZD0oc3BlY2ltZW4pPT5tYXRjaGVzKHNwZWNpbWVuLFJhd0d1YXJkU2hhcGUpOyRozY9fb25jZS5pc1Jhd0d1YXJkKGlzUmF3R3VhcmQpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0UmF3R3VhcmQ9KHNwZWNpbWVuKT0+XG5tdXN0TWF0Y2goc3BlY2ltZW4sUmF3R3VhcmRTaGFwZSwncmF3R3VhcmQnKTtcblxuLypcblxuICovJGjNj19vbmNlLmFzc2VydFJhd0d1YXJkKGFzc2VydFJhd0d1YXJkKTtcbmNvbnN0IG1ha2VSYXdHdWFyZD0oKT0+bWFrZVRhZ2dlZCgnZ3VhcmQ6cmF3R3VhcmQnLHt9KTtcblxuLy9cbi8vXG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZFNoYXBlPU0ub3IoUmF3R3VhcmRTaGFwZSxNLnBhdHRlcm4oKSk7JGjNj19vbmNlLlN5bmNWYWx1ZUd1YXJkU2hhcGUoU3luY1ZhbHVlR3VhcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoU3luY1ZhbHVlR3VhcmRTaGFwZSk7JGjNj19vbmNlLlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgQXJnR3VhcmRTaGFwZT1NLm9yKFJhd0d1YXJkU2hhcGUsQXdhaXRBcmdHdWFyZFNoYXBlLE0ucGF0dGVybigpKTtcbmNvbnN0ICAgICAgICBBcmdHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoQXJnR3VhcmRTaGFwZSk7JGjNj19vbmNlLkFyZ0d1YXJkTGlzdFNoYXBlKEFyZ0d1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonc3luYycsXG5hcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5vcHRpb25hbEFyZ0d1YXJkczpNLm9wdChTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSksXG5yZXN0QXJnR3VhcmQ6TS5vcHQoU3luY1ZhbHVlR3VhcmRTaGFwZSksXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuY29uc3QgQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KEFyZ0d1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCAgICAgICAgTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9TS5vcihcblN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSxcbkFzeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUpOyRozY9fb25jZS5NZXRob2RHdWFyZFBheWxvYWRTaGFwZShNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIE1ldGhvZEd1YXJkU2hhcGU9TS5raW5kKCdndWFyZDptZXRob2RHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5NZXRob2RHdWFyZFNoYXBlKE1ldGhvZEd1YXJkU2hhcGUpO1xuY29uc3QgICAgICAgIGFzc2VydE1ldGhvZEd1YXJkPShzcGVjaW1lbik9Pntcbm11c3RNYXRjaChzcGVjaW1lbixNZXRob2RHdWFyZFNoYXBlLCdtZXRob2RHdWFyZCcpO1xuIH07JGjNj19vbmNlLmFzc2VydE1ldGhvZEd1YXJkKGFzc2VydE1ldGhvZEd1YXJkKTtcbmhhcmRlbihhc3NlcnRNZXRob2RHdWFyZCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlTWV0aG9kR3VhcmRNYWtlcj0oXG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPXVuZGVmaW5lZCxcbnJlc3RBcmdHdWFyZD11bmRlZmluZWQpPT5cblxuaGFyZGVuKHtcbm9wdGlvbmFsOiguLi5vcHRBcmdHdWFyZHMpPT57XG5vcHRpb25hbEFyZ0d1YXJkcz09PXVuZGVmaW5lZHx8XG5GYWlsIGBDYW4gb25seSBoYXZlIG9uZSBzZXQgb2Ygb3B0aW9uYWwgZ3VhcmRzYDtcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8XG5GYWlsIGBvcHRpb25hbCBhcmcgZ3VhcmRzIG11c3QgY29tZSBiZWZvcmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKGNhbGxLaW5kLGFyZ0d1YXJkcyxvcHRBcmdHdWFyZHMpO1xuIH0sXG5yZXN0OihyQXJnR3VhcmQpPT57XG5yZXN0QXJnR3VhcmQ9PT11bmRlZmluZWR8fEZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHJlc3QgYXJnYDtcbnJldHVybiBtYWtlTWV0aG9kR3VhcmRNYWtlcihcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yQXJnR3VhcmQpO1xuXG4gfSxcbnJldHVybnM6KHJldHVybkd1YXJkPU0udW5kZWZpbmVkKCkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOm1ldGhvZEd1YXJkJyx7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzLFxucmVzdEFyZ0d1YXJkLFxucmV0dXJuR3VhcmR9KTtcblxuYXNzZXJ0TWV0aG9kR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfX0pO1xuXG5cbmNvbnN0ICAgICAgICBJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xuaW50ZXJmYWNlTmFtZTpNLnN0cmluZygpLFxubWV0aG9kR3VhcmRzOk0ucmVjb3JkT2YoTS5zdHJpbmcoKSxNZXRob2RHdWFyZFNoYXBlKX0sXG5cbntcbmRlZmF1bHRHdWFyZHM6TS5vcihNLnVuZGVmaW5lZCgpLCdwYXNzYWJsZScsJ3JhdycpLFxuc2xvcHB5Ok0uYm9vbGVhbigpLFxuc3ltYm9sTWV0aG9kR3VhcmRzOk0ubWFwT2YoTS5zeW1ib2woKSxNZXRob2RHdWFyZFNoYXBlKX0pOyRozY9fb25jZS5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZShJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSW50ZXJmYWNlR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyk7XG5cbi8qXG5cblxuICovJGjNj19vbmNlLkludGVyZmFjZUd1YXJkU2hhcGUoSW50ZXJmYWNlR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgYXNzZXJ0SW50ZXJmYWNlR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLEludGVyZmFjZUd1YXJkU2hhcGUsJ2ludGVyZmFjZUd1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0SW50ZXJmYWNlR3VhcmQoYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuaGFyZGVuKGFzc2VydEludGVyZmFjZUd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbnRlcmZhY2VHdWFyZD0oaW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsb3B0aW9ucz17fSk9PntcbmNvbnN0e3Nsb3BweT1mYWxzZSxkZWZhdWx0R3VhcmRzPXNsb3BweT8ncGFzc2FibGUnOnVuZGVmaW5lZH09XG5vcHRpb25zO1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdNZXRob2RHdWFyZHM9e307XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzPVtdO1xuZm9yKGNvbnN0IGtleSBvZiBvd25LZXlzKG1ldGhvZEd1YXJkcykpe1xuY29uc3QgdmFsdWU9bWV0aG9kR3VhcmRzWy8qICAgICAgICAgICAgICAgICAqL2tleV07XG5pZih0eXBlb2Yga2V5PT09J3N5bWJvbCcpe1xuc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcy5wdXNoKFtrZXksdmFsdWVdKTtcbiB9ZWxzZXtcbnN0cmluZ01ldGhvZEd1YXJkc1trZXldPXZhbHVlO1xuIH1cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyx7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzOnN0cmluZ01ldGhvZEd1YXJkcyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLmxlbmd0aD9cbntzeW1ib2xNZXRob2RHdWFyZHM6bWFrZUNvcHlNYXAoc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcyl9Olxue30pLFxuZGVmYXVsdEd1YXJkc30pO1xuXG5hc3NlcnRJbnRlcmZhY2VHdWFyZChyZXN1bHQpO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdCk7XG4gfTtcblxuY29uc3QgR3VhcmRQYXlsb2FkU2hhcGVzPWhhcmRlbih7XG4nZ3VhcmQ6YXdhaXRBcmdHdWFyZCc6QXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDpyYXdHdWFyZCc6UmF3R3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6bWV0aG9kR3VhcmQnOk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOmludGVyZmFjZUd1YXJkJzpJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZX0pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdExpbWl0cyI6WyJkZWZhdWx0TGltaXRzIl0sImNoZWNrTWF0Y2hlcyI6WyJjaGVja01hdGNoZXMiXSwibWF0Y2hlcyI6WyJtYXRjaGVzIl0sIm11c3RNYXRjaCI6WyJtdXN0TWF0Y2giXSwiYXNzZXJ0UGF0dGVybiI6WyJhc3NlcnRQYXR0ZXJuIl0sImlzUGF0dGVybiI6WyJpc1BhdHRlcm4iXSwiZ2V0UmFua0NvdmVyIjpbImdldFJhbmtDb3ZlciJdLCJNIjpbIk0iXSwia2luZE9mIjpbImtpbmRPZiJdLCJBd2FpdEFyZ0d1YXJkU2hhcGUiOlsiQXdhaXRBcmdHdWFyZFNoYXBlIl0sImlzQXdhaXRBcmdHdWFyZCI6WyJpc0F3YWl0QXJnR3VhcmQiXSwiYXNzZXJ0QXdhaXRBcmdHdWFyZCI6WyJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sIlJhd0d1YXJkU2hhcGUiOlsiUmF3R3VhcmRTaGFwZSJdLCJpc1Jhd0d1YXJkIjpbImlzUmF3R3VhcmQiXSwiYXNzZXJ0UmF3R3VhcmQiOlsiYXNzZXJ0UmF3R3VhcmQiXSwiU3luY1ZhbHVlR3VhcmRTaGFwZSI6WyJTeW5jVmFsdWVHdWFyZFNoYXBlIl0sIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIl0sIkFyZ0d1YXJkTGlzdFNoYXBlIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIl0sIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIjpbIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIl0sIk1ldGhvZEd1YXJkU2hhcGUiOlsiTWV0aG9kR3VhcmRTaGFwZSJdLCJhc3NlcnRNZXRob2RHdWFyZCI6WyJhc3NlcnRNZXRob2RHdWFyZCJdLCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSI6WyJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSJdLCJJbnRlcmZhY2VHdWFyZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkU2hhcGUiXSwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiOlsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAIgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANIBosRCBgAAQgYAACUAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwiLi9zcmMvbWVtby1yYWNlLmpzIiwiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZVByb21pc2VLaXQiLCJyYWNlUHJvbWlzZXMiXSwicmVleHBvcnRzIjpbIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQsbWVtb1JhY2U7JGjNj19pbXBvcnRzKFtbXCIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1wiLCBbW1wibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCA9ICRozY9fYSldXV1dLFtcIi4vc3JjL21lbW8tcmFjZS5qc1wiLCBbW1wibWVtb1JhY2VcIiwgWyRozY9fYSA9PiAobWVtb1JhY2UgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9pcy1wcm9taXNlLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZVByb21pc2VLaXQsICduYW1lJywge3ZhbHVlOiBcIm1ha2VQcm9taXNlS2l0XCJ9KTskaM2PX29uY2UubWFrZVByb21pc2VLaXQobWFrZVByb21pc2VLaXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYWNlUHJvbWlzZXMsICduYW1lJywge3ZhbHVlOiBcInJhY2VQcm9taXNlc1wifSk7JGjNj19vbmNlLnJhY2VQcm9taXNlcyhyYWNlUHJvbWlzZXMpOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZT1nbG9iYWxUaGlzLkhhbmRsZWRQcm9taXNlfHxQcm9taXNlO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVByb21pc2VLaXQoKXtcbmNvbnN0e3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfT1tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQoKTtcblxuY29uc3QgcHJvbWlzZT1uZXcgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZShleGVjdXRvcik7XG5cbnJldHVybiBoYXJkZW4oe3Byb21pc2UscmVzb2x2ZSxyZWplY3R9KTtcbiB9XG5oYXJkZW4obWFrZVByb21pc2VLaXQpO1xuXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICByYWNlUHJvbWlzZXModmFsdWVzKXtcbnJldHVybiBoYXJkZW4obWVtb1JhY2UuY2FsbChCZXN0UGlwZWxpbmFibGVQcm9taXNlLHZhbHVlcykpO1xuIH1cbmhhcmRlbihyYWNlUHJvbWlzZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2VLaXQiOlsibWFrZVByb21pc2VLaXQiXSwicmFjZVByb21pc2VzIjpbInJhY2VQcm9taXNlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACzXVtGVQIAAFUCAAAuAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xMy9zcmMvaXMtcHJvbWlzZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaXNQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNQcm9taXNlLCAnbmFtZScsIHt2YWx1ZTogXCJpc1Byb21pc2VcIn0pOyRozY9fb25jZS5pc1Byb21pc2UoaXNQcm9taXNlKTsgICAvKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBpc1Byb21pc2UobWF5YmVQcm9taXNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKT09PW1heWJlUHJvbWlzZTtcbiB9XG5oYXJkZW4oaXNQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUHJvbWlzZSI6WyJpc1Byb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+mbwkZwHAACcBwAALQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTMvc3JjL21lbW8tcmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWVtb1JhY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4qL1xuXG5jb25zdCBpc09iamVjdD0odmFsdWUpPT5PYmplY3QodmFsdWUpPT09dmFsdWU7XG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBrbm93blByb21pc2VzPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYXJrU2V0dGxlZD0ocmVjb3JkKT0+e1xuaWYoIXJlY29yZHx8cmVjb3JkLnNldHRsZWQpe1xucmV0dXJuIG5ldyBTZXQoKTtcbiB9XG5cbmNvbnN0e2RlZmVycmVkc309cmVjb3JkO1xuT2JqZWN0LmFzc2lnbihyZWNvcmQse1xuZGVmZXJyZWRzOnVuZGVmaW5lZCxcbnNldHRsZWQ6dHJ1ZX0pO1xuXG5PYmplY3QuZnJlZXplKHJlY29yZCk7XG5yZXR1cm4gZGVmZXJyZWRzO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGdldE1lbW9SZWNvcmQ9KHZhbHVlKT0+e1xuaWYoIWlzT2JqZWN0KHZhbHVlKSl7XG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7c2V0dGxlZDp0cnVlfSk7XG4gfVxuXG5sZXQgcmVjb3JkPWtub3duUHJvbWlzZXMuZ2V0KHZhbHVlKTtcblxuaWYoIXJlY29yZCl7XG5yZWNvcmQ9e2RlZmVycmVkczpuZXcgU2V0KCksc2V0dGxlZDpmYWxzZX07XG5rbm93blByb21pc2VzLnNldCh2YWx1ZSxyZWNvcmQpO1xuLy9cblByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihcbih2YWwpPT57XG5mb3IoY29uc3R7cmVzb2x2ZX1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlc29sdmUodmFsKTtcbiB9XG4gfSxcbihlcnIpPT57XG5mb3IoY29uc3R7cmVqZWN0fW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVqZWN0KGVycik7XG4gfVxuIH0pO1xuXG4gfVxucmV0dXJuIHJlY29yZDtcbiB9O1xuXG5jb25zdHtyYWNlfT17XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5yYWNlKHZhbHVlcyl7XG5sZXQgZGVmZXJyZWQ7XG4vKiAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBjYWNoZWRWYWx1ZXM9W107XG5jb25zdCBDPXRoaXM7XG5jb25zdCByZXN1bHQ9bmV3IEMoKHJlc29sdmUscmVqZWN0KT0+e1xuZGVmZXJyZWQ9e3Jlc29sdmUscmVqZWN0fTtcbmZvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe1xuY2FjaGVkVmFsdWVzLnB1c2godmFsdWUpO1xuY29uc3R7c2V0dGxlZCxkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoc2V0dGxlZCl7XG4vL1xuLy9cbkMucmVzb2x2ZSh2YWx1ZSkudGhlbihyZXNvbHZlLHJlamVjdCk7XG4gfWVsc2V7XG5kZWZlcnJlZHMuYWRkKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuXG4vL1xuLy9cbnJldHVybiByZXN1bHQuZmluYWxseSgoKT0+e1xuZm9yKGNvbnN0IHZhbHVlIG9mIGNhY2hlZFZhbHVlcyl7XG5jb25zdHtkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoZGVmZXJyZWRzKXtcbmRlZmVycmVkcy5kZWxldGUoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG4gfX07JGjNj19vbmNlLnJhY2UocmFjZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtZW1vUmFjZSI6WyJyYWNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJxtxLJ8BQAAfAUAADgAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZXNvbHZlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzb2x2ZT0odmFsdWUpPT57XG5pZihpbnRlcm5hbFJlc29sdmUpe1xuaW50ZXJuYWxSZXNvbHZlKHZhbHVlKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT1udWxsKTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWplY3Q9KHJlYXNvbik9PntcbmlmKGludGVybmFsUmVqZWN0KXtcbmludGVybmFsUmVqZWN0KHJlYXNvbik7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZWplY3Q9PT1udWxsKTtcbiB9XG4gfTtcblxuY29uc3QgZXhlY3V0b3I9KHJlcyxyZWopPT57XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09dW5kZWZpbmVkJiZpbnRlcm5hbFJlamVjdD09PXVuZGVmaW5lZCk7XG5pbnRlcm5hbFJlc29sdmU9cmVzO1xuaW50ZXJuYWxSZWplY3Q9cmVqO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfSk7XG4gfTskaM2PX29uY2UubWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG5oYXJkZW4obWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAKQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTMvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADSAaLEQgYAAEIGAAAlAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xNC9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsIi4vc3JjL21lbW8tcmFjZS5qcyIsIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VQcm9taXNlS2l0IiwicmFjZVByb21pc2VzIl0sInJlZXhwb3J0cyI6WyIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0LG1lbW9SYWNlOyRozY9faW1wb3J0cyhbW1wiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNcIiwgW1tcIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9tZW1vLXJhY2UuanNcIiwgW1tcIm1lbW9SYWNlXCIsIFskaM2PX2EgPT4gKG1lbW9SYWNlID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvaXMtcHJvbWlzZS5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VQcm9taXNlS2l0LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlUHJvbWlzZUtpdFwifSk7JGjNj19vbmNlLm1ha2VQcm9taXNlS2l0KG1ha2VQcm9taXNlS2l0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmFjZVByb21pc2VzLCAnbmFtZScsIHt2YWx1ZTogXCJyYWNlUHJvbWlzZXNcIn0pOyRozY9fb25jZS5yYWNlUHJvbWlzZXMocmFjZVByb21pc2VzKTsgICBcblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEJlc3RQaXBlbGluYWJsZVByb21pc2U9Z2xvYmFsVGhpcy5IYW5kbGVkUHJvbWlzZXx8UHJvbWlzZTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIG1ha2VQcm9taXNlS2l0KCl7XG5jb25zdHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn09bWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KCk7XG5cbmNvbnN0IHByb21pc2U9bmV3IEJlc3RQaXBlbGluYWJsZVByb21pc2UoZXhlY3V0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtwcm9taXNlLHJlc29sdmUscmVqZWN0fSk7XG4gfVxuaGFyZGVuKG1ha2VQcm9taXNlS2l0KTtcblxuLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgcmFjZVByb21pc2VzKHZhbHVlcyl7XG5yZXR1cm4gaGFyZGVuKG1lbW9SYWNlLmNhbGwoQmVzdFBpcGVsaW5hYmxlUHJvbWlzZSx2YWx1ZXMpKTtcbiB9XG5oYXJkZW4ocmFjZVByb21pc2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQcm9taXNlS2l0IjpbIm1ha2VQcm9taXNlS2l0Il0sInJhY2VQcm9taXNlcyI6WyJyYWNlUHJvbWlzZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAs11bRlUCAABVAgAALgAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQvc3JjL2lzLXByb21pc2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImlzUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaM2PX29uY2UuaXNQcm9taXNlKGlzUHJvbWlzZSk7ICAgLypcblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgaXNQcm9taXNlKG1heWJlUHJvbWlzZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZSk9PT1tYXliZVByb21pc2U7XG4gfVxuaGFyZGVuKGlzUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Byb21pc2UiOlsiaXNQcm9taXNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPpm8JGcBwAAnAcAAC0AAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjE0L3NyYy9tZW1vLXJhY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1lbW9SYWNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuKi9cblxuY29uc3QgaXNPYmplY3Q9KHZhbHVlKT0+T2JqZWN0KHZhbHVlKT09PXZhbHVlO1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga25vd25Qcm9taXNlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFya1NldHRsZWQ9KHJlY29yZCk9PntcbmlmKCFyZWNvcmR8fHJlY29yZC5zZXR0bGVkKXtcbnJldHVybiBuZXcgU2V0KCk7XG4gfVxuXG5jb25zdHtkZWZlcnJlZHN9PXJlY29yZDtcbk9iamVjdC5hc3NpZ24ocmVjb3JkLHtcbmRlZmVycmVkczp1bmRlZmluZWQsXG5zZXR0bGVkOnRydWV9KTtcblxuT2JqZWN0LmZyZWV6ZShyZWNvcmQpO1xucmV0dXJuIGRlZmVycmVkcztcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBnZXRNZW1vUmVjb3JkPSh2YWx1ZSk9PntcbmlmKCFpc09iamVjdCh2YWx1ZSkpe1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oe3NldHRsZWQ6dHJ1ZX0pO1xuIH1cblxubGV0IHJlY29yZD1rbm93blByb21pc2VzLmdldCh2YWx1ZSk7XG5cbmlmKCFyZWNvcmQpe1xucmVjb3JkPXtkZWZlcnJlZHM6bmV3IFNldCgpLHNldHRsZWQ6ZmFsc2V9O1xua25vd25Qcm9taXNlcy5zZXQodmFsdWUscmVjb3JkKTtcbi8vXG5Qcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oXG4odmFsKT0+e1xuZm9yKGNvbnN0e3Jlc29sdmV9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZXNvbHZlKHZhbCk7XG4gfVxuIH0sXG4oZXJyKT0+e1xuZm9yKGNvbnN0e3JlamVjdH1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlamVjdChlcnIpO1xuIH1cbiB9KTtcblxuIH1cbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3R7cmFjZX09e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xucmFjZSh2YWx1ZXMpe1xubGV0IGRlZmVycmVkO1xuLyogICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgY2FjaGVkVmFsdWVzPVtdO1xuY29uc3QgQz10aGlzO1xuY29uc3QgcmVzdWx0PW5ldyBDKChyZXNvbHZlLHJlamVjdCk9PntcbmRlZmVycmVkPXtyZXNvbHZlLHJlamVjdH07XG5mb3IoY29uc3QgdmFsdWUgb2YgdmFsdWVzKXtcbmNhY2hlZFZhbHVlcy5wdXNoKHZhbHVlKTtcbmNvbnN0e3NldHRsZWQsZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKHNldHRsZWQpe1xuLy9cbi8vXG5DLnJlc29sdmUodmFsdWUpLnRoZW4ocmVzb2x2ZSxyZWplY3QpO1xuIH1lbHNle1xuZGVmZXJyZWRzLmFkZChkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcblxuLy9cbi8vXG5yZXR1cm4gcmVzdWx0LmZpbmFsbHkoKCk9PntcbmZvcihjb25zdCB2YWx1ZSBvZiBjYWNoZWRWYWx1ZXMpe1xuY29uc3R7ZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKGRlZmVycmVkcyl7XG5kZWZlcnJlZHMuZGVsZXRlKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuIH19OyRozY9fb25jZS5yYWNlKHJhY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWVtb1JhY2UiOlsicmFjZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACcbcSyfAUAAHwFAAA4AAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xNC9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVzb2x2ZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlamVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmU9KHZhbHVlKT0+e1xuaWYoaW50ZXJuYWxSZXNvbHZlKXtcbmludGVybmFsUmVzb2x2ZSh2YWx1ZSk7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09bnVsbCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVqZWN0PShyZWFzb24pPT57XG5pZihpbnRlcm5hbFJlamVjdCl7XG5pbnRlcm5hbFJlamVjdChyZWFzb24pO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVqZWN0PT09bnVsbCk7XG4gfVxuIH07XG5cbmNvbnN0IGV4ZWN1dG9yPShyZXMscmVqKT0+e1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PXVuZGVmaW5lZCYmaW50ZXJuYWxSZWplY3Q9PT11bmRlZmluZWQpO1xuaW50ZXJuYWxSZXNvbHZlPXJlcztcbmludGVybmFsUmVqZWN0PXJlajtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn0pO1xuIH07JGjNj19vbmNlLm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xuaGFyZGVuKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjE0L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0gGixEIGAABCBgAAJAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsIi4vc3JjL21lbW8tcmFjZS5qcyIsIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VQcm9taXNlS2l0IiwicmFjZVByb21pc2VzIl0sInJlZXhwb3J0cyI6WyIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0LG1lbW9SYWNlOyRozY9faW1wb3J0cyhbW1wiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNcIiwgW1tcIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9tZW1vLXJhY2UuanNcIiwgW1tcIm1lbW9SYWNlXCIsIFskaM2PX2EgPT4gKG1lbW9SYWNlID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvaXMtcHJvbWlzZS5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VQcm9taXNlS2l0LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlUHJvbWlzZUtpdFwifSk7JGjNj19vbmNlLm1ha2VQcm9taXNlS2l0KG1ha2VQcm9taXNlS2l0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmFjZVByb21pc2VzLCAnbmFtZScsIHt2YWx1ZTogXCJyYWNlUHJvbWlzZXNcIn0pOyRozY9fb25jZS5yYWNlUHJvbWlzZXMocmFjZVByb21pc2VzKTsgICBcblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEJlc3RQaXBlbGluYWJsZVByb21pc2U9Z2xvYmFsVGhpcy5IYW5kbGVkUHJvbWlzZXx8UHJvbWlzZTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIG1ha2VQcm9taXNlS2l0KCl7XG5jb25zdHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn09bWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KCk7XG5cbmNvbnN0IHByb21pc2U9bmV3IEJlc3RQaXBlbGluYWJsZVByb21pc2UoZXhlY3V0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtwcm9taXNlLHJlc29sdmUscmVqZWN0fSk7XG4gfVxuaGFyZGVuKG1ha2VQcm9taXNlS2l0KTtcblxuLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgcmFjZVByb21pc2VzKHZhbHVlcyl7XG5yZXR1cm4gaGFyZGVuKG1lbW9SYWNlLmNhbGwoQmVzdFBpcGVsaW5hYmxlUHJvbWlzZSx2YWx1ZXMpKTtcbiB9XG5oYXJkZW4ocmFjZVByb21pc2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQcm9taXNlS2l0IjpbIm1ha2VQcm9taXNlS2l0Il0sInJhY2VQcm9taXNlcyI6WyJyYWNlUHJvbWlzZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAs11bRlUCAABVAgAALQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9zcmMvaXMtcHJvbWlzZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaXNQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNQcm9taXNlLCAnbmFtZScsIHt2YWx1ZTogXCJpc1Byb21pc2VcIn0pOyRozY9fb25jZS5pc1Byb21pc2UoaXNQcm9taXNlKTsgICAvKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBpc1Byb21pc2UobWF5YmVQcm9taXNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKT09PW1heWJlUHJvbWlzZTtcbiB9XG5oYXJkZW4oaXNQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUHJvbWlzZSI6WyJpc1Byb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+mbwkZwHAACcBwAALAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9zcmMvbWVtby1yYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtZW1vUmFjZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiovXG5cbmNvbnN0IGlzT2JqZWN0PSh2YWx1ZSk9Pk9iamVjdCh2YWx1ZSk9PT12YWx1ZTtcblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtub3duUHJvbWlzZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1hcmtTZXR0bGVkPShyZWNvcmQpPT57XG5pZighcmVjb3JkfHxyZWNvcmQuc2V0dGxlZCl7XG5yZXR1cm4gbmV3IFNldCgpO1xuIH1cblxuY29uc3R7ZGVmZXJyZWRzfT1yZWNvcmQ7XG5PYmplY3QuYXNzaWduKHJlY29yZCx7XG5kZWZlcnJlZHM6dW5kZWZpbmVkLFxuc2V0dGxlZDp0cnVlfSk7XG5cbk9iamVjdC5mcmVlemUocmVjb3JkKTtcbnJldHVybiBkZWZlcnJlZHM7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZ2V0TWVtb1JlY29yZD0odmFsdWUpPT57XG5pZighaXNPYmplY3QodmFsdWUpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtzZXR0bGVkOnRydWV9KTtcbiB9XG5cbmxldCByZWNvcmQ9a25vd25Qcm9taXNlcy5nZXQodmFsdWUpO1xuXG5pZighcmVjb3JkKXtcbnJlY29yZD17ZGVmZXJyZWRzOm5ldyBTZXQoKSxzZXR0bGVkOmZhbHNlfTtcbmtub3duUHJvbWlzZXMuc2V0KHZhbHVlLHJlY29yZCk7XG4vL1xuUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKFxuKHZhbCk9PntcbmZvcihjb25zdHtyZXNvbHZlfW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVzb2x2ZSh2YWwpO1xuIH1cbiB9LFxuKGVycik9PntcbmZvcihjb25zdHtyZWplY3R9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZWplY3QoZXJyKTtcbiB9XG4gfSk7XG5cbiB9XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0e3JhY2V9PXtcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbnJhY2UodmFsdWVzKXtcbmxldCBkZWZlcnJlZDtcbi8qICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGNhY2hlZFZhbHVlcz1bXTtcbmNvbnN0IEM9dGhpcztcbmNvbnN0IHJlc3VsdD1uZXcgQygocmVzb2x2ZSxyZWplY3QpPT57XG5kZWZlcnJlZD17cmVzb2x2ZSxyZWplY3R9O1xuZm9yKGNvbnN0IHZhbHVlIG9mIHZhbHVlcyl7XG5jYWNoZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XG5jb25zdHtzZXR0bGVkLGRlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihzZXR0bGVkKXtcbi8vXG4vL1xuQy5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmUscmVqZWN0KTtcbiB9ZWxzZXtcbmRlZmVycmVkcy5hZGQoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG5cbi8vXG4vL1xucmV0dXJuIHJlc3VsdC5maW5hbGx5KCgpPT57XG5mb3IoY29uc3QgdmFsdWUgb2YgY2FjaGVkVmFsdWVzKXtcbmNvbnN0e2RlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihkZWZlcnJlZHMpe1xuZGVmZXJyZWRzLmRlbGV0ZShkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcbiB9fTskaM2PX29uY2UucmFjZShyYWNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1lbW9SYWNlIjpbInJhY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnG3EsnwFAAB8BQAANwAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVzb2x2ZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlamVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmU9KHZhbHVlKT0+e1xuaWYoaW50ZXJuYWxSZXNvbHZlKXtcbmludGVybmFsUmVzb2x2ZSh2YWx1ZSk7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09bnVsbCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVqZWN0PShyZWFzb24pPT57XG5pZihpbnRlcm5hbFJlamVjdCl7XG5pbnRlcm5hbFJlamVjdChyZWFzb24pO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVqZWN0PT09bnVsbCk7XG4gfVxuIH07XG5cbmNvbnN0IGV4ZWN1dG9yPShyZXMscmVqKT0+e1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PXVuZGVmaW5lZCYmaW50ZXJuYWxSZWplY3Q9PT11bmRlZmluZWQpO1xuaW50ZXJuYWxSZXNvbHZlPXJlcztcbmludGVybmFsUmVqZWN0PXJlajtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn0pO1xuIH07JGjNj19vbmNlLm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xuaGFyZGVuKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACgAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjYvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADcaPdCkBEAAJARAAAcAAAAQGVuZG8vc3RyZWFtLXYxLjIuOC9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiXSwiZXhwb3J0cyI6WyJtYWtlUGlwZSIsIm1ha2VRdWV1ZSIsIm1ha2VTdHJlYW0iLCJtYXBSZWFkZXIiLCJtYXBXcml0ZXIiLCJwcmltZSIsInB1bXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxtYWtlUHJvbWlzZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBmcmVlemU9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL09iamVjdC5mcmVlemU7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVF1ZXVlPSgpPT57XG5sZXR7cHJvbWlzZTp0YWlsUHJvbWlzZSxyZXNvbHZlOnRhaWxSZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucmV0dXJue1xucHV0KHZhbHVlKXtcbmNvbnN0e3Jlc29sdmUscHJvbWlzZX09bWFrZVByb21pc2VLaXQoKTtcbnRhaWxSZXNvbHZlKGZyZWV6ZSh7dmFsdWUscHJvbWlzZX0pKTtcbnRhaWxSZXNvbHZlPXJlc29sdmU7XG4gfSxcbmdldCgpe1xuY29uc3QgcHJvbWlzZT10YWlsUHJvbWlzZS50aGVuKChuZXh0KT0+bmV4dC52YWx1ZSk7XG50YWlsUHJvbWlzZT10YWlsUHJvbWlzZS50aGVuKChuZXh0KT0+bmV4dC5wcm9taXNlKTtcbnJldHVybiBoYXJkZW4ocHJvbWlzZSk7XG4gfX07XG5cbiB9OyRozY9fb25jZS5tYWtlUXVldWUobWFrZVF1ZXVlKTtcbmhhcmRlbihtYWtlUXVldWUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0cmVhbT0oYWNrcyxkYXRhKT0+e1xuY29uc3Qgc3RyZWFtPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG5uZXh0KHZhbHVlKXtcbi8vXG4vL1xuZGF0YS5wdXQoZnJlZXplKHt2YWx1ZSxkb25lOmZhbHNlfSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbnJldHVybih2YWx1ZSl7XG5kYXRhLnB1dChmcmVlemUoe3ZhbHVlLGRvbmU6dHJ1ZX0pKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG4vKlxuXG4gICAgICovXG50aHJvdyhlcnJvcil7XG5kYXRhLnB1dChoYXJkZW4oUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xucmV0dXJuIHN0cmVhbTtcbiB9fSk7XG5cbnJldHVybiBzdHJlYW07XG4gfTskaM2PX29uY2UubWFrZVN0cmVhbShtYWtlU3RyZWFtKTtcbmhhcmRlbihtYWtlU3RyZWFtKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VQaXBlPSgpPT57XG5jb25zdCBkYXRhPW1ha2VRdWV1ZSgpO1xuY29uc3QgYWNrcz1tYWtlUXVldWUoKTtcbmNvbnN0IHJlYWRlcj1tYWtlU3RyZWFtKGFja3MsZGF0YSk7XG5jb25zdCB3cml0ZXI9bWFrZVN0cmVhbShkYXRhLGFja3MpO1xucmV0dXJuIGhhcmRlbihbd3JpdGVyLHJlYWRlcl0pO1xuIH07JGjNj19vbmNlLm1ha2VQaXBlKG1ha2VQaXBlKTtcbmhhcmRlbihtYWtlUGlwZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHB1bXA9YXN5bmMod3JpdGVyLHJlYWRlcixwcmltZXIpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0aWNrPShwcm9taXNlKT0+XG5FLndoZW4oXG5wcm9taXNlLFxuKHJlc3VsdCk9PntcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiB3cml0ZXIucmV0dXJuKHJlc3VsdC52YWx1ZSk7XG4gfWVsc2V7XG4vL1xuLy9cbnJldHVybiB0b2NrKHdyaXRlci5uZXh0KHJlc3VsdC52YWx1ZSkpO1xuIH1cbiB9LFxuKC8qICAgICAgICAgICAgICAgICovZXJyb3IpPT57XG5yZXR1cm4gd3JpdGVyLnRocm93KGVycm9yKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0b2NrPShwcm9taXNlKT0+XG5FLndoZW4oXG5wcm9taXNlLFxuKHJlc3VsdCk9PntcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiByZWFkZXIucmV0dXJuKHJlc3VsdC52YWx1ZSk7XG4gfWVsc2V7XG5yZXR1cm4gdGljayhyZWFkZXIubmV4dChyZXN1bHQudmFsdWUpKTtcbiB9XG4gfSxcbigvKiAgICAgICAgICAgICAgICAqL2Vycm9yKT0+e1xucmV0dXJuIHJlYWRlci50aHJvdyhlcnJvcik7XG4gfSk7XG5cbmF3YWl0IHRpY2socmVhZGVyLm5leHQocHJpbWVyKSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLnB1bXAocHVtcCk7XG5oYXJkZW4ocHVtcCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJpbWU9KGdlbmVyYXRvcixwcmltZXIpPT57XG4vL1xuY29uc3QgZmlyc3Q9Z2VuZXJhdG9yLm5leHQocHJpbWVyKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5jb25zdCBwcmltZWQ9aGFyZGVuKHtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIG5leHQodmFsdWUpe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLm5leHQodmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgcmV0dXJuKHZhbHVlKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci5yZXR1cm4odmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHRocm93KGVycm9yKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xudGhyb3cgZXJyb3I7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IudGhyb3coZXJyb3IpO1xuIH19KTtcblxucmV0dXJuIHByaW1lZDtcbiB9OyRozY9fb25jZS5wcmltZShwcmltZSk7XG5oYXJkZW4ocHJpbWUpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFJlYWRlcj0ocmVhZGVyLHRyYW5zZm9ybSk9PntcbmFzeW5jIGZ1bmN0aW9uKnRyYW5zZm9ybUdlbmVyYXRvcigpe1xuZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIHJlYWRlcil7XG55aWVsZCB0cmFuc2Zvcm0odmFsdWUpO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcik7XG5yZXR1cm4gaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcigpKTtcbiB9OyRozY9fb25jZS5tYXBSZWFkZXIobWFwUmVhZGVyKTtcbmhhcmRlbihtYXBSZWFkZXIpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFdyaXRlcj0od3JpdGVyLHRyYW5zZm9ybSk9PntcbmNvbnN0IHRyYW5zZm9ybWVkV3JpdGVyPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyBuZXh0KHZhbHVlKXtcbnJldHVybiB3cml0ZXIubmV4dCh0cmFuc2Zvcm0odmFsdWUpKTtcbiB9LFxuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgdGhyb3coZXJyb3Ipe1xucmV0dXJuIHdyaXRlci50aHJvdyhlcnJvcik7XG4gfSxcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIHJldHVybih2YWx1ZSl7XG5yZXR1cm4gd3JpdGVyLnJldHVybih2YWx1ZSk7XG4gfSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiB0cmFuc2Zvcm1lZFdyaXRlcjtcbiB9fSk7XG5cbnJldHVybiB0cmFuc2Zvcm1lZFdyaXRlcjtcbiB9OyRozY9fb25jZS5tYXBXcml0ZXIobWFwV3JpdGVyKTtcbmhhcmRlbihtYXBXcml0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVF1ZXVlIjpbIm1ha2VRdWV1ZSJdLCJtYWtlU3RyZWFtIjpbIm1ha2VTdHJlYW0iXSwibWFrZVBpcGUiOlsibWFrZVBpcGUiXSwicHVtcCI6WyJwdW1wIl0sInByaW1lIjpbInByaW1lIl0sIm1hcFJlYWRlciI6WyJtYXBSZWFkZXIiXSwibWFwV3JpdGVyIjpbIm1hcFdyaXRlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABmVxEJwwEAAMMBAAAcAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvbWFpbi5qc3siaW1wb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vcmluZzAvbWFpbi5qc1wiLCBbXV0sW1wiLi9yaW5nMS9tYWluLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJBhzwNzAQAAcwEAAB8AAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9FLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIkBlbmRvL2ZhciJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOD1uR9vAgAAbwIAACwAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYXN5bmNHZW5lcmF0ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzeW5jR2VuZXJhdGU9KG5leHQpPT57XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbnJldHVybiBoYXJkZW4oe1xubmV4dDphc3luYygpPT5oYXJkZW4obmV4dCgpKX0pO1xuXG4gfX0pO1xuXG4gfTskaM2PX29uY2UuYXN5bmNHZW5lcmF0ZShhc3luY0dlbmVyYXRlKTtcbmhhcmRlbihhc3luY0dlbmVyYXRlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzeW5jR2VuZXJhdGUiOlsiYXN5bmNHZW5lcmF0ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD/fh925gEAAOYBAAAiAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc3siaW1wb3J0cyI6WyIuL0UuanMiLCIuL21ha2Vycy5qcyIsIi4vYXN5bmMtZ2VuZXJhdGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL0UuanMiLCIuL2FzeW5jLWdlbmVyYXRlLmpzIiwiLi9tYWtlcnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vRS5qc1wiLCBbXV0sW1wiLi9tYWtlcnMuanNcIiwgW11dLFtcIi4vYXN5bmMtZ2VuZXJhdGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAANxfQTswHAADMBwAAJAAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21ha2Vycy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZU1hcCIsIm1ha2VQcm9taXNlIiwibWFrZVNldCIsIm1ha2VXZWFrTWFwIiwibWFrZVdlYWtTZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVByb21pc2U9KGV4ZWN1dG9yKT0+aGFyZGVuKG5ldyBQcm9taXNlKGV4ZWN1dG9yKSk7JGjNj19vbmNlLm1ha2VQcm9taXNlKG1ha2VQcm9taXNlKTtcbmhhcmRlbihtYWtlUHJvbWlzZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlTWFwPShlbnRyaWVzT3JJdGVyYWJsZSk9PmhhcmRlbihuZXcgTWFwKGVudHJpZXNPckl0ZXJhYmxlKSk7JGjNj19vbmNlLm1ha2VNYXAobWFrZU1hcCk7XG5oYXJkZW4obWFrZU1hcCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVNldD0odmFsdWVzKT0+aGFyZGVuKG5ldyBTZXQodmFsdWVzKSk7JGjNj19vbmNlLm1ha2VTZXQobWFrZVNldCk7XG5oYXJkZW4obWFrZVNldCk7XG5cbi8qXG5cblxuXG4gKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha01hcD0oZW50cmllcyk9PmhhcmRlbihuZXcgV2Vha01hcChlbnRyaWVzKSk7JGjNj19vbmNlLm1ha2VXZWFrTWFwKG1ha2VXZWFrTWFwKTtcbmhhcmRlbihtYWtlV2Vha01hcCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrU2V0PSh2YWx1ZXMpPT5oYXJkZW4obmV3IFdlYWtTZXQodmFsdWVzKSk7JGjNj19vbmNlLm1ha2VXZWFrU2V0KG1ha2VXZWFrU2V0KTtcbmhhcmRlbihtYWtlV2Vha1NldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZSI6WyJtYWtlUHJvbWlzZSJdLCJtYWtlTWFwIjpbIm1ha2VNYXAiXSwibWFrZVNldCI6WyJtYWtlU2V0Il0sIm1ha2VXZWFrTWFwIjpbIm1ha2VXZWFrTWFwIl0sIm1ha2VXZWFrU2V0IjpbIm1ha2VXZWFrU2V0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIo2475JAwAASQMAACkAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9hc3luYy10b29scy5qc3siaW1wb3J0cyI6WyIuLi9yaW5nMC9tYWluLmpzIl0sImV4cG9ydHMiOlsiYXN5bmNEb1doaWxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VQcm9taXNlOyRozY9faW1wb3J0cyhbW1wiLi4vcmluZzAvbWFpbi5qc1wiLCBbW1wibWFrZVByb21pc2VcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2UgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3luY0RvV2hpbGU9KGJvZHkpPT57XG5yZXR1cm4gbWFrZVByb21pc2UoKHJlc29sdmUscmVqZWN0KT0+e1xuY29uc3QgbG9vcD1hc3luYygpPT57XG5jb25zdCBkb0NvbnRpbnVlPWF3YWl0IGJvZHkoKTtcbmlmKCFkb0NvbnRpbnVlKXtcbi8vXG5yZXNvbHZlKHVuZGVmaW5lZCk7XG5yZXR1cm47XG4gfVxuXG4vL1xuLy9cbmxvb3AoKS5jYXRjaChyZWplY3QpO1xuIH07XG5cbmxvb3AoKS5jYXRjaChyZWplY3QpO1xuIH0pO1xuIH07JGjNj19vbmNlLmFzeW5jRG9XaGlsZShhc3luY0RvV2hpbGUpO1xuaGFyZGVuKGFzeW5jRG9XaGlsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3luY0RvV2hpbGUiOlsiYXN5bmNEb1doaWxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAZvJkKIAQAAiAEAACIAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9tYWluLmpzeyJpbXBvcnRzIjpbIi4vYXN5bmMtdG9vbHMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2FzeW5jLXRvb2xzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2FzeW5jLXRvb2xzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKkVNC8wRAYAMEQGADQAAABrcmVhZC1jb250cmFjdC12MC4xLjAvc3JjL3Byb3Bvc2FsL2Jhc2UtaW52ZW50b3J5LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJiYXNlQ2hhcmFjdGVycyIsImJhc2VJdGVtcyIsIm1hcmtldHBsYWNlTGlzdGluZ3NDb21tb24iLCJtYXJrZXRwbGFjZUxpc3RpbmdzTGVnZW5kYXJ5IiwibWFya2V0cGxhY2VMaXN0aW5nc1JhcmUiLCJtYXJrZXRwbGFjZUxpc3RpbmdzVW5jb21tb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIGNvbnN0ICAgICAgICBiYXNlQ2hhcmFjdGVycz1bXG5bXG4xLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAwMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NjQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDAxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMDIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAwMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDA0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDA1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDA2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMDcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDozOSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMDgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMDkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDEwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDExLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDEyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDEzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAxNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAxNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDE2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAxNy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xOSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo2NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMTgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDozMCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDIwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAyMS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAyMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMjMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjQ3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAyNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo3MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMjYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMjcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDI4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjI5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAyOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjMzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAzMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMzEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo1MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMzIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzQsXG57XG50aXRsZTonRWxpdGUnLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgRWxpdGUgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjc5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAzMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMzQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMzUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAzNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zOCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAzNy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zOSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzAzOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDozMCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wMzkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDQwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjMxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA0MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDQyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA0My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA0NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDozOSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wNDUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wNDYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDQ3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDQ4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjQzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA0OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA1MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo0MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wNTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NDIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDUyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjY3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA1My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6MzksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDU0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDU1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NjksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDU2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjQwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA1Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wNTgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjc0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA1OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDYwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA2MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA2Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjY3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA2My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA2NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA2NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjUzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA2Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42OCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDY3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjM2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA2OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo0NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wNjkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDcwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDcxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjczLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA3Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA3My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA3NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA3NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozOCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wNzYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDc3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDc4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDc5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDgwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NTksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDgxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjYxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA4Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44NCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wODMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo3MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wODQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NjIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDg1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjQ2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA4Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDg3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA4OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozOCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wODkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wOTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wOTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wOTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wOTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDk0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA5NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzA5Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6MzgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDk3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMDk4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEwMCxcbntcbnRpdGxlOidDaXRpemVuJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQ2l0aXplbiBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDoxNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8wOTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTAxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEwMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMDIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTAxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEwMyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEwMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMDQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMDMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTA1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDozMSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMDQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTA2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMDUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTA3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTA2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEwOCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTA3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEwOSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMDgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTEwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEwOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMTEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTEyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTExLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjExMyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTE0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTE1LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTE0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjExNixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzExNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMTcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMTYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTE4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTE3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjExOSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzExOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMjAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTE5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEyMSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjcyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEyMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMjIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTIxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEyMyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjM5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEyMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMjQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjQ2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEyMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMjUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6MzcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTI0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEyNixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTI3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTI2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEyOCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo1OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMjcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTI5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTI4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEzMCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEyOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMzEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTMwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEzMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDozOSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMzEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTMzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjUxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEzMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMzQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEzMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMzUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTM0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEzNixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEzNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xMzcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMzYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTM4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTM3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjEzOSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xMzgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTQwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjI5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzEzOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNDEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNDAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTQyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE0MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNDMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTQyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE0NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjU2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE0My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNDUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNDQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTQ2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTQ1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE0NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNDYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTQ4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjQwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE0Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNDksXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTQ4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE1MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNDkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTUxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTUyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NTksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTUxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE1MyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE1Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNTQsXG57XG50aXRsZTonQ2l0aXplbicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBDaXRpemVuIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDoxOSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTU1LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTU0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE1NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE1NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNTcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNTYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTU4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NTUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTU3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE1OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTU4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE2MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTYxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjMwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE2MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNjIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNjEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTYzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo2OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNjIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTY0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNjMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTY1LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTY0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE2NixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTY3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo0MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNjYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTY4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE2Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNjksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTY4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE3MCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE2OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNzEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xNzAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTcyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTcxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE3MyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE3Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNzQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTczLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE3NSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NjAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTc0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE3NixcbntcbnRpdGxlOidFbGl0ZScsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBFbGl0ZSBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NzYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTc1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE3NyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6MjYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTc2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE3OCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjY1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE3Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xNzksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTc4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE4MCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE3OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xODEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xODAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTgyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTgxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE4MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xODIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTg0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjI4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE4My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xODUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTg0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE4NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTg1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE4NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjY3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE4Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xODgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xODcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTg5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjQ3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE4OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xOTAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTg5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE5MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTkwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE5MixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NDEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTkxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE5MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xOTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTk0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE5My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xOTUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NTIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTk0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE5NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8xOTUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMTk3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE5Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4xOTgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MjcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTk3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjE5OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzE5OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMDAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMTk5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIwMSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjYzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIwMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMDIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NTQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjAxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIwMyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo0MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMDIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjA0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjYzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIwMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMDUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6MzIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjA0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIwNixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMDUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjA3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIwNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMDgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjA3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIwOSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIwOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMTAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMDkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjExLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo1NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjEyLFxue1xudGl0bGU6J0VsaXRlJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjonQSBFbGl0ZSBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NzUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjExLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIxMyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIxMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMTQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDoyNixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjE1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIxNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMTYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjE1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIxNyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMTYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjE4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NTIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjE3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIxOSxcbntcbnRpdGxlOidDaXRpemVuJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIENpdGl6ZW4gZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjE5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIxOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMjAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjE5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIyMSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMjAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjIyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIyMS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMjMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjI4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIyMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMjQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjIzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIyNSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjI0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIyNixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIyNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMjcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjI2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIyOCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo2OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMjcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjI5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIyOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMzAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMjkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjMxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjMwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIzMixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIzMS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMzMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDoyOCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMzIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjM0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIzMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMzUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMzQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjM2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6MzcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjM1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjIzNyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIzNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yMzgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yMzcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjM5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzIzOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNDAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjM5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI0MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQ3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI0MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNDIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNDEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjQzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjI4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI0Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNDQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjQzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI0NSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozMixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNDQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjQ2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI0NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNDcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNDYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjQ4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI0Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNDksXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNDgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjUwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjMxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI0OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNTEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjUyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjUzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI1Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNTQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjUzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI1NSxcbntcbnRpdGxlOidFbGl0ZScsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIEVsaXRlIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NzUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjU0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI1NixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo0NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNTUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjU3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI1Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNTgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjU3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI1OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI1OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNjAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjYxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI2MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNjIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNjEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjYzLFxue1xudGl0bGU6J0NpdGl6ZW4nLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQ2l0aXplbiBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDoyMixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNjIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjY0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI2My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNjUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjY0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI2NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo2MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjY3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI2Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNjgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjY3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI2OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI2OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNzAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjY5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI3MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo1OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNzAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjcyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjcxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI3MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo0OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNzIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjc0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo2NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yNzMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjc1LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NTgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjc0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI3NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI3NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNzcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjc2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI3OCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI3Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yNzksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjc4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI4MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NDAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjc5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI4MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI4MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yODIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NDAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjgxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI4MyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI4Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yODQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjM2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI4My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yODUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yODQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjg2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI4NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yODcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo0NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yODYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjg4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjc0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI4Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yODksXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yODgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjkwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjg5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI5MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjY1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI5MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yOTIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yOTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMjkzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI5Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yOTQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjkzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI5NSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NDYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjk0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI5NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI5NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4yOTcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NTUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjk2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI5OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6MzAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMjk3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjI5OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8yOTgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzAwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjMyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzI5OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMDEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6MzgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzAwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMwMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMDEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzAzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMwMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMDQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMwMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMDUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMDQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzA2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjcwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMwNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMDcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6MzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzA2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMwOCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMwNy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMDksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzA4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMxMCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMwOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMTEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzEwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMxMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzEzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo0NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzE0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMxMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMTUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzE0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMxNixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo1OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMTUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzE3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjUxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMxNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMTgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzE3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMxOSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMxOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMjAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzIxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzIwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMyMixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMjEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzIzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo2MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMjIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzI0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjQwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMyMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMjUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMjQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzI2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMyNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMjcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzI2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMyOCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDoyNixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMjcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzI5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMyOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMzAsXG57XG50aXRsZTonQ2l0aXplbicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBDaXRpemVuIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDoyMixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMjkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzMxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzMwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMzMixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMzMS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMzMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzMyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjMzNCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMzMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzM1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMzNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMzYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjM3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMzNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMzcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo0MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMzYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzM4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMzNy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zMzksXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo1OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zMzgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzQwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzMzOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNDEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzQwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM0MixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNDEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzQzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM0Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNDQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNDMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzQ1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM0NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNDYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNDUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzQ3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzQ2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM0OCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM0Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNDksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo0NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNDgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzUwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjM5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM0OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNTEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDozNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzUyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo0NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzUzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzUyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM1NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM1My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNTUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzU0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM1NixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNTUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzU3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM1Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNTgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjY1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM1Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNTksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6MzYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzU4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM2MCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo2MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzYxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjM3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM2MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNjIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNjEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzYzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NDMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzYyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM2NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo1NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNjMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzY1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM2NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNjYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzY1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM2NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNjYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzY4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzY3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM2OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM2OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNzAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNjkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzcxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzcwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM3MixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM3MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNzMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjM5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM3Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNzQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM3My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zNzUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzc0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM3NixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNzUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzc3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzc2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM3OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozOSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNzcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzc5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM3OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zODAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDozOCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zNzkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzgxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo0NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zODAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzgyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zODEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzgzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzgyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM4NCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo0OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zODMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzg1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zODQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzg2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzg1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM4NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM4Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zODgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6MzUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzg3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM4OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo2NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zODgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzkwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM4OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zOTEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzkwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM5MixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM5MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zOTMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzkyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM5NCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zOTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzk1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM5NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG4zOTYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzk1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM5NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NjQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzk2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjM5OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy8zOTcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuMzk5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzM5OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MDAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvMzk5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQwMSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDAwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQwMixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDAxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQwMyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDAyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQwNCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MDMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDA1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6MzAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDA0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQwNixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQwNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MDcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjYwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQwNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MDgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MDcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDA5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQwOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MTAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MDkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDExLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDEwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQxMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDEzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjI1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQxMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MTQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDEzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQxNSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MTQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDE2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQxNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MTcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDE2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQxOCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MTcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDE5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQxOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MjAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDIxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NjcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDIwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQyMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDIxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQyMyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MjIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDI0LFxue1xudGl0bGU6J0VsaXRlJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEVsaXRlIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NzksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDIzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQyNSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MjQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDI2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDozMSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDI3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQyNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MjgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDI3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQyOSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80Mjgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDMwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjMxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQyOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MzEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDMwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQzMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6MzUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDMxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQzMyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MzIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDM0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDMzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQzNSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDM0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQzNixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80MzUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDM3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDM2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQzOCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQzNy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40MzksXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NjUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDM4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ0MCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjUzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQzOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NDEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NTgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDQwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ0MixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjY5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ0MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NDMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDQyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ0NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ0My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NDUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDQ0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ0NixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80NDUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDQ3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDQ2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ0OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDQ3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ0OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NjEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDQ4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ1MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDQ5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ1MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80NTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDUyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjMzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ1MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NTMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo1OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80NTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDU0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDozMCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80NTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDU1LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo2NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80NTQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDU2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ1NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NTcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDU2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ1OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MjksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDU3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ1OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80NTgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDYwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo2NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80NTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDYxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ2MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NjIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDYxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ2MyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjUyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ2Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NjQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDYzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ2NSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ2NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NjYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80NjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDY3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDY2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ2OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDY3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ2OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80Njgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDcwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDY5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ3MSxcbntcbnRpdGxlOidFbGl0ZScsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIEVsaXRlIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NzUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDcwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ3MixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo1OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80NzEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDczLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDcyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ3NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80NzMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDc1LFxue1xudGl0bGU6J0NpdGl6ZW4nLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQ2l0aXplbiBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDc0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ3NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ3NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40NzcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MjgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDc2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ3OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80Nzcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDc5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NjIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDc4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ4MCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjY3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ3OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40ODEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDgwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ4MixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ4MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40ODMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDgyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ4NCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80ODMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDg1LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ4NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40ODYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80ODUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDg3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjY3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ4Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40ODgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NjAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDg3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ4OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDoyNixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80ODgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDkwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDg5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ5MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ5MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40OTIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDkxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ5MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozOCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80OTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDk0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NTksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDkzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjQ5NSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy80OTQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNDk2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjM3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ5NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40OTcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjI4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ5Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40OTgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ5Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG40OTksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjI4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzQ5OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MDAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNDk5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUwMSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTAwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUwMixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo2MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MDEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTAzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MDIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTA0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUwMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MDUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo1OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MDQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTA2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MDUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTA3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo0NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MDYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTA4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDozNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MDcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTA5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUwOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MTAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUwOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MTEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjQ3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUxMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MTIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTExLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUxMyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTE0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTE1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NDYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTE0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUxNixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUxNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MTcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUxNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MTgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTE3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUxOSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MTgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTIwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUxOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MjEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo3MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MjAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTIyLFxue1xudGl0bGU6J0NpdGl6ZW4nLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQ2l0aXplbiBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTIxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUyMyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MjIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTI0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTIzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUyNSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQ3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUyNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MjYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjQwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUyNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MjcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTI2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUyOCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NjIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTI3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUyOSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81Mjgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTMwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUyOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MzEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo2OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MzAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTMyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjQ3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUzMS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MzMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MzIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTM0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MzMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTM1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUzNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MzYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTM1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjUzNyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo1MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81MzYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTM4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjUyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUzNy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41MzksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTM4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU0MCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzUzOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NDEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NDAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTQyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjU2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU0MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NDMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NzIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTQyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU0NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjY4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU0My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NDUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo0NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NDQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTQ2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NTUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTQ1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU0NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU0Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NDgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NDYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTQ3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU0OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NDgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTUwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU0OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NTEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTUwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU1MixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6MzYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTUxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU1MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozOSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTU0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NjQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTUzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU1NSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NTQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTU2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjUzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU1NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NTcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTU2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU1OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NTcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTU5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU1OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NjAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTU5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU2MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTYwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU2MixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU2MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NjMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDozOSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NjIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTY0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU2My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NjUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTY0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU2NixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTY3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU2Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NjgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo1NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81Njcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTY5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjU2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU2OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NzAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjYwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU2OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NzEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU3MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NzIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NzEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTczLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo0NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NzIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTc0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NzMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTc1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81NzQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTc2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTc1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU3NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjY2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU3Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41NzgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81Nzcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTc5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU3OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41ODAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTc5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU4MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU4MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41ODIsXG57XG50aXRsZTonQ2l0aXplbicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBDaXRpemVuIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDoyMyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81ODEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTgzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjUzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU4Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41ODQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81ODMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTg1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDozNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81ODQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTg2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTg1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU4NyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81ODYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTg4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjM5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU4Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41ODksXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTg4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU5MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6MjcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTg5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU5MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81OTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTkyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81OTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTkzLFxue1xudGl0bGU6J0NpdGl6ZW4nLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQ2l0aXplbiBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjIxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU5Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41OTQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81OTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTk1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy81OTQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNTk2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU5NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG41OTcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MjgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTk2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU5OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNTk3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjU5OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU5OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MDAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjQzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzU5OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MDEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NDYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjAwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYwMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjAxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYwMyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82MDIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjA0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NjAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjAzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYwNSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MjgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjA0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYwNixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYwNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MDcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYwNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MDgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjA3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYwOSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82MDgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjEwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjcyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYwOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MTEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6MzcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjEwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYxMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYxMS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MTMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6MzUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjEyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYxNCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82MTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjE1LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYxNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MTYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjE1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYxNyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjYxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYxNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MTgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NDMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjE3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYxOSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82MTgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjIwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYxOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MjEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjMzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYyMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MjIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjIxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYyMyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYyMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MjQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjIzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYyNSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYyNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MjYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82MjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjI3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYyNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MjgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82Mjcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjI5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NjEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjI4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYzMCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82Mjkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjMxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo0OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82MzAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjMyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjMxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYzMS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MzMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjQ2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYzMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MzQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjMzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjYzNSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjY2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYzNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MzYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82MzUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjM3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYzNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42MzgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo1OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82Mzcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjM5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo0OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82Mzgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjQwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjYwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzYzOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NDEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjQwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY0MixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo2MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NDEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjQzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjQyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY0NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjQzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY0NSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY0NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NDYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NDUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjQ3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo0MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NDYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjQ4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY0Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NDksXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjQ4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY1MCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY0OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NTEsXG57XG50aXRsZTonRWxpdGUnLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgRWxpdGUgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6ODIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjUwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY1MixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjUxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY1MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjU0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjUzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY1NSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY1NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NTYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NTUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjU3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY1Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NTgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NTQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjU3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY1OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY1OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NjAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NTksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjU5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY2MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NjAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjYyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY2MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NjMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjYyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY2NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo2NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NjMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjY1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY2NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NjYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjY3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjY2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY2OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82Njcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjY5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY2OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NzAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82Njkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjcxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY3MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NzIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NzEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjczLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjM5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY3Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NzQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NzMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjc1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDozOCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82NzQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjc2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjM1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY3NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NzcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjMwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY3Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42NzgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjc3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY3OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjczLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY3OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42ODAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjc5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY4MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82ODAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjgyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82ODEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjgzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY4Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42ODQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NjIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjgzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY4NSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo1OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82ODQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjg2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjg1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY4NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY4Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42ODgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjg3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY4OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjM3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY4OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42OTAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82ODkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjkxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY5MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42OTIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82OTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjkzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY5Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42OTQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82OTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNjk1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6MzUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjk0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY5NixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjk1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY5NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzY5Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG42OTgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjk3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjY5OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNjk4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcwMCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy82OTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzAxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzAwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcwMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MDEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzAzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzAyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcwNCxcbntcbnRpdGxlOidDaXRpemVuJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQ2l0aXplbiBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDoyMSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MDMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzA1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzcwNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43MDYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzA1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcwNyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzA2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcwOCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MDcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzA5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo0NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MDgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzEwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzcwOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43MTEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NjQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzEwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcxMixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjY0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzcxMS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43MTMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzE0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzEzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcxNSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozMSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MTQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzE2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzE1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcxNyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozOCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MTYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzE4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo0OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MTcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzE5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo0NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MTgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzIwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzcxOS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43MjEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzIwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcyMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo0MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MjEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzIzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzIyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcyNCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzIzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcyNSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzcyNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43MjYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzI1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjcyNyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MjYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzI4LFxue1xudGl0bGU6J0VsaXRlJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgRWxpdGUgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo3OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83Mjcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzI5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzcyOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43MzAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83Mjkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzMxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDozOSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MzAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzMyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzMxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjczMyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzczMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43MzQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MzMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzM1LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzM0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjczNixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83MzUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzM3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzM2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjczOCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDozMyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83Mzcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzM5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzczOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NDAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NzIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzM5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc0MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjYxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc0MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NDIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzQxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc0MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6MzcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzQyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc0NCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozOCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NDMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzQ1LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzQ0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc0NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzQ1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc0NyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NDYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzQ4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzQ3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc0OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc0OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NTAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDoyNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NDkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzUxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjMyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc1MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NTIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzUzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjUzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc1Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NTQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzU1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc1NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NTYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NTUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzU3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc1Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NTgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzU3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc1OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRmFybWEuIFRoZSBtb3N0IGVmZmljaWVudCBjaXR5IGluIGFncmljdWx0dXJlLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NTgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzYwLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc1OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NjEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzYwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc2MixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc2MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NjMsXG57XG50aXRsZTonQ2l0aXplbicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBDaXRpemVuIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDoyMCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NjIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzY0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo2MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NjMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzY1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjI5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc2NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NjYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzY3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjMzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc2Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NjgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzY3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc2OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc2OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NzAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6MjgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzY5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc3MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo3MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NzAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzcyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzcxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc3MyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjY0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc3Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NzQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83NzMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzc1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjMzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc3NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NzYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc3NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NzcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NDIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzc2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc3OCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc3Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43NzksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc3OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43ODAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzc5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc4MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc4MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43ODIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NTUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzgxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc4MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozOCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83ODIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzg0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc4My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43ODUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzg0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc4NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc4NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43ODcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NDMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzg2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc4OCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc4Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43ODksXG57XG50aXRsZTonQ2l0aXplbicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIENpdGl6ZW4gZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDoyMyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83ODgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzkwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzg5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc5MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83OTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzkyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjMyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc5MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43OTMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzkyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc5NCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzkzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc5NSxcbntcbnRpdGxlOidDaXRpemVuJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQ2l0aXplbiBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjE3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc5NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG43OTYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NTgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzk1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc5NyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy83OTYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuNzk4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzk3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjc5OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvNzk4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgwMCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzc5OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MDEsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODAwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgwMixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODAxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgwMyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjUyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgwMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MDQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODAzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgwNSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgwNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MDYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84MDUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODA3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NzEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODA2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgwOCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6MzUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODA3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgwOSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NjgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODA4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgxMCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozMSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84MDkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODExLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODEwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgxMixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjUxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgxMS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MTMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODEyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgxNCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODEzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgxNSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozMCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84MTQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODE2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDozMCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84MTUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODE3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo0MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84MTYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODE4LFxue1xudGl0bGU6J0NpdGl6ZW4nLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQ2l0aXplbiBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjIyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgxNy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MTksXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjYyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgxOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MjAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84MTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODIxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODIwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgyMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODIxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgyMyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NDQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODIyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgyNCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgyMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MjUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84MjQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODI2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODI1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgyNyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgyNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MjgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo2MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84Mjcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODI5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjU5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgyOC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MzAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84Mjkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODMxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgzMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MzIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODMxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgzMyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84MzIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODM0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgzMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MzUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6MzcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODM0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjgzNixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzgzNS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44MzcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84MzYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODM4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84Mzcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODM5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDoyOSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84Mzgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODQwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODM5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg0MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NDAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODQyLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjQwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg0MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44NDMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NDIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODQ0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODQzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg0NSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NDQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODQ2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg0NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44NDcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NDYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODQ4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NjYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODQ3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg0OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDoyNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NDgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODUwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjU1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg0OS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44NTEsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0Zhcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEZhcm1hLiBUaGUgbW9zdCBlZmZpY2llbnQgY2l0eSBpbiBhZ3JpY3VsdHVyZS4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODUwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg1MixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODUxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg1MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NTIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODU0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODUzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg1NSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDoyNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NTQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODU2LFxue1xudGl0bGU6J0NpdGl6ZW4nLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBDaXRpemVuIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6MTMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODU1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg1NyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo0MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NTYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODU4LFxue1xudGl0bGU6J0VsaXRlJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEVsaXRlIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo3OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NTcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODU5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODU4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg2MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODYxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NDAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODYwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg2MixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo3MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NjEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODYzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg2Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44NjQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg2My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44NjUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg2NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44NjYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6MjksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODY1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg2NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg2Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44NjgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84Njcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODY5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODY4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg3MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDozNixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84Njkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODcxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODcwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg3MixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo1NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NzEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODczLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDoyNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NzIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODc0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODczLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg3NSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozMSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84NzQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODc2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODc1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg3NyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODc2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg3OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84Nzcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODc5LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg3OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44ODAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODc5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg4MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84ODAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODgyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODgxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg4MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg4Mi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44ODQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84ODMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODg1LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo2MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84ODQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODg2LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg4NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44ODcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84ODYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODg4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODg3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg4OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg4OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44OTAsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84ODkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODkxLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODkwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg5MixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBUZW1wZXQuIFRoZSBjaXR5IG1vc3Qga25vd24gZm9yIGl0cyBkZWVwIGNvbm5lY3Rpb24gdG8gbmF0dXJlLicsXG5sZXZlbDozOSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84OTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODkzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODkyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg5NCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84OTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODk1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg5NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44OTYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84OTUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuODk3LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODk2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjg5OCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzg5Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG44OTksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvODk4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkwMCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo2MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy84OTkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTAxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NDMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTAwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkwMixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozMyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MDEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTAzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTAyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkwNCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkwMy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MDUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MDQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTA2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTA1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkwNyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NDYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTA2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkwOCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MDcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTA5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTA4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkxMCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTA5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkxMSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkxMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MTIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MTEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTEzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkxMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MTQsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MzYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTEzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkxNSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkxNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MTYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MTUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTE3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDozNCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MTYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTE4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo2MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MTcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTE5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo2NCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MTgud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTIwLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NjcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTE5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkyMSxcbntcbnRpdGxlOidDaXRpemVuJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIENpdGl6ZW4gZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjI0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkyMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MjIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MjEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTIzLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjM4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkyMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MjQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTIzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkyNSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkyNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MjYsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MjUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTI3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6MzYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTI2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkyOCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjU2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkyNy53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MjksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6MzAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTI4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkzMCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6MzIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTI5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkzMSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkzMC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MzIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo3MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MzEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTMzLFxue1xudGl0bGU6J0NpdGl6ZW4nLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBDaXRpemVuIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjI0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkzMi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MzQsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2MyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85MzMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTM1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjI3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkzNC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MzYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonQXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NDcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTM1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjkzNyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjY4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzkzNi53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45MzgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo1NyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85Mzcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTM5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTM4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk0MCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTcsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTM5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk0MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjUyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk0MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NDIsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NTMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTQxLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk0MyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85NDIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTQ0LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTksXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTQzLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk0NSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85NDQud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTQ2LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIEFybWEuIFJ1bGVycyBvZiB0aGUgZW50ZXJ0YWlubWVudCBpbmR1c3RyeS4nLFxubGV2ZWw6NjMsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTQ1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk0NyxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTQ2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk0OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidBcm1hJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gQXJtYS4gUnVsZXJzIG9mIHRoZSBlbnRlcnRhaW5tZW50IGluZHVzdHJ5LicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85NDcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTQ5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NjAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTQ4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk1MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidFbGVwaGlhJyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NDEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTQ5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk1MSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85NTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTUyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjUyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk1MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NTMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTUyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk1NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo1OCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85NTMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTU1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk1NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NTYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjQ5LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk1NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NTcsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRmFybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjQzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk1Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NTgsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjQyLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk1Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NTksXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDAsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTU4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk2MCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTU5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk2MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTYwLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk2MixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozMSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85NjEud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTYzLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTYyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk2NCxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo1NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85NjMud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTY1LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6MzYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTY0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk2NixcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQxLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk2NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NjcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjU3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk2Ni53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NjgsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1OSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85Njcud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTY5LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidUZW1wZXQnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gVGVtcGV0LiBUaGUgY2l0eSBtb3N0IGtub3duIGZvciBpdHMgZGVlcCBjb25uZWN0aW9uIHRvIG5hdHVyZS4nLFxubGV2ZWw6NTgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTY4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk3MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDozNyxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85Njkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTcxLFxue1xudGl0bGU6J0NpdGl6ZW4nLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIENpdGl6ZW4gZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjI0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk3MC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NzIsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjQ4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk3MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NzMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo2MCxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85NzIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTc0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0FybWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBBcm1hLiBSdWxlcnMgb2YgdGhlIGVudGVydGFpbm1lbnQgaW5kdXN0cnkuJyxcbmxldmVsOjQ3LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk3My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45NzUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NTEsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTc0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk3NixcbntcbnRpdGxlOidFbGl0ZScsXG5vcmlnaW46J1dlc3QnLFxuZGVzY3JpcHRpb246XG4nQSBFbGl0ZSBmcm9tIFdlc3QuIFdlc3QgbGllcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGluZHVzdHJ5LicsXG5sZXZlbDo3NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85NzUud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTc3LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDoyNSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85NzYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTc4LFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NTIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTc3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk3OSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonVGVtcGV0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgQm91bnR5IEh1bnRlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjU0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk3OC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45ODAsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6MjYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTc5LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk4MSxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonTW91bnQnLFxuZGVzY3JpcHRpb246J0EgQm91bnR5IEh1bnRlciBmcm9tIE1vdW50LiBUaGUgY2l0eSBhbW9uZyB0aGUgbW91bnRhaW5zLicsXG5sZXZlbDo3MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85ODAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTgyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidGYXJtYScsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBGYXJtYS4gVGhlIG1vc3QgZWZmaWNpZW50IGNpdHkgaW4gYWdyaWN1bHR1cmUuJyxcbmxldmVsOjcwLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk4MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45ODMsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1MixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85ODIud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTg0LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1RlbXBldCcsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIFRlbXBldC4gVGhlIGNpdHkgbW9zdCBrbm93biBmb3IgaXRzIGRlZXAgY29ubmVjdGlvbiB0byBuYXR1cmUuJyxcbmxldmVsOjMzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk4My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45ODUsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonRWxlcGhpYScsXG5kZXNjcmlwdGlvbjpcbidBIFNjYXZlbmdlciBmcm9tIEVsZXBoaWEuIFRoZSBjaXR5IHRoYXQgaGFzIG1hc3RlcmVkIHdhdGVyIHRlY2hub2xvZ3kuJyxcbmxldmVsOjQ0LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk4NC53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45ODYsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDUsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTg1LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk4NyxcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2VzdCcsXG5kZXNjcmlwdGlvbjpcbidBIEJvdW50eSBIdW50ZXIgZnJvbSBXZXN0LiBXZXN0IGxpZXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFudWZhY3R1cmluZyBpbmR1c3RyeS4nLFxubGV2ZWw6NjQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTg2LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk4OCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzQsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTg3LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk4OSxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6MzIsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTg4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk5MCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXaWxkbGFuZHMnLFxuZGVzY3JpcHRpb246J0EgU2NhdmVuZ2VyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo0MSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85ODkud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTkxLFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBTY2F2ZW5nZXIgZnJvbSBFbGVwaGlhLiBUaGUgY2l0eSB0aGF0IGhhcyBtYXN0ZXJlZCB3YXRlciB0ZWNobm9sb2d5LicsXG5sZXZlbDo0NixcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85OTAud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTkyLFxue1xudGl0bGU6J0JvdW50eSBIdW50ZXInLFxub3JpZ2luOidNb3VudCcsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gTW91bnQuIFRoZSBjaXR5IGFtb25nIHRoZSBtb3VudGFpbnMuJyxcbmxldmVsOjY4LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk5MS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45OTMsXG57XG50aXRsZTonU2NhdmVuZ2VyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIFNjYXZlbmdlciBmcm9tIFdpbGRsYW5kcy4nLFxubGV2ZWw6NDgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTkyLndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk5NCxcbntcbnRpdGxlOidTY2F2ZW5nZXInLFxub3JpZ2luOidXZXN0JyxcbmRlc2NyaXB0aW9uOlxuJ0EgU2NhdmVuZ2VyIGZyb20gV2VzdC4gV2VzdCBsaWVzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgaW5kdXN0cnkuJyxcbmxldmVsOjQ1LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk5My53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45OTUsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J01vdW50JyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBNb3VudC4gVGhlIGNpdHkgYW1vbmcgdGhlIG1vdW50YWlucy4nLFxubGV2ZWw6NTYsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTk0LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dLFxuXG5cbltcbjk5NixcbntcbnRpdGxlOidCb3VudHkgSHVudGVyJyxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmRlc2NyaXB0aW9uOidBIEJvdW50eSBIdW50ZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjYzLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk5NS53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45OTcsXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBCb3VudHkgSHVudGVyIGZyb20gV2lsZGxhbmRzLicsXG5sZXZlbDo1NSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL2ltYWdlcy85OTYud2VicCcsXG5jaGFyYWN0ZXJUcmFpdHM6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9DaXRpemVuL21ldGFkYXRhLmpzb24nfV0sXG5cblxuW1xuOTk4LFxue1xudGl0bGU6J1NjYXZlbmdlcicsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5kZXNjcmlwdGlvbjonQSBTY2F2ZW5nZXIgZnJvbSBXaWxkbGFuZHMuJyxcbmxldmVsOjQ2LFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6LycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vaW1hZ2VzLzk5Ny53ZWJwJyxcbmNoYXJhY3RlclRyYWl0czpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0NpdGl6ZW4vbWV0YWRhdGEuanNvbid9XSxcblxuXG5bXG45OTksXG57XG50aXRsZTonQm91bnR5IEh1bnRlcicsXG5vcmlnaW46J0VsZXBoaWEnLFxuZGVzY3JpcHRpb246XG4nQSBCb3VudHkgSHVudGVyIGZyb20gRWxlcGhpYS4gVGhlIGNpdHkgdGhhdCBoYXMgbWFzdGVyZWQgd2F0ZXIgdGVjaG5vbG9neS4nLFxubGV2ZWw6NjgsXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9pbWFnZXMvOTk4LndlYnAnLFxuY2hhcmFjdGVyVHJhaXRzOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvQ2l0aXplbi9tZXRhZGF0YS5qc29uJ31dXTskaM2PX29uY2UuYmFzZUNoYXJhY3RlcnMoYmFzZUNoYXJhY3RlcnMpO1xuXG5cblxuXG5jb25zdCAgICAgICAgYmFzZUl0ZW1zPVtcbntcbm5hbWU6J0FybWEgMScsXG5jYXRlZ29yeTonbWFzaycsXG5kZXNjcmlwdGlvbjpcbidDb21tb24gbWFzayBmcm9tIEFybWEuIEEgZmFjaWFsIGNvdmVyaW5nIHdpdGggdmFyaW91cyB1c2VzLCBmcm9tIHByb3RlY3Rpb24gdG8gZGlzZ3Vpc2UuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonQXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9NYXNrL0FybWElMjAxLCUyMDEyLCUyMHdoaXRlLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL01hc2svQXJtYSUyMDEsJTIwMTIsJTIwd2hpdGVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjE2LFxuZmlsdGVyaW5nOjMsXG53ZWlnaHQ6NCxcbnNlbnNlOjUsXG5yZXNlcnZlczoyLFxuZHVyYWJpbGl0eToyLFxubGV2ZWw6MTYsXG5jb2xvcnM6WycjZmZmZmZmJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbntcbm5hbWU6J0VsZXBoaWEgMScsXG5jYXRlZ29yeTonbWFzaycsXG5kZXNjcmlwdGlvbjpcbidDb21tb24gbWFzayBmcm9tIEVsZXBoaWEuIEEgZmFjaWFsIGNvdmVyaW5nIHdpdGggdmFyaW91cyB1c2VzLCBmcm9tIHByb3RlY3Rpb24gdG8gZGlzZ3Vpc2UuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonRWxlcGhpYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9NYXNrL0VsZXBoaWElMjAxLCUyMDEwLCUyMGdyYXkud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvTWFzay9FbGVwaGlhJTIwMSwlMjAxMCwlMjBncmF5X3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eToxOSxcbmZpbHRlcmluZzo0LFxud2VpZ2h0OjMsXG5zZW5zZTo3LFxucmVzZXJ2ZXM6NCxcbmR1cmFiaWxpdHk6MSxcbmxldmVsOjE5LFxuY29sb3JzOlsnIzgwODA4MCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG57XG5uYW1lOidGb3JyZXN0JyxcbmNhdGVnb3J5OidiYWNrZ3JvdW5kJyxcbmRlc2NyaXB0aW9uOlxuJ1VuY29tbW9uIGJhY2tncm91bmQgZnJvbSBGYXJtYS4gTGlrZSBhbiB1bnNwb2tlbiBsYW5ndWFnZSwgaXQgY29tbXVuaWNhdGVzIGVtb3Rpb24sIGRpcmVjdHMgYXR0ZW50aW9uLCBhbmQgaW5mbHVlbmNlcyBwZXJjZXB0aW9uLicsXG5mdW5jdGlvbmFsOmZhbHNlLFxub3JpZ2luOidGYXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9CYWNrZ3JvdW5kL0ZvcnJlc3Qud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvQmFja2dyb3VuZC9Gb3JyZXN0X3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eToyMCxcbmZpbHRlcmluZzowLFxud2VpZ2h0OjAsXG5zZW5zZTowLFxucmVzZXJ2ZXM6MCxcbmR1cmFiaWxpdHk6MCxcbmxldmVsOjIwLFxuY29sb3JzOlsnIzAwODAwMCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG57XG5uYW1lOidTcGVhcm1pbnQnLFxuY2F0ZWdvcnk6J2JhY2tncm91bmQnLFxuZGVzY3JpcHRpb246XG4nQ29tbW9uIGJhY2tncm91bmQgZnJvbSBGYXJtYS4gTGlrZSBhbiB1bnNwb2tlbiBsYW5ndWFnZSwgaXQgY29tbXVuaWNhdGVzIGVtb3Rpb24sIGRpcmVjdHMgYXR0ZW50aW9uLCBhbmQgaW5mbHVlbmNlcyBwZXJjZXB0aW9uLicsXG5mdW5jdGlvbmFsOmZhbHNlLFxub3JpZ2luOidGYXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9CYWNrZ3JvdW5kL1NwZWFybWludC53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9CYWNrZ3JvdW5kL1NwZWFybWludF90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6MTQsXG5maWx0ZXJpbmc6MCxcbndlaWdodDowLFxuc2Vuc2U6MCxcbnJlc2VydmVzOjAsXG5kdXJhYmlsaXR5OjAsXG5sZXZlbDoxNCxcbmNvbG9yczpbJyMwMDgwMDAnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxue1xubmFtZTonV2ludGVybWludCcsXG5jYXRlZ29yeTonYmFja2dyb3VuZCcsXG5kZXNjcmlwdGlvbjpcbidVbmNvbW1vbiBiYWNrZ3JvdW5kIGZyb20gV2lsZGxhbmRzLiBMaWtlIGFuIHVuc3Bva2VuIGxhbmd1YWdlLCBpdCBjb21tdW5pY2F0ZXMgZW1vdGlvbiwgZGlyZWN0cyBhdHRlbnRpb24sIGFuZCBpbmZsdWVuY2VzIHBlcmNlcHRpb24uJyxcbmZ1bmN0aW9uYWw6ZmFsc2UsXG5vcmlnaW46J1dpbGRsYW5kcycsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9CYWNrZ3JvdW5kL1dpbnRlcm1pbnQud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvQmFja2dyb3VuZC9XaW50ZXJtaW50X3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eToyMCxcbmZpbHRlcmluZzowLFxud2VpZ2h0OjAsXG5zZW5zZTowLFxucmVzZXJ2ZXM6MCxcbmR1cmFiaWxpdHk6MCxcbmxldmVsOjIwLFxuY29sb3JzOlsnIzAwMDBmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG57XG5uYW1lOidBcm1hIDEnLFxuY2F0ZWdvcnk6J2dhcm1lbnQnLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IGdhcm1lbnQgZnJvbSBBcm1hLiBJdHMgZmFicmljLCBjdXQsIGFuZCBkZXNpZ24gd2hpc3BlciB0YWxlcyBvZiBjdWx0dXJlLCBlcmEsIGFuZCBwZXJzb25hbCBzdHlsZS4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonQXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9HYXJtZW50L0FybWElMjAxLCUyMDEzLCUyMHBpbmsud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvR2FybWVudC9Bcm1hJTIwMSwlMjAxMywlMjBwaW5rX3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTo2NSxcbmZpbHRlcmluZzowLFxud2VpZ2h0OjAsXG5zZW5zZTowLFxucmVzZXJ2ZXM6MCxcbmR1cmFiaWxpdHk6MCxcbmxldmVsOjY1LFxuY29sb3JzOlsnI2ZmYzBjYiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG57XG5uYW1lOidFbGVwaGlhIDEnLFxuY2F0ZWdvcnk6J2dhcm1lbnQnLFxuZGVzY3JpcHRpb246XG4nUmFyZSBnYXJtZW50IGZyb20gRWxlcGhpYS4gSXRzIGZhYnJpYywgY3V0LCBhbmQgZGVzaWduIHdoaXNwZXIgdGFsZXMgb2YgY3VsdHVyZSwgZXJhLCBhbmQgcGVyc29uYWwgc3R5bGUuJyxcbmZ1bmN0aW9uYWw6ZmFsc2UsXG5vcmlnaW46J0VsZXBoaWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvR2FybWVudC9FbGVwaGlhJTIwMSwlMjAxMSwlMjBibHVlLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0dhcm1lbnQvRWxlcGhpYSUyMDEsJTIwMTEsJTIwYmx1ZV90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NTUsXG5maWx0ZXJpbmc6MCxcbndlaWdodDowLFxuc2Vuc2U6MCxcbnJlc2VydmVzOjAsXG5kdXJhYmlsaXR5OjAsXG5sZXZlbDo1NSxcbmNvbG9yczpbJyMwMDAwZmYnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxue1xubmFtZTonQXJtYSAxJyxcbmNhdGVnb3J5OidoZWFkUGllY2UnLFxuZGVzY3JpcHRpb246XG4nVW5jb21tb24gaGVhZFBpZWNlIGZyb20gQXJtYS4gQSBoZWFkcGllY2UsIHdoZXRoZXIgc3VidGxlIG9yIGdyYW5kLCBjcm93bnMgdGhlIHdlYXJlciwgZWxldmF0aW5nIHRoZWlyIHByZXNlbmNlIHdpdGggZWxlZ2FuY2UgYW5kIHRyYWRpdGlvbi4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonQXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9IZWFkcGllY2UvQXJtYSUyMDEsJTIwNiwlMjB3aGl0ZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9IZWFkcGllY2UvQXJtYSUyMDEsJTIwNiwlMjB3aGl0ZV90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6MzAsXG5maWx0ZXJpbmc6MCxcbndlaWdodDowLFxuc2Vuc2U6MCxcbnJlc2VydmVzOjAsXG5kdXJhYmlsaXR5OjAsXG5sZXZlbDozMCxcbmNvbG9yczpbJyNmZmZmZmYnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxue1xubmFtZTonRmFybWEgMScsXG5jYXRlZ29yeTonaGVhZFBpZWNlJyxcbmRlc2NyaXB0aW9uOlxuJ1VuY29tbW9uIGhlYWRQaWVjZSBmcm9tIEZhcm1hLiBBIGhlYWRwaWVjZSwgd2hldGhlciBzdWJ0bGUgb3IgZ3JhbmQsIGNyb3ducyB0aGUgd2VhcmVyLCBlbGV2YXRpbmcgdGhlaXIgcHJlc2VuY2Ugd2l0aCBlbGVnYW5jZSBhbmQgdHJhZGl0aW9uLicsXG5mdW5jdGlvbmFsOmZhbHNlLFxub3JpZ2luOidGYXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9IZWFkcGllY2UvRmFybWElMjAxLCUyMDcsJTIwd2hpdGUud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvSGVhZHBpZWNlL0Zhcm1hJTIwMSwlMjA3LCUyMHdoaXRlX3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTozNSxcbmZpbHRlcmluZzowLFxud2VpZ2h0OjAsXG5zZW5zZTowLFxucmVzZXJ2ZXM6MCxcbmR1cmFiaWxpdHk6MCxcbmxldmVsOjM1LFxuY29sb3JzOlsnI2ZmZmZmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG57XG5uYW1lOidBcm1hIDEnLFxuY2F0ZWdvcnk6J3BlcmsxJyxcbmRlc2NyaXB0aW9uOlxuJ0NvbW1vbiBwZXJrIGZyb20gQXJtYS4gVGhlIGFkZGl0aW9uYWwgZmxhaXIgc2V0cyBpdCBhcGFydCBhbmQgZW50aWNlcywgZW5oYW5jaW5nIGl0cyBvdmVyYWxsIGFsbHVyZS4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidBcm1hJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BlcmslMjAxL0FybWElMjAxLCUyMDMsJTIwZ3JheS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QZXJrJTIwMS9Bcm1hJTIwMSwlMjAzLCUyMGdyYXlfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjE1LFxuZmlsdGVyaW5nOjIsXG53ZWlnaHQ6NixcbnNlbnNlOjMsXG5yZXNlcnZlczo0LFxuZHVyYWJpbGl0eTowLFxubGV2ZWw6MTUsXG5jb2xvcnM6WycjODA4MDgwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbntcbm5hbWU6J0VsZXBoaWEgMScsXG5jYXRlZ29yeToncGVyazEnLFxuZGVzY3JpcHRpb246XG4nVW5jb21tb24gcGVyayBmcm9tIEVsZXBoaWEuIFRoZSBhZGRpdGlvbmFsIGZsYWlyIHNldHMgaXQgYXBhcnQgYW5kIGVudGljZXMsIGVuaGFuY2luZyBpdHMgb3ZlcmFsbCBhbGx1cmUuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonRWxlcGhpYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QZXJrJTIwMS9FbGVwaGlhJTIwMSwlMjA0LCUyMGdyYXkud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvUGVyayUyMDEvRWxlcGhpYSUyMDEsJTIwNCwlMjBncmF5X3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eToyMCxcbmZpbHRlcmluZzo0LFxud2VpZ2h0OjUsXG5zZW5zZTo0LFxucmVzZXJ2ZXM6NSxcbmR1cmFiaWxpdHk6MixcbmxldmVsOjIwLFxuY29sb3JzOlsnIzgwODA4MCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG57XG5uYW1lOidBcm1hIDEnLFxuY2F0ZWdvcnk6J3BlcmsyJyxcbmRlc2NyaXB0aW9uOlxuJ1JhcmUgcGVyayBmcm9tIEFybWEuIEl04oCZcyB0aGUgZXh0cmEgdG91Y2ggdGhhdCBkaWZmZXJlbnRpYXRlcyBhbmQgdGVtcHRzLCBlbGV2YXRpbmcgdGhlIG92ZXJhbGwgYXBwZWFsLicsXG5mdW5jdGlvbmFsOnRydWUsXG5vcmlnaW46J0FybWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvUGVyayUyMDIvQXJtYSUyMDEsJTIwOCwlMjBwaW5rLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BlcmslMjAyL0FybWElMjAxLCUyMDgsJTIwcGlua190aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NDAsXG5maWx0ZXJpbmc6MyxcbndlaWdodDo5LFxuc2Vuc2U6MTAsXG5yZXNlcnZlczoxMixcbmR1cmFiaWxpdHk6NixcbmxldmVsOjQwLFxuY29sb3JzOlsnI2ZmYzBjYiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG57XG5uYW1lOidFbGVwaGlhIDEnLFxuY2F0ZWdvcnk6J3BlcmsyJyxcbmRlc2NyaXB0aW9uOlxuJ1VuY29tbW9uIHBlcmsgZnJvbSBFbGVwaGlhLiBJdOKAmXMgdGhlIGV4dHJhIHRvdWNoIHRoYXQgZGlmZmVyZW50aWF0ZXMgYW5kIHRlbXB0cywgZWxldmF0aW5nIHRoZSBvdmVyYWxsIGFwcGVhbC4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidFbGVwaGlhJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BlcmslMjAyL0VsZXBoaWElMjAxLCUyMDYsJTIwZ3JheS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QZXJrJTIwMi9FbGVwaGlhJTIwMSwlMjA2LCUyMGdyYXlfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjMwLFxuZmlsdGVyaW5nOjMsXG53ZWlnaHQ6NyxcbnNlbnNlOjYsXG5yZXNlcnZlczo3LFxuZHVyYWJpbGl0eTo3LFxubGV2ZWw6MzAsXG5jb2xvcnM6WycjODA4MDgwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbntcbm5hbWU6J0FybWEgMScsXG5jYXRlZ29yeTonZmlsdGVyMScsXG5kZXNjcmlwdGlvbjpcbidSYXJlIGZpbHRlciBmcm9tIEFybWEuIERlc2lnbmVkIHRvIHNoaWVsZCBhZ2FpbnN0IHBvdGVudGlhbGx5IGhhemFyZG91cyBiaW9sb2dpY2FsIG1hdGVyaWFscyBhbmQgcGF0aG9nZW5zLicsXG5mdW5jdGlvbmFsOnRydWUsXG5vcmlnaW46J0FybWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvRmlsdGVyJTIwMS9Bcm1hJTIwMSwlMjAxMSwlMjBncmF5LndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0ZpbHRlciUyMDEvQXJtYSUyMDEsJTIwMTEsJTIwZ3JheV90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NTUsXG5maWx0ZXJpbmc6MTAsXG53ZWlnaHQ6MTAsXG5zZW5zZToxMixcbnJlc2VydmVzOjE3LFxuZHVyYWJpbGl0eTo2LFxubGV2ZWw6NTUsXG5jb2xvcnM6WycjODA4MDgwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbntcbm5hbWU6J0VsZXBoaWEgMScsXG5jYXRlZ29yeTonZmlsdGVyMScsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgZmlsdGVyIGZyb20gRWxlcGhpYS4gRGVzaWduZWQgdG8gc2hpZWxkIGFnYWluc3QgcG90ZW50aWFsbHkgaGF6YXJkb3VzIGJpb2xvZ2ljYWwgbWF0ZXJpYWxzIGFuZCBwYXRob2dlbnMuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonRWxlcGhpYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAxL0VsZXBoaWElMjAxLCUyMDEyJTIwLHdoaXRlLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0ZpbHRlciUyMDEvRWxlcGhpYSUyMDEsJTIwMTIlMjAsd2hpdGVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjYwLFxuZmlsdGVyaW5nOjEyLFxud2VpZ2h0OjEzLFxuc2Vuc2U6MTIsXG5yZXNlcnZlczoxNyxcbmR1cmFiaWxpdHk6NixcbmxldmVsOjYwLFxuY29sb3JzOlsnI2ZmZmZmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG57XG5uYW1lOidBcm1hIDEnLFxuY2F0ZWdvcnk6J2ZpbHRlcjInLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IGZpbHRlciBmcm9tIEFybWEuIEEgY2hlbWljYWwgbWFzayBwcm92aWRlcyByZXNwaXJhdG9yeSBwcm90ZWN0aW9uIGFnYWluc3QgdG94aWMgY2hlbWljYWxzIGFuZCBmdW1lcy4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidBcm1hJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0ZpbHRlciUyMDIvQXJtYSUyMDEsJTIwMTMsJTIwYmx1ZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAyL0FybWElMjAxLCUyMDEzLCUyMGJsdWVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjY1LFxuZmlsdGVyaW5nOjYsXG53ZWlnaHQ6MTksXG5zZW5zZToxNCxcbnJlc2VydmVzOjE0LFxuZHVyYWJpbGl0eToxMixcbmxldmVsOjY1LFxuY29sb3JzOlsnIzAwMDBmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG57XG5uYW1lOidFbGVwaGlhIDEnLFxuY2F0ZWdvcnk6J2ZpbHRlcjInLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IGZpbHRlciBmcm9tIEVsZXBoaWEuIEEgY2hlbWljYWwgbWFzayBwcm92aWRlcyByZXNwaXJhdG9yeSBwcm90ZWN0aW9uIGFnYWluc3QgdG94aWMgY2hlbWljYWxzIGFuZCBmdW1lcy4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidFbGVwaGlhJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0ZpbHRlciUyMDIvRWxlcGhpYSUyMDEsJTIwMTIsJTIwYmx1ZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAyL0VsZXBoaWElMjAxLCUyMDEyLCUyMGJsdWVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjYwLFxuZmlsdGVyaW5nOjEyLFxud2VpZ2h0OjEwLFxuc2Vuc2U6MjEsXG5yZXNlcnZlczo2LFxuZHVyYWJpbGl0eToxMSxcbmxldmVsOjYwLFxuY29sb3JzOlsnIzAwMDBmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9XTskaM2PX29uY2UuYmFzZUl0ZW1zKGJhc2VJdGVtcyk7XG5cblxuXG5jb25zdCAgICAgICAgbWFya2V0cGxhY2VMaXN0aW5nc0NvbW1vbj1bXG5bXG57XG5uYW1lOidXaW50ZXJtaW50IEJ1cmd1bmR5JyxcbmNhdGVnb3J5OidiYWNrZ3JvdW5kJyxcbmRlc2NyaXB0aW9uOlxuJ0NvbW1vbiBiYWNrZ3JvdW5kIGZyb20gRWxlcGhpYS4gTGlrZSBhbiB1bnNwb2tlbiBsYW5ndWFnZSwgaXQgY29tbXVuaWNhdGVzIGVtb3Rpb24sIGRpcmVjdHMgYXR0ZW50aW9uLCBhbmQgaW5mbHVlbmNlcyBwZXJjZXB0aW9uLicsXG5mdW5jdGlvbmFsOmZhbHNlLFxub3JpZ2luOidFbGVwaGlhJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0JhY2tncm91bmQvV2ludGVybWludCUyMEJ1cmd1bmR5LndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0JhY2tncm91bmQvV2ludGVybWludCUyMEJ1cmd1bmR5X3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eToxOSxcbmZpbHRlcmluZzowLFxud2VpZ2h0OjAsXG5zZW5zZTowLFxucmVzZXJ2ZXM6MCxcbmR1cmFiaWxpdHk6MCxcbmxldmVsOjE5LFxuY29sb3JzOlsnIzAwMDBmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG41MG5dLFxuXG5bXG57XG5uYW1lOidFbGVwaGlhIDInLFxuY2F0ZWdvcnk6J3BlcmsxJyxcbmRlc2NyaXB0aW9uOlxuJ0NvbW1vbiBwZXJrIGZyb20gRWxlcGhpYS4gVGhlIGFkZGl0aW9uYWwgZmxhaXIgc2V0cyBpdCBhcGFydCBhbmQgZW50aWNlcywgZW5oYW5jaW5nIGl0cyBvdmVyYWxsIGFsbHVyZS4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidFbGVwaGlhJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BlcmslMjAxL0VsZXBoaWElMjAyLCUyMDYsJTIwZ3JheS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QZXJrJTIwMS9FbGVwaGlhJTIwMiwlMjA2LCUyMGdyYXlfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjEyLFxuZmlsdGVyaW5nOjIsXG53ZWlnaHQ6MyxcbnNlbnNlOjEsXG5yZXNlcnZlczozLFxuZHVyYWJpbGl0eTozLFxubGV2ZWw6MTIsXG5jb2xvcnM6WycjODA4MDgwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjUwbl0sXG5cbltcbntcbm5hbWU6J1N0cm9rZSAxJyxcbmNhdGVnb3J5OidwYXRjaCcsXG5kZXNjcmlwdGlvbjpcbidDb21tb24gcGF0Y2ggZnJvbSBFbGVwaGlhLiBTaGFwZXMsIGNvbG9ycywgYW5kIGxpbmVzIGRhbmNlIGhhcm1vbmlvdXNseSwgY3JlYXRpbmcgYSBzeW1waG9ueSBvZiBkZXNpZ24gYW5kIGN1bHR1cmFsIHNpZ25pZmljYW5jZS4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonRWxlcGhpYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QYXR0ZXJuL1N0cm9rZSUyMDEsJTIwOCwlMjBncmF5LndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BhdHRlcm4vU3Ryb2tlJTIwMSwlMjA4LCUyMGdyYXlfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjEzLFxuZmlsdGVyaW5nOjAsXG53ZWlnaHQ6MCxcbnNlbnNlOjAsXG5yZXNlcnZlczowLFxuZHVyYWJpbGl0eTowLFxubGV2ZWw6MTMsXG5jb2xvcnM6WycjODA4MDgwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjUwbl1dOyRozY9fb25jZS5tYXJrZXRwbGFjZUxpc3RpbmdzQ29tbW9uKG1hcmtldHBsYWNlTGlzdGluZ3NDb21tb24pO1xuXG5cblxuY29uc3QgICAgICAgIG1hcmtldHBsYWNlTGlzdGluZ3NVbmNvbW1vbj1bXG5bXG57XG5uYW1lOidGb3JyZXN0IEJ1cmd1bmR5JyxcbmNhdGVnb3J5OidiYWNrZ3JvdW5kJyxcbmRlc2NyaXB0aW9uOlxuJ1VuY29tbW9uIGJhY2tncm91bmQgZnJvbSBNb3VudC4gTGlrZSBhbiB1bnNwb2tlbiBsYW5ndWFnZSwgaXQgY29tbXVuaWNhdGVzIGVtb3Rpb24sIGRpcmVjdHMgYXR0ZW50aW9uLCBhbmQgaW5mbHVlbmNlcyBwZXJjZXB0aW9uLicsXG5mdW5jdGlvbmFsOmZhbHNlLFxub3JpZ2luOidNb3VudCcsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9CYWNrZ3JvdW5kL0ZvcnJlc3QlMjBCdXJndW5keS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9CYWNrZ3JvdW5kL0ZvcnJlc3QlMjBCdXJndW5keV90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6MzIsXG5maWx0ZXJpbmc6MCxcbndlaWdodDowLFxuc2Vuc2U6MCxcbnJlc2VydmVzOjAsXG5kdXJhYmlsaXR5OjAsXG5sZXZlbDozMixcbmNvbG9yczpbJyM4MDgwODAnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuMzBuXSxcblxuW1xue1xubmFtZTonU2lsdmVyIFNwZWFybWludCcsXG5jYXRlZ29yeTonYmFja2dyb3VuZCcsXG5kZXNjcmlwdGlvbjpcbidVbmNvbW1vbiBiYWNrZ3JvdW5kIGZyb20gRmFybWEuIExpa2UgYW4gdW5zcG9rZW4gbGFuZ3VhZ2UsIGl0IGNvbW11bmljYXRlcyBlbW90aW9uLCBkaXJlY3RzIGF0dGVudGlvbiwgYW5kIGluZmx1ZW5jZXMgcGVyY2VwdGlvbi4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonRmFybWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvQmFja2dyb3VuZC9TaWx2ZXIlMjBTcGVhcm1pbnQud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvQmFja2dyb3VuZC9TaWx2ZXIlMjBTcGVhcm1pbnRfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjI2LFxuZmlsdGVyaW5nOjAsXG53ZWlnaHQ6MCxcbnNlbnNlOjAsXG5yZXNlcnZlczowLFxuZHVyYWJpbGl0eTowLFxubGV2ZWw6MjYsXG5jb2xvcnM6WycjMDA4MDAwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjMwbl0sXG5cbltcbntcbm5hbWU6J0FybWEgMicsXG5jYXRlZ29yeToncGVyazEnLFxuZGVzY3JpcHRpb246XG4nVW5jb21tb24gcGVyayBmcm9tIEFybWEuIFRoZSBhZGRpdGlvbmFsIGZsYWlyIHNldHMgaXQgYXBhcnQgYW5kIGVudGljZXMsIGVuaGFuY2luZyBpdHMgb3ZlcmFsbCBhbGx1cmUuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonQXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QZXJrJTIwMS9Bcm1hJTIwMiwlMjA1LCUyMGdyYXkud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvUGVyayUyMDEvQXJtYSUyMDIsJTIwNSwlMjBncmF5X3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eToyNSxcbmZpbHRlcmluZzo0LFxud2VpZ2h0OjQsXG5zZW5zZTo2LFxucmVzZXJ2ZXM6NSxcbmR1cmFiaWxpdHk6NixcbmxldmVsOjI1LFxuY29sb3JzOlsnIzgwODA4MCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zMG5dLFxuXG5bXG57XG5uYW1lOidBcm1hIDMnLFxuY2F0ZWdvcnk6J3BlcmsxJyxcbmRlc2NyaXB0aW9uOlxuJ1VuY29tbW9uIHBlcmsgZnJvbSBBcm1hLiBUaGUgYWRkaXRpb25hbCBmbGFpciBzZXRzIGl0IGFwYXJ0IGFuZCBlbnRpY2VzLCBlbmhhbmNpbmcgaXRzIG92ZXJhbGwgYWxsdXJlLicsXG5mdW5jdGlvbmFsOnRydWUsXG5vcmlnaW46J0FybWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvUGVyayUyMDEvQXJtYSUyMDMsJTIwNywlMjBncmVlbi53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QZXJrJTIwMS9Bcm1hJTIwMywlMjA3LCUyMGdyZWVuX3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTozNSxcbmZpbHRlcmluZzo3LFxud2VpZ2h0OjQsXG5zZW5zZToxMSxcbnJlc2VydmVzOjcsXG5kdXJhYmlsaXR5OjYsXG5sZXZlbDozNSxcbmNvbG9yczpbJyMwMDgwMDAnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuMzBuXV07JGjNj19vbmNlLm1hcmtldHBsYWNlTGlzdGluZ3NVbmNvbW1vbihtYXJrZXRwbGFjZUxpc3RpbmdzVW5jb21tb24pO1xuXG5cblxuY29uc3QgICAgICAgIG1hcmtldHBsYWNlTGlzdGluZ3NSYXJlPVtcbltcbntcbm5hbWU6J0VsZXBoaWEgMScsXG5jYXRlZ29yeTonaGFpcicsXG5kZXNjcmlwdGlvbjpcbidSYXJlIGhhaXIgZnJvbSBFbGVwaGlhLiBGcmFtZXMgdGhlIGZhY2UsIHNob3djYXNpbmcgcGVyc29uYWwgZmxhaXIgYW5kIGN1bHR1cmFsIHRyZW5kcy4gSXTigJlzIGEgc2lsZW50IGNvbW11IG5pY2F0b3Igb2Ygc3R5bGUsIG1vb2QsIGFuZCBpZGVudGl0eS4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonRWxlcGhpYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9IYWlyL0VsZXBoaWElMjAxLCUyMDEwLCUyMGJsYWNrLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0hhaXIvRWxlcGhpYSUyMDEsJTIwMTAsJTIwYmxhY2tfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjUwLFxuZmlsdGVyaW5nOjAsXG53ZWlnaHQ6MCxcbnNlbnNlOjAsXG5yZXNlcnZlczowLFxuZHVyYWJpbGl0eTowLFxubGV2ZWw6NTAsXG5jb2xvcnM6WycjMDAwMDAwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjE0bl0sXG5cbltcbntcbm5hbWU6J0FybWEgMicsXG5jYXRlZ29yeTonaGVhZFBpZWNlJyxcbmRlc2NyaXB0aW9uOlxuJ1JhcmUgaGVhZFBpZWNlIGZyb20gQXJtYS4gQSBoZWFkcGllY2UsIHdoZXRoZXIgc3VidGxlIG9yIGdyYW5kLCBjcm93bnMgdGhlIHdlYXJlciwgZWxldmF0aW5nIHRoZWlyIHByZXNlbmNlIHdpdGggZWxlZ2FuY2UgYW5kIHRyYWRpdGlvbi4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonQXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9IZWFkcGllY2UvQXJtYSUyMDIsJTIwOSwlMjBwaW5rLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0hlYWRwaWVjZS9Bcm1hJTIwMiwlMjA5LCUyMHBpbmtfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjQ1LFxuZmlsdGVyaW5nOjAsXG53ZWlnaHQ6MCxcbnNlbnNlOjAsXG5yZXNlcnZlczowLFxuZHVyYWJpbGl0eTowLFxubGV2ZWw6NDUsXG5jb2xvcnM6WycjZmZjMGNiJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjE0bl0sXG5cbltcbntcbm5hbWU6J0FybWEgMycsXG5jYXRlZ29yeTonaGVhZFBpZWNlJyxcbmRlc2NyaXB0aW9uOlxuJ1JhcmUgaGVhZFBpZWNlIGZyb20gQXJtYS4gQSBoZWFkcGllY2UsIHdoZXRoZXIgc3VidGxlIG9yIGdyYW5kLCBjcm93bnMgdGhlIHdlYXJlciwgZWxldmF0aW5nIHRoZWlyIHByZXNlbmNlIHdpdGggZWxlZ2FuY2UgYW5kIHRyYWRpdGlvbi4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonQXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9IZWFkcGllY2UvQXJtYSUyMDMsJTIwMTEsJTIwcHVycGxlLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0hlYWRwaWVjZS9Bcm1hJTIwMywlMjAxMSwlMjBwdXJwbGVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjU1LFxuZmlsdGVyaW5nOjAsXG53ZWlnaHQ6MCxcbnNlbnNlOjAsXG5yZXNlcnZlczowLFxuZHVyYWJpbGl0eTowLFxubGV2ZWw6NTUsXG5jb2xvcnM6WycjODAwMDgwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjE0bl0sXG5cbltcbntcbm5hbWU6J0Zhcm1hIDInLFxuY2F0ZWdvcnk6J2hlYWRQaWVjZScsXG5kZXNjcmlwdGlvbjpcbidSYXJlIGhlYWRQaWVjZSBmcm9tIEZhcm1hLiBBIGhlYWRwaWVjZSwgd2hldGhlciBzdWJ0bGUgb3IgZ3JhbmQsIGNyb3ducyB0aGUgd2VhcmVyLCBlbGV2YXRpbmcgdGhlaXIgcHJlc2VuY2Ugd2l0aCBlbGVnYW5jZSBhbmQgdHJhZGl0aW9uLicsXG5mdW5jdGlvbmFsOmZhbHNlLFxub3JpZ2luOidGYXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9IZWFkcGllY2UvRmFybWElMjAyLCUyMDEwLCUyMHllbGxvdy53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9IZWFkcGllY2UvRmFybWElMjAyLCUyMDEwLCUyMHllbGxvd190aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NTAsXG5maWx0ZXJpbmc6MCxcbndlaWdodDowLFxuc2Vuc2U6MCxcbnJlc2VydmVzOjAsXG5kdXJhYmlsaXR5OjAsXG5sZXZlbDo1MCxcbmNvbG9yczpbJyNmZmZmMDAnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuMTRuXSxcblxuW1xue1xubmFtZTonU3Ryb2tlIDInLFxuY2F0ZWdvcnk6J3BhdGNoJyxcbmRlc2NyaXB0aW9uOlxuJ1JhcmUgcGF0Y2ggZnJvbSBBcm1hLiBTaGFwZXMsIGNvbG9ycywgYW5kIGxpbmVzIGRhbmNlIGhhcm1vbmlvdXNseSwgY3JlYXRpbmcgYSBzeW1waG9ueSBvZiBkZXNpZ24gYW5kIGN1bHR1cmFsIHNpZ25pZmljYW5jZS4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonQXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QYXR0ZXJuL1N0cm9rZSUyMDIsJTIwMTAsJTIweWVsbG93LndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BhdHRlcm4vU3Ryb2tlJTIwMiwlMjAxMCwlMjB5ZWxsb3dfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjUwLFxuZmlsdGVyaW5nOjAsXG53ZWlnaHQ6MCxcbnNlbnNlOjAsXG5yZXNlcnZlczowLFxuZHVyYWJpbGl0eTowLFxubGV2ZWw6NTAsXG5jb2xvcnM6WycjZmZmZjAwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjE0bl0sXG5cbltcbntcbm5hbWU6J0VsZXBoaWEgMycsXG5jYXRlZ29yeToncGVyazEnLFxuZGVzY3JpcHRpb246XG4nUmFyZSBwZXJrIGZyb20gRWxlcGhpYS4gVGhlIGFkZGl0aW9uYWwgZmxhaXIgc2V0cyBpdCBhcGFydCBhbmQgZW50aWNlcywgZW5oYW5jaW5nIGl0cyBvdmVyYWxsIGFsbHVyZS4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidFbGVwaGlhJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BlcmslMjAxL0VsZXBoaWElMjAzLCUyMDgsJTIwYmx1ZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QZXJrJTIwMS9FbGVwaGlhJTIwMywlMjA4LCUyMGJsdWVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjQwLFxuZmlsdGVyaW5nOjgsXG53ZWlnaHQ6OCxcbnNlbnNlOjExLFxucmVzZXJ2ZXM6NyxcbmR1cmFiaWxpdHk6NixcbmxldmVsOjQwLFxuY29sb3JzOlsnIzAwMDBmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4xNG5dLFxuXG5bXG57XG5uYW1lOidBcm1hIDInLFxuY2F0ZWdvcnk6J3BlcmsyJyxcbmRlc2NyaXB0aW9uOlxuJ1JhcmUgcGVyayBmcm9tIEFybWEuIEl04oCZcyB0aGUgZXh0cmEgdG91Y2ggdGhhdCBkaWZmZXJlbnRpYXRlcyBhbmQgdGVtcHRzLCBlbGV2YXRpbmcgdGhlIG92ZXJhbGwgYXBwZWFsLicsXG5mdW5jdGlvbmFsOnRydWUsXG5vcmlnaW46J0FybWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvUGVyayUyMDIvQXJtYSUyMDIsJTIwMTAsJTIwZ3JheS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QZXJrJTIwMi9Bcm1hJTIwMiwlMjAxMCwlMjBncmF5X3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTo1MCxcbmZpbHRlcmluZzo3LFxud2VpZ2h0OjEyLFxuc2Vuc2U6MTIsXG5yZXNlcnZlczo4LFxuZHVyYWJpbGl0eToxMSxcbmxldmVsOjUwLFxuY29sb3JzOlsnIzgwODA4MCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4xNG5dLFxuXG5bXG57XG5uYW1lOidFbGVwaGlhIDInLFxuY2F0ZWdvcnk6J3BlcmsyJyxcbmRlc2NyaXB0aW9uOlxuJ1JhcmUgcGVyayBmcm9tIEVsZXBoaWEuIEl04oCZcyB0aGUgZXh0cmEgdG91Y2ggdGhhdCBkaWZmZXJlbnRpYXRlcyBhbmQgdGVtcHRzLCBlbGV2YXRpbmcgdGhlIG92ZXJhbGwgYXBwZWFsLicsXG5mdW5jdGlvbmFsOnRydWUsXG5vcmlnaW46J0VsZXBoaWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvUGVyayUyMDIvRWxlcGhpYSUyMDIsJTIwOSwlMjB3aGl0ZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QZXJrJTIwMi9FbGVwaGlhJTIwMiwlMjA5LCUyMHdoaXRlX3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTo0NSxcbmZpbHRlcmluZzo0LFxud2VpZ2h0OjEwLFxuc2Vuc2U6MTEsXG5yZXNlcnZlczo4LFxuZHVyYWJpbGl0eToxMixcbmxldmVsOjQ1LFxuY29sb3JzOlsnI2ZmZmZmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4xNG5dLFxuXG5bXG57XG5uYW1lOidFbGVwaGlhIDInLFxuY2F0ZWdvcnk6J21hc2snLFxuZGVzY3JpcHRpb246XG4nUmFyZSBtYXNrIGZyb20gRWxlcGhpYS4gQSBmYWNpYWwgY292ZXJpbmcgd2l0aCB2YXJpb3VzIHVzZXMsIGZyb20gcHJvdGVjdGlvbiB0byBkaXNndWlzZS4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidFbGVwaGlhJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL01hc2svRWxlcGhpYSUyMDIsJTIwMTMsJTIwYmx1ZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9NYXNrL0VsZXBoaWElMjAyLCUyMDEzLCUyMGJsdWVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjU1LFxuZmlsdGVyaW5nOjExLFxud2VpZ2h0OjE1LFxuc2Vuc2U6MTMsXG5yZXNlcnZlczoxMCxcbmR1cmFiaWxpdHk6NixcbmxldmVsOjU1LFxuY29sb3JzOlsnIzAwMDBmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4xNG5dLFxuXG5bXG57XG5uYW1lOidBcm1hIDInLFxuY2F0ZWdvcnk6J21hc2snLFxuZGVzY3JpcHRpb246XG4nUmFyZSBtYXNrIGZyb20gQXJtYS4gQSBmYWNpYWwgY292ZXJpbmcgd2l0aCB2YXJpb3VzIHVzZXMsIGZyb20gcHJvdGVjdGlvbiB0byBkaXNndWlzZS4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidBcm1hJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL01hc2svQXJtYSUyMDIsJTIwMTUsJTIwZ3JheS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9NYXNrL0FybWElMjAyLCUyMDE1LCUyMGdyYXlfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjU5LFxuZmlsdGVyaW5nOjgsXG53ZWlnaHQ6OCxcbnNlbnNlOjgsXG5yZXNlcnZlczoxOCxcbmR1cmFiaWxpdHk6MTcsXG5sZXZlbDo1OSxcbmNvbG9yczpbJyM4MDgwODAnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuMTRuXV07JGjNj19vbmNlLm1hcmtldHBsYWNlTGlzdGluZ3NSYXJlKG1hcmtldHBsYWNlTGlzdGluZ3NSYXJlKTtcblxuXG5cbmNvbnN0ICAgICAgICBtYXJrZXRwbGFjZUxpc3RpbmdzTGVnZW5kYXJ5PVtcbltcbntcbm5hbWU6J0FybWEgMicsXG5jYXRlZ29yeTonZmlsdGVyMScsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgZmlsdGVyIGZyb20gQXJtYS4gRGVzaWduZWQgdG8gc2hpZWxkIGFnYWluc3QgcG90ZW50aWFsbHkgaGF6YXJkb3VzIGJpb2xvZ2ljYWwgbWF0ZXJpYWxzIGFuZCBwYXRob2dlbnMuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonQXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAxL0FybWElMjAyLCUyMDE2LCUyMGJyb3duLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0ZpbHRlciUyMDEvQXJtYSUyMDIsJTIwMTYsJTIwYnJvd25fdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5Ojc4LFxuZmlsdGVyaW5nOjE3LFxud2VpZ2h0OjEzLFxuc2Vuc2U6MjEsXG5yZXNlcnZlczoxMixcbmR1cmFiaWxpdHk6MTUsXG5sZXZlbDo3OCxcbmNvbG9yczpbJyNhNTJhMmEnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuM25dLFxuXG5bXG57XG5uYW1lOidBcm1hIDMnLFxuY2F0ZWdvcnk6J2ZpbHRlcjEnLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IGZpbHRlciBmcm9tIEFybWEuIERlc2lnbmVkIHRvIHNoaWVsZCBhZ2FpbnN0IHBvdGVudGlhbGx5IGhhemFyZG91cyBiaW9sb2dpY2FsIG1hdGVyaWFscyBhbmQgcGF0aG9nZW5zLicsXG5mdW5jdGlvbmFsOnRydWUsXG5vcmlnaW46J0FybWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvRmlsdGVyJTIwMS9Bcm1hJTIwMywlMjAxOCwlMjBwdXJwbGUud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvRmlsdGVyJTIwMS9Bcm1hJTIwMywlMjAxOCwlMjBwdXJwbGVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjYyLFxuZmlsdGVyaW5nOjEyLFxud2VpZ2h0OjEyLFxuc2Vuc2U6OSxcbnJlc2VydmVzOjE1LFxuZHVyYWJpbGl0eToxNCxcbmxldmVsOjYyLFxuY29sb3JzOlsnIzgwMDA4MCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zbl0sXG5cbltcbntcbm5hbWU6J0VsZXBoaWEgMicsXG5jYXRlZ29yeTonZmlsdGVyMScsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgZmlsdGVyIGZyb20gRWxlcGhpYS4gRGVzaWduZWQgdG8gc2hpZWxkIGFnYWluc3QgcG90ZW50aWFsbHkgaGF6YXJkb3VzIGJpb2xvZ2ljYWwgbWF0ZXJpYWxzIGFuZCBwYXRob2dlbnMuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonRWxlcGhpYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAxL0VsZXBoaWElMjAyLCUyMDE1LCUyMHB1cnBsZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAxL0VsZXBoaWElMjAyLCUyMDE1LCUyMHB1cnBsZV90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NzUsXG5maWx0ZXJpbmc6MTcsXG53ZWlnaHQ6MjQsXG5zZW5zZToxMSxcbnJlc2VydmVzOjEwLFxuZHVyYWJpbGl0eToxMyxcbmxldmVsOjc1LFxuY29sb3JzOlsnIzgwMDA4MCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zbl0sXG5cbltcbntcbm5hbWU6J0VsZXBoaWEgMycsXG5jYXRlZ29yeTonZmlsdGVyMScsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgZmlsdGVyIGZyb20gRWxlcGhpYS4gRGVzaWduZWQgdG8gc2hpZWxkIGFnYWluc3QgcG90ZW50aWFsbHkgaGF6YXJkb3VzIGJpb2xvZ2ljYWwgbWF0ZXJpYWxzIGFuZCBwYXRob2dlbnMuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonRWxlcGhpYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAxL0VsZXBoaWElMjAzLCUyMDE4LCUyMHB1cnBsZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAxL0VsZXBoaWElMjAzLCUyMDE4LCUyMHB1cnBsZV90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NzIsXG5maWx0ZXJpbmc6MTksXG53ZWlnaHQ6MTMsXG5zZW5zZToxMSxcbnJlc2VydmVzOjE3LFxuZHVyYWJpbGl0eToxMixcbmxldmVsOjcyLFxuY29sb3JzOlsnIzgwMDA4MCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zbl0sXG5cbltcbntcbm5hbWU6J0FybWEgMicsXG5jYXRlZ29yeTonZmlsdGVyMicsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgZmlsdGVyIGZyb20gQXJtYS4gQSBjaGVtaWNhbCBtYXNrIHByb3ZpZGVzIHJlc3BpcmF0b3J5IHByb3RlY3Rpb24gYWdhaW5zdCB0b3hpYyBjaGVtaWNhbHMgYW5kIGZ1bWVzLicsXG5mdW5jdGlvbmFsOnRydWUsXG5vcmlnaW46J0FybWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvRmlsdGVyJTIwMi9Bcm1hJTIwMiwlMjAxNiwlMjBwaW5rLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0ZpbHRlciUyMDIvQXJtYSUyMDIsJTIwMTYsJTIwcGlua190aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NjUsXG5maWx0ZXJpbmc6NixcbndlaWdodDoxNCxcbnNlbnNlOjE5LFxucmVzZXJ2ZXM6MTksXG5kdXJhYmlsaXR5OjcsXG5sZXZlbDo2NSxcbmNvbG9yczpbJyNmZmMwY2InXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuM25dLFxuXG5bXG57XG5uYW1lOidBcm1hIDMnLFxuY2F0ZWdvcnk6J2ZpbHRlcjInLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IGZpbHRlciBmcm9tIEFybWEuIEEgY2hlbWljYWwgbWFzayBwcm92aWRlcyByZXNwaXJhdG9yeSBwcm90ZWN0aW9uIGFnYWluc3QgdG94aWMgY2hlbWljYWxzIGFuZCBmdW1lcy4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidBcm1hJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0ZpbHRlciUyMDIvQXJtYSUyMDMsJTIwMTgsJTIwcGluay53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAyL0FybWElMjAzLCUyMDE4LCUyMHBpbmtfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjYzLFxuZmlsdGVyaW5nOjgsXG53ZWlnaHQ6MTEsXG5zZW5zZTo4LFxucmVzZXJ2ZXM6MjMsXG5kdXJhYmlsaXR5OjEzLFxubGV2ZWw6NjMsXG5jb2xvcnM6WycjZmZjMGNiJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjNuXSxcblxuW1xue1xubmFtZTonRWxlcGhpYSAyJyxcbmNhdGVnb3J5OidmaWx0ZXIyJyxcbmRlc2NyaXB0aW9uOlxuJ0xlZ2VuZGFyeSBmaWx0ZXIgZnJvbSBFbGVwaGlhLiBBIGNoZW1pY2FsIG1hc2sgcHJvdmlkZXMgcmVzcGlyYXRvcnkgcHJvdGVjdGlvbiBhZ2FpbnN0IHRveGljIGNoZW1pY2FscyBhbmQgZnVtZXMuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonRWxlcGhpYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAyL0VsZXBoaWElMjAyLCUyMDE1LCUyMGJsdWUud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvRmlsdGVyJTIwMi9FbGVwaGlhJTIwMiwlMjAxNSwlMjBibHVlX3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTo3NSxcbmZpbHRlcmluZzo3LFxud2VpZ2h0OjE1LFxuc2Vuc2U6MTEsXG5yZXNlcnZlczoxOSxcbmR1cmFiaWxpdHk6MjMsXG5sZXZlbDo3NSxcbmNvbG9yczpbJyMwMDAwZmYnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuM25dLFxuXG5bXG57XG5uYW1lOidFbGVwaGlhIDMnLFxuY2F0ZWdvcnk6J2ZpbHRlcjInLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IGZpbHRlciBmcm9tIEVsZXBoaWEuIEEgY2hlbWljYWwgbWFzayBwcm92aWRlcyByZXNwaXJhdG9yeSBwcm90ZWN0aW9uIGFnYWluc3QgdG94aWMgY2hlbWljYWxzIGFuZCBmdW1lcy4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidFbGVwaGlhJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0ZpbHRlciUyMDIvRWxlcGhpYSUyMDMsJTIwMTgsJTIwYmx1ZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9GaWx0ZXIlMjAyL0VsZXBoaWElMjAzLCUyMDE4LCUyMGJsdWVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjY0LFxuZmlsdGVyaW5nOjExLFxud2VpZ2h0OjExLFxuc2Vuc2U6MTgsXG5yZXNlcnZlczoxNCxcbmR1cmFiaWxpdHk6MTAsXG5sZXZlbDo2NCxcbmNvbG9yczpbJyMwMDAwZmYnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuM25dLFxuXG5bXG57XG5uYW1lOidBcm1hIDInLFxuY2F0ZWdvcnk6J2dhcm1lbnQnLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IGdhcm1lbnQgZnJvbSBBcm1hLiBJdHMgZmFicmljLCBjdXQsIGFuZCBkZXNpZ24gd2hpc3BlciB0YWxlcyBvZiBjdWx0dXJlLCBlcmEsIGFuZCBwZXJzb25hbCBzdHlsZS4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonQXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9HYXJtZW50L0FybWElMjAyLCUyMDE1LCUyMHBpbmsud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvR2FybWVudC9Bcm1hJTIwMiwlMjAxNSwlMjBwaW5rX3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTo3NSxcbmZpbHRlcmluZzowLFxud2VpZ2h0OjAsXG5zZW5zZTowLFxucmVzZXJ2ZXM6MCxcbmR1cmFiaWxpdHk6MCxcbmxldmVsOjc1LFxuY29sb3JzOlsnI2ZmYzBjYiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zbl0sXG5cbltcbntcbm5hbWU6J0FybWEgMycsXG5jYXRlZ29yeTonZ2FybWVudCcsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgZ2FybWVudCBmcm9tIEFybWEuIEl0cyBmYWJyaWMsIGN1dCwgYW5kIGRlc2lnbiB3aGlzcGVyIHRhbGVzIG9mIGN1bHR1cmUsIGVyYSwgYW5kIHBlcnNvbmFsIHN0eWxlLicsXG5mdW5jdGlvbmFsOmZhbHNlLFxub3JpZ2luOidBcm1hJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0dhcm1lbnQvQXJtYSUyMDMsJTIwMTcsJTIwcHVycGxlLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0dhcm1lbnQvQXJtYSUyMDMsJTIwMTcsJTIwcHVycGxlX3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTo2NixcbmZpbHRlcmluZzowLFxud2VpZ2h0OjAsXG5zZW5zZTowLFxucmVzZXJ2ZXM6MCxcbmR1cmFiaWxpdHk6MCxcbmxldmVsOjY2LFxuY29sb3JzOlsnIzgwMDA4MCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zbl0sXG5cbltcbntcbm5hbWU6J0FybWEgNCcsXG5jYXRlZ29yeTonZ2FybWVudCcsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgZ2FybWVudCBmcm9tIEFybWEuIEl0cyBmYWJyaWMsIGN1dCwgYW5kIGRlc2lnbiB3aGlzcGVyIHRhbGVzIG9mIGN1bHR1cmUsIGVyYSwgYW5kIHBlcnNvbmFsIHN0eWxlLicsXG5mdW5jdGlvbmFsOmZhbHNlLFxub3JpZ2luOidBcm1hJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0dhcm1lbnQvQXJtYSUyMDQsJTIwMTksJTIwcGluay53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9HYXJtZW50L0FybWElMjA0LCUyMDE5LCUyMHBpbmtfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjY5LFxuZmlsdGVyaW5nOjAsXG53ZWlnaHQ6MCxcbnNlbnNlOjAsXG5yZXNlcnZlczowLFxuZHVyYWJpbGl0eTowLFxubGV2ZWw6NjksXG5jb2xvcnM6WycjZmZjMGNiJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjNuXSxcblxuW1xue1xubmFtZTonRWxlcGhpYSAyJyxcbmNhdGVnb3J5OidnYXJtZW50JyxcbmRlc2NyaXB0aW9uOlxuJ0xlZ2VuZGFyeSBnYXJtZW50IGZyb20gRWxlcGhpYS4gSXRzIGZhYnJpYywgY3V0LCBhbmQgZGVzaWduIHdoaXNwZXIgdGFsZXMgb2YgY3VsdHVyZSwgZXJhLCBhbmQgcGVyc29uYWwgc3R5bGUuJyxcbmZ1bmN0aW9uYWw6ZmFsc2UsXG5vcmlnaW46J0VsZXBoaWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvR2FybWVudC9FbGVwaGlhJTIwMiwlMjAxNCwlMjBibHVlLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0dhcm1lbnQvRWxlcGhpYSUyMDIsJTIwMTQsJTIwYmx1ZV90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NzAsXG5maWx0ZXJpbmc6MCxcbndlaWdodDowLFxuc2Vuc2U6MCxcbnJlc2VydmVzOjAsXG5kdXJhYmlsaXR5OjAsXG5sZXZlbDo3MCxcbmNvbG9yczpbJyMwMDAwZmYnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuM25dLFxuXG5bXG57XG5uYW1lOidFbGVwaGlhIDMnLFxuY2F0ZWdvcnk6J2dhcm1lbnQnLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IGdhcm1lbnQgZnJvbSBFbGVwaGlhLiBJdHMgZmFicmljLCBjdXQsIGFuZCBkZXNpZ24gd2hpc3BlciB0YWxlcyBvZiBjdWx0dXJlLCBlcmEsIGFuZCBwZXJzb25hbCBzdHlsZS4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonRWxlcGhpYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9HYXJtZW50L0VsZXBoaWElMjAzLCUyMDE3LCUyMGJsdWUud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvR2FybWVudC9FbGVwaGlhJTIwMywlMjAxNywlMjBibHVlX3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTo3MixcbmZpbHRlcmluZzowLFxud2VpZ2h0OjAsXG5zZW5zZTowLFxucmVzZXJ2ZXM6MCxcbmR1cmFiaWxpdHk6MCxcbmxldmVsOjcyLFxuY29sb3JzOlsnIzAwMDBmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zbl0sXG5cbltcbntcbm5hbWU6J0VsZXBoaWEgNCcsXG5jYXRlZ29yeTonZ2FybWVudCcsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgZ2FybWVudCBmcm9tIEVsZXBoaWEuIEl0cyBmYWJyaWMsIGN1dCwgYW5kIGRlc2lnbiB3aGlzcGVyIHRhbGVzIG9mIGN1bHR1cmUsIGVyYSwgYW5kIHBlcnNvbmFsIHN0eWxlLicsXG5mdW5jdGlvbmFsOmZhbHNlLFxub3JpZ2luOidFbGVwaGlhJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0dhcm1lbnQvRWxlcGhpYSUyMDQsJTIwMTksJTIwYmx1ZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9HYXJtZW50L0VsZXBoaWElMjA0LCUyMDE5LCUyMGJsdWVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjYxLFxuZmlsdGVyaW5nOjAsXG53ZWlnaHQ6MCxcbnNlbnNlOjAsXG5yZXNlcnZlczowLFxuZHVyYWJpbGl0eTowLFxubGV2ZWw6NjEsXG5jb2xvcnM6WycjMDAwMGZmJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjNuXSxcblxuW1xue1xubmFtZTonQXJtYSAzJyxcbmNhdGVnb3J5OidoYWlyJyxcbmRlc2NyaXB0aW9uOlxuJ0xlZ2VuZGFyeSBoYWlyIGZyb20gQXJtYS4gRnJhbWVzIHRoZSBmYWNlLCBzaG93Y2FzaW5nIHBlcnNvbmFsIGZsYWlyIGFuZCBjdWx0dXJhbCB0cmVuZHMuIEl04oCZcyBhIHNpbGVudCBjb21tdSBuaWNhdG9yIG9mIHN0eWxlLCBtb29kLCBhbmQgaWRlbnRpdHkuJyxcbmZ1bmN0aW9uYWw6ZmFsc2UsXG5vcmlnaW46J0FybWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvSGFpci9Bcm1hJTIwMywlMjAxMiwlMjBibGFjay53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9IYWlyL0FybWElMjAzLCUyMDEyLCUyMGJsYWNrX3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTo2MCxcbmZpbHRlcmluZzowLFxud2VpZ2h0OjAsXG5zZW5zZTowLFxucmVzZXJ2ZXM6MCxcbmR1cmFiaWxpdHk6MCxcbmxldmVsOjYwLFxuY29sb3JzOlsnIzAwMDAwMCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zbl0sXG5cbltcbntcbm5hbWU6J0Zhcm1hIDMnLFxuY2F0ZWdvcnk6J2hlYWRQaWVjZScsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgaGVhZFBpZWNlIGZyb20gRmFybWEuIEEgaGVhZHBpZWNlLCB3aGV0aGVyIHN1YnRsZSBvciBncmFuZCwgY3Jvd25zIHRoZSB3ZWFyZXIsIGVsZXZhdGluZyB0aGVpciBwcmVzZW5jZSB3aXRoIGVsZWdhbmNlIGFuZCB0cmFkaXRpb24uJyxcbmZ1bmN0aW9uYWw6ZmFsc2UsXG5vcmlnaW46J0Zhcm1hJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL0hlYWRwaWVjZS9GYXJtYSUyMDMsJTIwMTIsJTIwZ3JlZW4ud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvSGVhZHBpZWNlL0Zhcm1hJTIwMywlMjAxMiwlMjBncmVlbl90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NjAsXG5maWx0ZXJpbmc6MCxcbndlaWdodDowLFxuc2Vuc2U6MCxcbnJlc2VydmVzOjAsXG5kdXJhYmlsaXR5OjAsXG5sZXZlbDo2MCxcbmNvbG9yczpbJyMwMDgwMDAnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuM25dLFxuXG5bXG57XG5uYW1lOidBcm1hIDMnLFxuY2F0ZWdvcnk6J21hc2snLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IG1hc2sgZnJvbSBBcm1hLiBBIGZhY2lhbCBjb3ZlcmluZyB3aXRoIHZhcmlvdXMgdXNlcywgZnJvbSBwcm90ZWN0aW9uIHRvIGRpc2d1aXNlLicsXG5mdW5jdGlvbmFsOnRydWUsXG5vcmlnaW46J0FybWEnLFxuaW1hZ2U6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvTWFzay9Bcm1hJTIwMywlMjAxNywlMjBncmF5LndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL01hc2svQXJtYSUyMDMsJTIwMTcsJTIwZ3JheV90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NjUsXG5maWx0ZXJpbmc6MTUsXG53ZWlnaHQ6MTAsXG5zZW5zZToxMyxcbnJlc2VydmVzOjI0LFxuZHVyYWJpbGl0eTozLFxubGV2ZWw6NjUsXG5jb2xvcnM6WycjODA4MDgwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjNuXSxcblxuW1xue1xubmFtZTonQXJtYSA0JyxcbmNhdGVnb3J5OidtYXNrJyxcbmRlc2NyaXB0aW9uOlxuJ0xlZ2VuZGFyeSBtYXNrIGZyb20gQXJtYS4gQSBmYWNpYWwgY292ZXJpbmcgd2l0aCB2YXJpb3VzIHVzZXMsIGZyb20gcHJvdGVjdGlvbiB0byBkaXNndWlzZS4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidBcm1hJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL01hc2svQXJtYSUyMDQsJTIwMjAsJTIwZ3JlZW4ud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvTWFzay9Bcm1hJTIwNCwlMjAyMCwlMjBncmVlbl90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NjQsXG5maWx0ZXJpbmc6MTIsXG53ZWlnaHQ6MjIsXG5zZW5zZToxMixcbnJlc2VydmVzOjEwLFxuZHVyYWJpbGl0eTo4LFxubGV2ZWw6NjQsXG5jb2xvcnM6WycjMDA4MDAwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjNuXSxcblxuW1xue1xubmFtZTonRWxlcGhpYSAzJyxcbmNhdGVnb3J5OidtYXNrJyxcbmRlc2NyaXB0aW9uOlxuJ0xlZ2VuZGFyeSBtYXNrIGZyb20gRWxlcGhpYS4gQSBmYWNpYWwgY292ZXJpbmcgd2l0aCB2YXJpb3VzIHVzZXMsIGZyb20gcHJvdGVjdGlvbiB0byBkaXNndWlzZS4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidFbGVwaGlhJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL01hc2svRWxlcGhpYSUyMDMsJTIwMTYsJTIwYmx1ZS53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9NYXNrL0VsZXBoaWElMjAzLCUyMDE2LCUyMGJsdWVfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjYyLFxuZmlsdGVyaW5nOjUsXG53ZWlnaHQ6MTEsXG5zZW5zZToxNyxcbnJlc2VydmVzOjE4LFxuZHVyYWJpbGl0eToxMSxcbmxldmVsOjYyLFxuY29sb3JzOlsnIzAwMDBmZiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zbl0sXG5cbltcbntcbm5hbWU6J0VsZXBoaWEgNCcsXG5jYXRlZ29yeTonbWFzaycsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgbWFzayBmcm9tIEVsZXBoaWEuIEEgZmFjaWFsIGNvdmVyaW5nIHdpdGggdmFyaW91cyB1c2VzLCBmcm9tIHByb3RlY3Rpb24gdG8gZGlzZ3Vpc2UuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonRWxlcGhpYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9NYXNrL0VsZXBoaWElMjA0LCUyMDIwLCUyMGdyZWVuLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL01hc2svRWxlcGhpYSUyMDQsJTIwMjAsJTIwZ3JlZW5fdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5Ojc3LFxuZmlsdGVyaW5nOjcsXG53ZWlnaHQ6MjIsXG5zZW5zZToxNyxcbnJlc2VydmVzOjEzLFxuZHVyYWJpbGl0eToxOCxcbmxldmVsOjc3LFxuY29sb3JzOlsnIzAwODAwMCddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zbl0sXG5cbltcbntcbm5hbWU6J1N0cm9rZSAzJyxcbmNhdGVnb3J5OidwYXRjaCcsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgcGF0Y2ggZnJvbSBNb3VudC4gU2hhcGVzLCBjb2xvcnMsIGFuZCBsaW5lcyBkYW5jZSBoYXJtb25pb3VzbHksIGNyZWF0aW5nIGEgc3ltcGhvbnkgb2YgZGVzaWduIGFuZCBjdWx0dXJhbCBzaWduaWZpY2FuY2UuJyxcbmZ1bmN0aW9uYWw6ZmFsc2UsXG5vcmlnaW46J01vdW50JyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BhdHRlcm4vU3Ryb2tlJTIwMywlMjAxMywlMjB5ZWxsb3cud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvUGF0dGVybi9TdHJva2UlMjAzLCUyMDEzLCUyMHllbGxvd190aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NjUsXG5maWx0ZXJpbmc6MCxcbndlaWdodDowLFxuc2Vuc2U6MCxcbnJlc2VydmVzOjAsXG5kdXJhYmlsaXR5OjAsXG5sZXZlbDo2NSxcbmNvbG9yczpbJyNmZmZmMDAnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuM25dLFxuXG5bXG57XG5uYW1lOidXaGlybCAxICcsXG5jYXRlZ29yeToncGF0Y2gnLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IHBhdGNoIGZyb20gV2lsZGxhbmRzLiBTaGFwZXMsIGNvbG9ycywgYW5kIGxpbmVzIGRhbmNlIGhhcm1vbmlvdXNseSwgY3JlYXRpbmcgYSBzeW1waG9ueSBvZiBkZXNpZ24gYW5kIGN1bHR1cmFsIHNpZ25pZmljYW5jZS4nLFxuZnVuY3Rpb25hbDpmYWxzZSxcbm9yaWdpbjonV2lsZGxhbmRzJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BhdHRlcm4vV2hpcmwlMjAxJTIwLCUyMDE1LCUyMHJlZC53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QYXR0ZXJuL1doaXJsJTIwMSUyMCwlMjAxNSwlMjByZWRfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5Ojc1LFxuZmlsdGVyaW5nOjAsXG53ZWlnaHQ6MCxcbnNlbnNlOjAsXG5yZXNlcnZlczowLFxuZHVyYWJpbGl0eTowLFxubGV2ZWw6NzUsXG5jb2xvcnM6WycjZmYwMDAwJ10sXG5hcnRpc3RNZXRhZGF0YTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9lbm1hbnVlbGpycGVyZXovJ30sXG5cbjNuXSxcblxuW1xue1xubmFtZTonV2hpcmwgMicsXG5jYXRlZ29yeToncGF0Y2gnLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IHBhdGNoIGZyb20gRmFybWEuIFNoYXBlcywgY29sb3JzLCBhbmQgbGluZXMgZGFuY2UgaGFybW9uaW91c2x5LCBjcmVhdGluZyBhIHN5bXBob255IG9mIGRlc2lnbiBhbmQgY3VsdHVyYWwgc2lnbmlmaWNhbmNlLicsXG5mdW5jdGlvbmFsOmZhbHNlLFxub3JpZ2luOidGYXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QYXR0ZXJuL1doaXJsJTIwMiwlMjAxNiwlMjBncmVlbi53ZWJwJyxcbnRodW1ibmFpbDpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QYXR0ZXJuL1doaXJsJTIwMiwlMjAxNiwlMjBncmVlbl90aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NzYsXG5maWx0ZXJpbmc6MCxcbndlaWdodDowLFxuc2Vuc2U6MCxcbnJlc2VydmVzOjAsXG5kdXJhYmlsaXR5OjAsXG5sZXZlbDo3NixcbmNvbG9yczpbJyMwMDgwMDAnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuM25dLFxuXG5bXG57XG5uYW1lOidXaGlybCAzJyxcbmNhdGVnb3J5OidwYXRjaCcsXG5kZXNjcmlwdGlvbjpcbidMZWdlbmRhcnkgcGF0Y2ggZnJvbSBGYXJtYS4gU2hhcGVzLCBjb2xvcnMsIGFuZCBsaW5lcyBkYW5jZSBoYXJtb25pb3VzbHksIGNyZWF0aW5nIGEgc3ltcGhvbnkgb2YgZGVzaWduIGFuZCBjdWx0dXJhbCBzaWduaWZpY2FuY2UuJyxcbmZ1bmN0aW9uYWw6ZmFsc2UsXG5vcmlnaW46J0Zhcm1hJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BhdHRlcm4vV2hpcmwlMjAzLCUyMDE3LCUyMHBpbmsud2VicCcsXG50aHVtYm5haWw6XG4nUW1jNTVtN1Jyelp0QjI1bU05QjJjOUJkdFhjTERiaFNyRXJXTUFhN2F6Q2V0Ni9JdGVtcyUyMHdlYlAvUGF0dGVybi9XaGlybCUyMDMsJTIwMTcsJTIwcGlua190aHVtYm5haWwud2VicCcsXG5yYXJpdHk6NjcsXG5maWx0ZXJpbmc6MCxcbndlaWdodDowLFxuc2Vuc2U6MCxcbnJlc2VydmVzOjAsXG5kdXJhYmlsaXR5OjAsXG5sZXZlbDo2NyxcbmNvbG9yczpbJyNmZmMwY2InXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuM25dLFxuXG5bXG57XG5uYW1lOidBcm1hIDMnLFxuY2F0ZWdvcnk6J3BlcmsyJyxcbmRlc2NyaXB0aW9uOlxuJ0xlZ2VuZGFyeSBwZXJrIGZyb20gQXJtYS4gSXTigJlzIHRoZSBleHRyYSB0b3VjaCB0aGF0IGRpZmZlcmVudGlhdGVzIGFuZCB0ZW1wdHMsIGVsZXZhdGluZyB0aGUgb3ZlcmFsbCBhcHBlYWwuJyxcbmZ1bmN0aW9uYWw6dHJ1ZSxcbm9yaWdpbjonQXJtYScsXG5pbWFnZTpcbidRbWM1NW03UnJ6WnRCMjVtTTlCMmM5QmR0WGNMRGJoU3JFcldNQWE3YXpDZXQ2L0l0ZW1zJTIwd2ViUC9QZXJrJTIwMi9Bcm1hJTIwMywlMjAxMywlMjBwaW5rLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BlcmslMjAyL0FybWElMjAzLCUyMDEzLCUyMHBpbmtfdGh1bWJuYWlsLndlYnAnLFxucmFyaXR5OjY1LFxuZmlsdGVyaW5nOjE0LFxud2VpZ2h0OjExLFxuc2Vuc2U6NixcbnJlc2VydmVzOjIwLFxuZHVyYWJpbGl0eToxNCxcbmxldmVsOjY1LFxuY29sb3JzOlsnI2ZmYzBjYiddLFxuYXJ0aXN0TWV0YWRhdGE6J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZW5tYW51ZWxqcnBlcmV6Lyd9LFxuXG4zbl0sXG5cbltcbntcbm5hbWU6J0VsZXBoaWEgMycsXG5jYXRlZ29yeToncGVyazInLFxuZGVzY3JpcHRpb246XG4nTGVnZW5kYXJ5IHBlcmsgZnJvbSBFbGVwaGlhLiBJdOKAmXMgdGhlIGV4dHJhIHRvdWNoIHRoYXQgZGlmZmVyZW50aWF0ZXMgYW5kIHRlbXB0cywgZWxldmF0aW5nIHRoZSBvdmVyYWxsIGFwcGVhbC4nLFxuZnVuY3Rpb25hbDp0cnVlLFxub3JpZ2luOidFbGVwaGlhJyxcbmltYWdlOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BlcmslMjAyL0VsZXBoaWElMjAzLCUyMDEzLCUyMGdyZWVuLndlYnAnLFxudGh1bWJuYWlsOlxuJ1FtYzU1bTdScnpadEIyNW1NOUIyYzlCZHRYY0xEYmhTckVyV01BYTdhekNldDYvSXRlbXMlMjB3ZWJQL1BlcmslMjAyL0VsZXBoaWElMjAzLCUyMDEzLCUyMGdyZWVuX3RodW1ibmFpbC53ZWJwJyxcbnJhcml0eTo2NSxcbmZpbHRlcmluZzoyLFxud2VpZ2h0OjE1LFxuc2Vuc2U6MjIsXG5yZXNlcnZlczoxMyxcbmR1cmFiaWxpdHk6MTMsXG5sZXZlbDo2NSxcbmNvbG9yczpbJyMwMDgwMDAnXSxcbmFydGlzdE1ldGFkYXRhOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2VubWFudWVsanJwZXJlei8nfSxcblxuM25dXTskaM2PX29uY2UubWFya2V0cGxhY2VMaXN0aW5nc0xlZ2VuZGFyeShtYXJrZXRwbGFjZUxpc3RpbmdzTGVnZW5kYXJ5KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImJhc2VDaGFyYWN0ZXJzIjpbImJhc2VDaGFyYWN0ZXJzIl0sImJhc2VJdGVtcyI6WyJiYXNlSXRlbXMiXSwibWFya2V0cGxhY2VMaXN0aW5nc0NvbW1vbiI6WyJtYXJrZXRwbGFjZUxpc3RpbmdzQ29tbW9uIl0sIm1hcmtldHBsYWNlTGlzdGluZ3NVbmNvbW1vbiI6WyJtYXJrZXRwbGFjZUxpc3RpbmdzVW5jb21tb24iXSwibWFya2V0cGxhY2VMaXN0aW5nc1JhcmUiOlsibWFya2V0cGxhY2VMaXN0aW5nc1JhcmUiXSwibWFya2V0cGxhY2VMaXN0aW5nc0xlZ2VuZGFyeSI6WyJtYXJrZXRwbGFjZUxpc3RpbmdzTGVnZW5kYXJ5Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAACWYHctJwAALScAADoAAABrcmVhZC1jb250cmFjdC12MC4xLjAvc3JjL3Byb3Bvc2FsL3N0YXJ0LWtyZWFkLXByb3Bvc2FsLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvaW50ZXJuYWwiLCJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiLi9iYXNlLWludmVudG9yeS5qcyIsIkBhZ29yaWMvZXJ0cC9zcmMvYW1vdW50TWF0aC5qcyJdLCJleHBvcnRzIjpbImdldE1hbmlmZXN0Rm9yU3RhcnRLcmVhZCIsInJlc2VydmVUaGVuR2V0TmFtZVBhdGhzIiwic3RhcnRLcmVhZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBkZWVwbHlGdWxmaWxsZWRPYmplY3QsbWFrZVRyYWNlcixFLGRlZXBseUZ1bGZpbGxlZCxtYWtlTWFyc2hhbCxiYXNlQ2hhcmFjdGVycyxiYXNlSXRlbXMsbWFya2V0cGxhY2VMaXN0aW5nc0NvbW1vbixtYXJrZXRwbGFjZUxpc3RpbmdzVW5jb21tb24sbWFya2V0cGxhY2VMaXN0aW5nc1JhcmUsbWFya2V0cGxhY2VMaXN0aW5nc0xlZ2VuZGFyeSxBbW91bnRNYXRoOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wiZGVlcGx5RnVsZmlsbGVkT2JqZWN0XCIsIFskaM2PX2EgPT4gKGRlZXBseUZ1bGZpbGxlZE9iamVjdCA9ICRozY9fYSldXSxbXCJtYWtlVHJhY2VyXCIsIFskaM2PX2EgPT4gKG1ha2VUcmFjZXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjNj19hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaM2PX2EpXV0sW1wibWFrZU1hcnNoYWxcIiwgWyRozY9fYSA9PiAobWFrZU1hcnNoYWwgPSAkaM2PX2EpXV1dXSxbXCIuL2Jhc2UtaW52ZW50b3J5LmpzXCIsIFtbXCJiYXNlQ2hhcmFjdGVyc1wiLCBbJGjNj19hID0+IChiYXNlQ2hhcmFjdGVycyA9ICRozY9fYSldXSxbXCJiYXNlSXRlbXNcIiwgWyRozY9fYSA9PiAoYmFzZUl0ZW1zID0gJGjNj19hKV1dLFtcIm1hcmtldHBsYWNlTGlzdGluZ3NDb21tb25cIiwgWyRozY9fYSA9PiAobWFya2V0cGxhY2VMaXN0aW5nc0NvbW1vbiA9ICRozY9fYSldXSxbXCJtYXJrZXRwbGFjZUxpc3RpbmdzVW5jb21tb25cIiwgWyRozY9fYSA9PiAobWFya2V0cGxhY2VMaXN0aW5nc1VuY29tbW9uID0gJGjNj19hKV1dLFtcIm1hcmtldHBsYWNlTGlzdGluZ3NSYXJlXCIsIFskaM2PX2EgPT4gKG1hcmtldHBsYWNlTGlzdGluZ3NSYXJlID0gJGjNj19hKV1dLFtcIm1hcmtldHBsYWNlTGlzdGluZ3NMZWdlbmRhcnlcIiwgWyRozY9fYSA9PiAobWFya2V0cGxhY2VMaXN0aW5nc0xlZ2VuZGFyeSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvZXJ0cC9zcmMvYW1vdW50TWF0aC5qc1wiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3QgS1JFQURfTEFCRUw9J0tSRUFkJztcblxuY29uc3QgdHJhY2U9bWFrZVRyYWNlcihLUkVBRF9MQUJFTCk7XG5cbmNvbnN0IGNvbnRyYWN0SW5mbz17XG5zdG9yYWdlUGF0aDona3JlYWQnLFxuaW5zdGFuY2VOYW1lOidrcmVhZCd9O1xuXG5cbmNvbnN0e0ZhaWx9PWFzc2VydDtcblxuY29uc3QgICAgICAgIHJlc2VydmVUaGVuR2V0TmFtZVBhdGhzPWFzeW5jKG5hbWVBZG1pbixwYXRocyk9Pntcbi8qXG5cblxuICAgKi9cbmNvbnN0IG5leHRQYXRoPWFzeW5jKG5leHRBZG1pbixwYXRoKT0+e1xuY29uc3RbbmV4dE5hbWUsLi4ucmVzdF09cGF0aDtcbmFzc2VydC50eXBlb2YobmV4dE5hbWUsJ3N0cmluZycpO1xuXG4vL1xuYXdhaXQgRShuZXh0QWRtaW4pLnJlc2VydmUobmV4dE5hbWUpO1xuXG5pZihyZXN0Lmxlbmd0aD09PTApe1xuLy9cbmNvbnN0IG5hbWVIdWI9RShuZXh0QWRtaW4pLnJlYWRvbmx5KCk7XG5yZXR1cm4gRShuYW1lSHViKS5sb29rdXAobmV4dE5hbWUpO1xuIH1cblxuLy9cbmNvbnN0IHJlc3RBZG1pbj1hd2FpdCBFKG5leHRBZG1pbikubG9va3VwQWRtaW4obmV4dE5hbWUpO1xucmV0dXJuIG5leHRQYXRoKHJlc3RBZG1pbixyZXN0KTtcbiB9O1xuXG5yZXR1cm4gUHJvbWlzZS5hbGwoXG5wYXRocy5tYXAoYXN5bmMocGF0aCk9PntcbkFycmF5LmlzQXJyYXkocGF0aCl8fEZhaWwgYHBhdGggJHtwYXRofSBpcyBub3QgYW4gYXJyYXlgO1xucmV0dXJuIG5leHRQYXRoKG5hbWVBZG1pbixwYXRoKTtcbiB9KSk7XG5cbiB9OyRozY9fb25jZS5yZXNlcnZlVGhlbkdldE5hbWVQYXRocyhyZXNlcnZlVGhlbkdldE5hbWVQYXRocyk7XG5cbmNvbnN0IEJPQVJEX0FVWD0nYm9hcmRBdXgnO1xuXG5jb25zdCBtYXJzaGFsRGF0YT1tYWtlTWFyc2hhbCgoX3ZhbCk9PkZhaWwgYGRhdGEgb25seWApO1xuXG5jb25zdCBtYWtlQm9hcmRBdXhOb2RlPWFzeW5jKGNoYWluU3RvcmFnZSxib2FyZElkKT0+e1xuY29uc3QgYm9hcmRBdXg9RShjaGFpblN0b3JhZ2UpLm1ha2VDaGlsZE5vZGUoQk9BUkRfQVVYKTtcbnJldHVybiBFKGJvYXJkQXV4KS5tYWtlQ2hpbGROb2RlKGJvYXJkSWQpO1xuIH07XG5cbmNvbnN0IHB1Ymxpc2hCcmFuZEluZm89YXN5bmMoY2hhaW5TdG9yYWdlLGJvYXJkLGJyYW5kKT0+e1xuY29uc3RbaWQsZGlzcGxheUluZm8sYWxsZWdlZE5hbWVdPWF3YWl0IFByb21pc2UuYWxsKFtcbkUoYm9hcmQpLmdldElkKGJyYW5kKSxcbkUoYnJhbmQpLmdldERpc3BsYXlJbmZvKCksXG5FKGJyYW5kKS5nZXRBbGxlZ2VkTmFtZSgpXSk7XG5cbmNvbnN0IG5vZGU9bWFrZUJvYXJkQXV4Tm9kZShjaGFpblN0b3JhZ2UsaWQpO1xuY29uc3QgYXV4PW1hcnNoYWxEYXRhLnRvQ2FwRGF0YShoYXJkZW4oe2FsbGVnZWROYW1lLGRpc3BsYXlJbmZvfSkpO1xuYXdhaXQgRShub2RlKS5zZXRWYWx1ZShKU09OLnN0cmluZ2lmeShhdXgpKTtcbiB9O1xuXG5jb25zdCBDT05UUkFDVF9FTEVDVE9SQVRFPSdFbGVjdG9yYXRlJztcbmNvbnN0IFBhcmFtVHlwZXM9e1xuSU5WSVRBVElPTjonaW52aXRhdGlvbid9O1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RhcnRHb3Zlcm5lZEluc3RhbmNlPWFzeW5jKFxue1xuem9lLFxuZ292ZXJuZWRDb250cmFjdEluc3RhbGxhdGlvbixcbmlzc3VlcktleXdvcmRSZWNvcmQsXG50ZXJtcyxcbnByaXZhdGVBcmdzLFxubGFiZWx9LFxuXG57Z292ZXJuZWRQYXJhbXMsdGltZXIsY29udHJhY3RHb3Zlcm5vcixjb21taXR0ZWVDcmVhdG9yfSk9Plxue1xuY29uc3QgcG9zZXJJbnZpdGF0aW9uUD1FKGNvbW1pdHRlZUNyZWF0b3IpLmdldFBvc2VySW52aXRhdGlvbigpO1xuY29uc3RbaW5pdGlhbFBvc2VySW52aXRhdGlvbixlbGVjdG9yYXRlSW52aXRhdGlvbkFtb3VudF09XG5hd2FpdCBQcm9taXNlLmFsbChbXG5wb3Nlckludml0YXRpb25QLFxuRShFKHpvZSkuZ2V0SW52aXRhdGlvbklzc3VlcigpKS5nZXRBbW91bnRPZihwb3Nlckludml0YXRpb25QKV0pO1xuXG5cbnRyYWNlKCdhd2FpdGluZyBnb3Zlcm5vclRlcm1zJyk7XG5jb25zdCBnb3Zlcm5vclRlcm1zPWF3YWl0IGRlZXBseUZ1bGZpbGxlZE9iamVjdChcbmhhcmRlbih7XG50aW1lcixcbmdvdmVybmVkQ29udHJhY3RJbnN0YWxsYXRpb24sXG5nb3Zlcm5lZDp7XG50ZXJtczp7XG4uLi50ZXJtcyxcbmdvdmVybmVkUGFyYW1zOntcbltDT05UUkFDVF9FTEVDVE9SQVRFXTp7XG50eXBlOlBhcmFtVHlwZXMuSU5WSVRBVElPTixcbnZhbHVlOmVsZWN0b3JhdGVJbnZpdGF0aW9uQW1vdW50fSxcblxuLi4uZ292ZXJuZWRQYXJhbXN9fSxcblxuXG5pc3N1ZXJLZXl3b3JkUmVjb3JkLFxubGFiZWx9fSkpO1xuXG5cblxuXG50cmFjZSgnYXdhaXRpbmcgc3RhcnRJbnN0YW5jZScpO1xuY29uc3QgZ292ZXJub3JGYWNldHM9YXdhaXQgRSh6b2UpLnN0YXJ0SW5zdGFuY2UoXG5jb250cmFjdEdvdmVybm9yLFxue30sXG5nb3Zlcm5vclRlcm1zLFxuaGFyZGVuKHtcbmVjb25vbWljQ29tbWl0dGVlQ3JlYXRvckZhY2V0OmNvbW1pdHRlZUNyZWF0b3IsXG5nb3Zlcm5lZDp7XG4uLi5wcml2YXRlQXJncyxcbmluaXRpYWxQb3Nlckludml0YXRpb259fSksXG5cblxuIGAke2xhYmVsfS1nb3Zlcm5vcmApO1xuXG5cbnRyYWNlKCdhd2FpdGluZyBmYWNldHMnKTtcbmNvbnN0W2luc3RhbmNlLHB1YmxpY0ZhY2V0LGNyZWF0b3JGYWNldCxhZG1pbkZhY2V0XT1hd2FpdCBQcm9taXNlLmFsbChbXG5FKGdvdmVybm9yRmFjZXRzLmNyZWF0b3JGYWNldCkuZ2V0SW5zdGFuY2UoKSxcbkUoZ292ZXJub3JGYWNldHMuY3JlYXRvckZhY2V0KS5nZXRQdWJsaWNGYWNldCgpLFxuRShnb3Zlcm5vckZhY2V0cy5jcmVhdG9yRmFjZXQpLmdldENyZWF0b3JGYWNldCgpLFxuRShnb3Zlcm5vckZhY2V0cy5jcmVhdG9yRmFjZXQpLmdldEFkbWluRmFjZXQoKV0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBmYWNldHM9aGFyZGVuKHtcbmluc3RhbmNlLFxucHVibGljRmFjZXQsXG5nb3Zlcm5vcjpnb3Zlcm5vckZhY2V0cy5pbnN0YW5jZSxcbmNyZWF0b3JGYWNldCxcbmFkbWluRmFjZXQsXG5nb3Zlcm5vckNyZWF0b3JGYWNldDpnb3Zlcm5vckZhY2V0cy5jcmVhdG9yRmFjZXQsXG5nb3Zlcm5vckFkbWluRmFjZXQ6Z292ZXJub3JGYWNldHMuYWRtaW5GYWNldH0pO1xuXG5yZXR1cm4gZmFjZXRzO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuLy9cbmNvbnN0ICAgICAgICBzdGFydEtyZWFkPWFzeW5jKHBvd2Vycyxjb25maWcpPT57XG5jb25zdHtcbi8vXG4vL1xuem9uZTpyb290Wm9uZSxcbmNvbnN1bWU6e1xuem9lLFxuY2hhaW5UaW1lclNlcnZpY2UsXG5jaGFpblN0b3JhZ2UsXG5ib2FyZCxcbmtyZWFkQ29tbWl0dGVlQ3JlYXRvckZhY2V0LFxubmFtZXNCeUFkZHJlc3NBZG1pbn0sXG5cbnByb2R1Y2U6e2tyZWFkS2l0OnByb2R1Y2VLcmVhZEtpdH0sXG5icmFuZDp7XG5wcm9kdWNlOntcbktSRUFkQ0hBUkFDVEVSOnByb2R1Y2VDaGFyYWN0ZXJCcmFuZCxcbktSRUFkSVRFTTpwcm9kdWNlSXRlbUJyYW5kfX0sXG5cblxuaXNzdWVyOntcbmNvbnN1bWU6e0lTVDppc3RJc3N1ZXJQfSxcbnByb2R1Y2U6e1xuS1JFQWRDSEFSQUNURVI6cHJvZHVjZUNoYXJhY3Rlcklzc3VlcixcbktSRUFkSVRFTTpwcm9kdWNlSXRlbUlzc3Vlcn19LFxuXG5cbmluc3RhbGxhdGlvbjp7XG5jb25zdW1lOntrcmVhZEtpdDppbnN0YWxsYXRpb24sY29udHJhY3RHb3Zlcm5vcn19LFxuXG5pbnN0YW5jZTp7XG5wcm9kdWNlOntbY29udHJhY3RJbmZvLmluc3RhbmNlTmFtZV06cHJvZHVjZUtyZWFkSW5zdGFuY2V9fX09XG5cbnBvd2VycztcblxuY29uc3Qgem9uZT1yb290Wm9uZS5zdWJab25lKGNvbnRyYWN0SW5mby5zdG9yYWdlUGF0aCk7XG5cbmNvbnN0e3JveWFsdHlBZGRyLHBsYXRmb3JtRmVlQWRkcn09Y29uZmlnLm9wdGlvbnM7XG5cbnRyYWNlKCdhd2FpdGluZyByb3lhbHR5RGVwb3NpdEZhY2V0Jyk7XG5jb25zdFtyb3lhbHR5RGVwb3NpdEZhY2V0XT1hd2FpdCByZXNlcnZlVGhlbkdldE5hbWVQYXRocyhcbm5hbWVzQnlBZGRyZXNzQWRtaW4sXG5bW3JveWFsdHlBZGRyLCdkZXBvc2l0RmFjZXQnXV0pO1xuXG50cmFjZSgnYXdhaXRpbmcgcGxhdGZvcm1GZWVEZXBvc2l0RmFjZXQnKTtcbmNvbnN0W3BsYXRmb3JtRmVlRGVwb3NpdEZhY2V0XT1hd2FpdCByZXNlcnZlVGhlbkdldE5hbWVQYXRocyhcbm5hbWVzQnlBZGRyZXNzQWRtaW4sXG5bW3BsYXRmb3JtRmVlQWRkciwnZGVwb3NpdEZhY2V0J11dKTtcblxuXG5jb25zdCByb3lhbHR5UmF0ZT17XG5udW1lcmF0b3I6MTBuLFxuZGVub21pbmF0b3I6MTAwbn07XG5cbmNvbnN0IHBsYXRmb3JtRmVlUmF0ZT17XG5udW1lcmF0b3I6M24sXG5kZW5vbWluYXRvcjoxMDBufTtcblxuXG5jb25zdCBtaW50Um95YWx0eVJhdGU9e1xubnVtZXJhdG9yOjg1bixcbmRlbm9taW5hdG9yOjEwMG59O1xuXG5jb25zdCBtaW50UGxhdGZvcm1GZWVSYXRlPXtcbm51bWVyYXRvcjoxNW4sXG5kZW5vbWluYXRvcjoxMDBufTtcblxuLyogICAgICAgICAgICAgICAgICovXG5jb25zdCBrcmVhZFBvd2Vycz1hd2FpdCBkZWVwbHlGdWxmaWxsZWQoXG5oYXJkZW4oe1xuc3RvcmFnZU5vZGU6RShjaGFpblN0b3JhZ2UpLm1ha2VDaGlsZE5vZGUoY29udHJhY3RJbmZvLnN0b3JhZ2VQYXRoKSxcbm1hcnNoYWxsZXI6RShib2FyZCkuZ2V0UmVhZG9ubHlNYXJzaGFsbGVyKCl9KSk7XG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0ZXJtcz1oYXJkZW4oe1xucm95YWx0eVJhdGUsXG5wbGF0Zm9ybUZlZVJhdGUsXG5taW50Um95YWx0eVJhdGUsXG5taW50UGxhdGZvcm1GZWVSYXRlLFxucm95YWx0eURlcG9zaXRGYWNldCxcbnBsYXRmb3JtRmVlRGVwb3NpdEZhY2V0LFxubWludEZlZTo1MDAwMDAwbixcbmFzc2V0TmFtZXM6e1xuY2hhcmFjdGVyOidLUkVBZENIQVJBQ1RFUicsXG5pdGVtOidLUkVBZElURU0nfSxcblxubWluVW5jb21tb25SYXRpbmc6MjB9KTtcblxuXG5jb25zdCBjbG9jaz1hd2FpdCBFKGNoYWluVGltZXJTZXJ2aWNlKS5nZXRDbG9jaygpO1xuY29uc3Qga3JlYWRDb25maWc9aGFyZGVuKHtcbmNsb2NrLFxuc2VlZDozMDN9KTtcblxuXG5jb25zdCBwcml2YXRlQXJncz1oYXJkZW4oe3Bvd2VyczprcmVhZFBvd2VycywuLi5rcmVhZENvbmZpZ30pO1xuXG50cmFjZSgnYXdhaXRpbmcgTW9uZXknKTtcbmNvbnN0IE1vbmV5PWF3YWl0IGlzdElzc3VlclA7XG50cmFjZSgnYXdhaXRpbmcgc3RhcnRHb3Zlcm5lZEluc3RhbmNlJyk7XG5jb25zdCBmYWNldHM9YXdhaXQgc3RhcnRHb3Zlcm5lZEluc3RhbmNlKFxue1xuem9lLFxuZ292ZXJuZWRDb250cmFjdEluc3RhbGxhdGlvbjppbnN0YWxsYXRpb24sXG5pc3N1ZXJLZXl3b3JkUmVjb3JkOmhhcmRlbih7TW9uZXl9KSxcbnRlcm1zLFxucHJpdmF0ZUFyZ3MsXG5sYWJlbDpLUkVBRF9MQUJFTH0sXG5cbntcbmdvdmVybmVkUGFyYW1zOnt9LFxudGltZXI6Y2hhaW5UaW1lclNlcnZpY2UsXG5jb250cmFjdEdvdmVybm9yLFxuY29tbWl0dGVlQ3JlYXRvcjprcmVhZENvbW1pdHRlZUNyZWF0b3JGYWNldH0pO1xuXG5cblxuY29uc3Qga3JlYWRLaXQ9aGFyZGVuKHtcbi4uLmZhY2V0cyxcbmxhYmVsOktSRUFEX0xBQkVMLFxucHJpdmF0ZUFyZ3N9KTtcblxucHJvZHVjZUtyZWFkS2l0LnJlc29sdmUoa3JlYWRLaXQpO1xuY29uc3QgY2s9em9uZS5tYXBTdG9yZSgnQ29udHJhY3RLaXRzJyk7XG5jay5pbml0KGZhY2V0cy5pbnN0YW5jZSxrcmVhZEtpdCk7XG5cbnRyYWNlKCdhd2FpdGluZyB0ZXJtcycpO1xuY29uc3R7Y3JlYXRvckZhY2V0LGluc3RhbmNlfT1mYWNldHM7XG5jb25zdHtcbmlzc3VlcnM6e0tSRUFkQ0hBUkFDVEVSOmNoYXJhY3Rlcklzc3VlcixLUkVBZElURU06aXRlbUlzc3Vlcn0sXG5icmFuZHM6e0tSRUFkQ0hBUkFDVEVSOmNoYXJhY3RlckJyYW5kLEtSRUFkSVRFTTppdGVtQnJhbmR9fT1cbmF3YWl0IEUoem9lKS5nZXRUZXJtcyhpbnN0YW5jZSk7XG50cmFjZSgnYWRkaW5nIHRvIGJvYXJkQXV4Jyk7XG5hd2FpdCBwdWJsaXNoQnJhbmRJbmZvKGNoYWluU3RvcmFnZSxib2FyZCxjaGFyYWN0ZXJCcmFuZCk7XG5hd2FpdCBwdWJsaXNoQnJhbmRJbmZvKGNoYWluU3RvcmFnZSxib2FyZCxpdGVtQnJhbmQpO1xuXG5jb25zdCBicmFuZD1hd2FpdCBFKE1vbmV5KS5nZXRCcmFuZCgpO1xuXG5jb25zdCBtYXJrZXRwbGFjZUFtb3VudENvbW1vbj1BbW91bnRNYXRoLm1ha2UoYnJhbmQsMTAwMDAwMG4pO1xuY29uc3QgbWFya2V0cGxhY2VBbW91bnRVbmNvbW1vbj1BbW91bnRNYXRoLm1ha2UoYnJhbmQsMjAwMDAwMG4pO1xuY29uc3QgbWFya2V0cGxhY2VBbW91bnRSYXJlPUFtb3VudE1hdGgubWFrZShicmFuZCw0MDAwMDAwbik7XG5jb25zdCBtYXJrZXRwbGFjZUFtb3VudExlZ2VuZGFyeT1BbW91bnRNYXRoLm1ha2UoYnJhbmQsODAwMDAwMG4pO1xuXG50cmFjZSgnYXdhaXRpbmcgS1JFQWQgaW5pdGlhbGl6YXRpb24nKTtcbmF3YWl0IFByb21pc2UuYWxsKFtcbkUoY3JlYXRvckZhY2V0KS5pbml0aWFsaXplQmFzZUFzc2V0cyhiYXNlQ2hhcmFjdGVycyxiYXNlSXRlbXMpLFxuRShjcmVhdG9yRmFjZXQpLmluaXRpYWxpemVNZXRyaWNzKCksXG5FKGNyZWF0b3JGYWNldCkuaW5pdGlhbGl6ZUNoYXJhY3Rlck5hbWVzRW50cmllcygpLFxuRShjcmVhdG9yRmFjZXQpLnJldml2ZU1hcmtldEV4aXRTdWJzY3JpYmVycygpLFxuRShjcmVhdG9yRmFjZXQpLnB1Ymxpc2hJdGVtQ29sbGVjdGlvbihcbm1hcmtldHBsYWNlQW1vdW50Q29tbW9uLFxubWFya2V0cGxhY2VMaXN0aW5nc0NvbW1vbiksXG5cbkUoY3JlYXRvckZhY2V0KS5wdWJsaXNoSXRlbUNvbGxlY3Rpb24oXG5tYXJrZXRwbGFjZUFtb3VudFVuY29tbW9uLFxubWFya2V0cGxhY2VMaXN0aW5nc1VuY29tbW9uKSxcblxuRShjcmVhdG9yRmFjZXQpLnB1Ymxpc2hJdGVtQ29sbGVjdGlvbihcbm1hcmtldHBsYWNlQW1vdW50UmFyZSxcbm1hcmtldHBsYWNlTGlzdGluZ3NSYXJlKSxcblxuRShjcmVhdG9yRmFjZXQpLnB1Ymxpc2hJdGVtQ29sbGVjdGlvbihcbm1hcmtldHBsYWNlQW1vdW50TGVnZW5kYXJ5LFxubWFya2V0cGxhY2VMaXN0aW5nc0xlZ2VuZGFyeSldKTtcblxuXG5cbnByb2R1Y2VLcmVhZEluc3RhbmNlLnJlc29sdmUoaW5zdGFuY2UpO1xuXG4vL1xucHJvZHVjZUNoYXJhY3Rlcklzc3Vlci5yZXNvbHZlKGNoYXJhY3Rlcklzc3Vlcik7XG5wcm9kdWNlQ2hhcmFjdGVyQnJhbmQucmVzb2x2ZShjaGFyYWN0ZXJCcmFuZCk7XG5wcm9kdWNlSXRlbUlzc3Vlci5yZXNvbHZlKGl0ZW1Jc3N1ZXIpO1xucHJvZHVjZUl0ZW1CcmFuZC5yZXNvbHZlKGl0ZW1CcmFuZCk7XG5cbnRyYWNlKCdDT05UUkFDVCBJTklUIFNVQ0NFU1MhJyk7XG4gfTskaM2PX29uY2Uuc3RhcnRLcmVhZChzdGFydEtyZWFkKTtcbmhhcmRlbihzdGFydEtyZWFkKTtcblxuY29uc3QgICAgICAgIGdldE1hbmlmZXN0Rm9yU3RhcnRLcmVhZD1hc3luYyhcbntyZXN0b3JlUmVmfSxcbntyb3lhbHR5QWRkcixwbGF0Zm9ybUZlZUFkZHIsa3JlYWRLaXRSZWZ9KT0+KFxue1xubWFuaWZlc3Q6e1xuW3N0YXJ0S3JlYWQubmFtZV06e1xuem9uZTp0cnVlLFxuY29uc3VtZTp7XG5ib2FyZDp0cnVlLFxuem9lOnRydWUsXG5jaGFpblRpbWVyU2VydmljZTp0cnVlLFxuY2hhaW5TdG9yYWdlOnRydWUsXG5rcmVhZENvbW1pdHRlZUNyZWF0b3JGYWNldDp0cnVlLFxuYWdvcmljTmFtZXM6dHJ1ZSxcbm5hbWVzQnlBZGRyZXNzQWRtaW46dHJ1ZX0sXG5cbmluc3RhbmNlOntcbnByb2R1Y2U6e1tjb250cmFjdEluZm8uaW5zdGFuY2VOYW1lXTp0cnVlfX0sXG5cbmluc3RhbGxhdGlvbjp7XG5jb25zdW1lOntcbmtyZWFkS2l0OnRydWUsXG5jb250cmFjdEdvdmVybm9yOnRydWV9fSxcblxuXG5icmFuZDp7XG5wcm9kdWNlOntcbktSRUFkQ0hBUkFDVEVSOnRydWUsXG5LUkVBZElURU06dHJ1ZX19LFxuXG5cbmlzc3Vlcjp7XG5jb25zdW1lOntJU1Q6dHJ1ZX0sXG5wcm9kdWNlOntcbktSRUFkQ0hBUkFDVEVSOnRydWUsXG5LUkVBZElURU06dHJ1ZX19LFxuXG5cbnByb2R1Y2U6e2tyZWFkS2l0OnRydWV9fX0sXG5cblxuaW5zdGFsbGF0aW9uczp7XG5rcmVhZEtpdDpyZXN0b3JlUmVmKGtyZWFkS2l0UmVmKX0sXG5cbm9wdGlvbnM6e3JveWFsdHlBZGRyLHBsYXRmb3JtRmVlQWRkcn19KTskaM2PX29uY2UuZ2V0TWFuaWZlc3RGb3JTdGFydEtyZWFkKGdldE1hbmlmZXN0Rm9yU3RhcnRLcmVhZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJyZXNlcnZlVGhlbkdldE5hbWVQYXRocyI6WyJyZXNlcnZlVGhlbkdldE5hbWVQYXRocyJdLCJzdGFydEtyZWFkIjpbInN0YXJ0S3JlYWQiXSwiZ2V0TWFuaWZlc3RGb3JTdGFydEtyZWFkIjpbImdldE1hbmlmZXN0Rm9yU3RhcnRLcmVhZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsBAh4DCgAAAAAAAAAAAPGBGwY/UwEAP1MBABQAAAAAAAAAAAAAAKSBAAAAAGNvbXBhcnRtZW50LW1hcC5qc29uUEsBAh4DCgAAAAAAAAAAAFzNqocAHQAAAB0AADwAAAAAAAAAAAAAAKSBcVMBAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvYW1vdW50TWF0aC5qc1BLAQIeAwoAAAAAAAAAAADkq2Pu4QUAAOEFAABQAAAAAAAAAAAAAACkgctwAQBAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAABBhY94nwUAAJ8FAABQAAAAAAAAAAAAAACkgRp3AQBAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAACVK3DJZwQAAGcEAABMAAAAAAAAAAAAAACkgSd9AQBAYWdvcmljL2VydHAtdjAuMTYuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAEcKueNIBgAASAYAAEwAAAAAAAAAAAAAAKSB+IEBAEBhZ29yaWMvZXJ0cC12MC4xNi4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAMgP9Gc0FAADNBQAAOwAAAAAAAAAAAAAApIGqiAEAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9jb25maWcuanNQSwECHgMKAAAAAAAAAAAAnKi0l0gEAABIBAAAOgAAAAAAAAAAAAAApIHQjgEAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9kZWJ1Zy5qc1BLAQIeAwoAAAAAAAAAAAAC1eDCjgIAAI4CAAA7AAAAAAAAAAAAAACkgXCTAQBAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2Vycm9ycy5qc1BLAQIeAwoAAAAAAAAAAAAf9quECwUAAAsFAAA6AAAAAAAAAAAAAACkgVeWAQBAYWdvcmljL2ludGVybmFsLXYwLjMuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAMwvptUfBwAAHwcAAD0AAAAAAAAAAAAAAKSBupsBAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvanMtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAtr0hXmsIAABrCAAAQQAAAAAAAAAAAAAApIE0owEAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9tZXRob2QtdG9vbHMuanNQSwECHgMKAAAAAAAAAAAAmgUfr4YdAACGHQAAPgAAAAAAAAAAAAAApIH+qwEAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zZXMtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAh6paIP0CAAD9AgAAPgAAAAAAAAAAAAAApIHgyQEAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlQ2hlY2suanNQSwECHgMKAAAAAAAAAAAAopUBEE4DAABOAwAAPwAAAAAAAAAAAAAApIE5zQEAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAAEAAAAAAAAAAAAAAAKSB5NABAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdHlwZXMtaW5kZXguanNQSwECHgMKAAAAAAAAAAAAyEDQBpQNAACUDQAANwAAAAAAAAAAAAAApIGM0gEAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADwIquuNQUAADUFAABCAAAAAAAAAAAAAACkgXXgAQBAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanNQSwECHgMKAAAAAAAAAAAAusRN7fcEAAD3BAAARgAAAAAAAAAAAAAApIEK5gEAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qc1BLAQIeAwoAAAAAAAAAAAA7XjyCnBAAAJwQAABHAAAAAAAAAAAAAACkgWXrAQBAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAACYLN8lzQsAAM0LAABHAAAAAAAAAAAAAACkgWb8AQBAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADpDjncsA0AALANAABLAAAAAAAAAAAAAACkgZgIAgBAYWdvcmljL3N0b3JlLXYwLjkuMy1kZXYtNWE0ZmMwMS4wKzVhNGZjMDEvc3JjL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanNQSwECHgMKAAAAAAAAAAAAVH0nFXMKAABzCgAASwAAAAAAAAAAAAAApIGxFgIAQGFnb3JpYy9zdG9yZS12MC45LjMtZGV2LTVhNGZjMDEuMCs1YTRmYzAxL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAHnbC4erDgAAqw4AAEQAAAAAAAAAAAAAAKSBjSECAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAADcAAAAAAAAAAAAAAKSBmjACAEBhZ29yaWMvc3RvcmUtdjAuOS4zLWRldi01YTRmYzAxLjArNWE0ZmMwMS9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAVOJbuMcEAADHBAAAKwAAAAAAAAAAAAAApIE5MgIAQGVuZG8vY29tbW9uLXYxLjIuOC9hcHBseS1sYWJlbGluZy1lcnJvci5qc1BLAQIeAwoAAAAAAAAAAACQBleGXAQAAFwEAAAqAAAAAAAAAAAAAACkgUk3AgBAZW5kby9jb21tb24tdjEuMi44L2Zyb20tdW5pcXVlLWVudHJpZXMuanNQSwECHgMKAAAAAAAAAAAAUXMNpDcCAAA3AgAAJAAAAAAAAAAAAAAApIHtOwIAQGVuZG8vY29tbW9uLXYxLjIuOC9pZGVudC1jaGVja2VyLmpzUEsBAh4DCgAAAAAAAAAAAGFY/oZ4AgAAeAIAACYAAAAAAAAAAAAAAKSBZj4CAEBlbmRvL2NvbW1vbi12MS4yLjgvbGlzdC1kaWZmZXJlbmNlLmpzUEsBAh4DCgAAAAAAAAAAAA+bwKhdAwAAXQMAACoAAAAAAAAAAAAAAKSBIkECAEBlbmRvL2NvbW1vbi12MS4yLjgvbWFrZS1hcnJheS1pdGVyYXRvci5qc1BLAQIeAwoAAAAAAAAAAABWiwnjOQIAADkCAAAkAAAAAAAAAAAAAACkgcdEAgBAZW5kby9jb21tb24tdjEuMi44L21ha2UtaXRlcmF0b3IuanNQSwECHgMKAAAAAAAAAAAArVcGfgIDAAACAwAAIQAAAAAAAAAAAAAApIFCRwIAQGVuZG8vY29tbW9uLXYxLjIuOC9vYmplY3QtbWFwLmpzUEsBAh4DCgAAAAAAAAAAADufX47hAwAA4QMAACYAAAAAAAAAAAAAAKSBg0oCAEBlbmRvL2NvbW1vbi12MS4yLjgvb2JqZWN0LW1ldGEtbWFwLmpzUEsBAh4DCgAAAAAAAAAAAMICGsvhAwAA4QMAACQAAAAAAAAAAAAAAKSBqE4CAEBlbmRvL2NvbW1vbi12MS4yLjgvdGhyb3ctbGFiZWxlZC5qc1BLAQIeAwoAAAAAAAAAAADFGOc6lAEAAJQBAAAhAAAAAAAAAAAAAACkgctSAgBAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAkrdHfuwNAADsDQAAKwAAAAAAAAAAAAAApIGeVAIAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44L3NyYy9lbnYtb3B0aW9ucy5qc1BLAQIeAwoAAAAAAAAAAAD8cGkx3wcAAN8HAAAcAAAAAAAAAAAAAACkgdNiAgBAZW5kby9lcnJvcnMtdjEuMi44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAH5dVSulEAAApRAAACMAAAAAAAAAAAAAAKSB7GoCAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9FLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAAAAAAAAAAAAAKSB0nsCAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9leHBvcnRzLmpzUEsBAh4DCgAAAAAAAAAAABAg46yqDAAAqgwAACcAAAAAAAAAAAAAAKSBY30CAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9sb2NhbC5qc1BLAQIeAwoAAAAAAAAAAAABjnBM6QwAAOkMAAA1AAAAAAAAAAAAAACkgVKKAgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1BLAQIeAwoAAAAAAAAAAAAZbLtFMwMAADMDAAApAAAAAAAAAAAAAACkgY6XAgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvbm8tc2hpbS5qc1BLAQIeAwoAAAAAAAAAAACGqKbHXwkAAF8JAAAtAAAAAAAAAAAAAACkgQibAgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvdHJhY2stdHVybnMuanNQSwECHgMKAAAAAAAAAAAAP/DnOlYCAABWAgAAIwAAAAAAAAAAAAAApIGypAIAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAsVg2mFICAABSAgAAGQAAAAAAAAAAAAAApIFJpwIAQGVuZG8vZXhvLXYxLjUuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAA+gd+91xQAANcUAAAiAAAAAAAAAAAAAACkgdKpAgBAZW5kby9leG8tdjEuNS43L3NyYy9leG8tbWFrZXJzLmpzUEsBAh4DCgAAAAAAAAAAAM7uWwbmLwAA5i8AACEAAAAAAAAAAAAAAKSB6b4CAEBlbmRvL2V4by12MS41Ljcvc3JjL2V4by10b29scy5qc1BLAQIeAwoAAAAAAAAAAABGkzxuNgIAADYCAAAlAAAAAAAAAAAAAACkgQ7vAgBAZW5kby9leG8tdjEuNS43L3NyYy9nZXQtaW50ZXJmYWNlLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAAB0AAAAAAAAAAAAAAKSBh/ECAEBlbmRvL2V4by12MS41Ljcvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAAtKmDhWAgAAVgIAAB0AAAAAAAAAAAAAAKSBDPMCAEBlbmRvL2Zhci12MS4xLjkvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAALiBafB0BwAAdAcAAB0AAAAAAAAAAAAAAKSBnfUCAEBlbmRvL21hcnNoYWwtdjEuNi4yL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAANdsW6VZQwAAWUMAACoAAAAAAAAAAAAAAKSBTP0CAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVQYXNzYWJsZS5qc1BLAQIeAwoAAAAAAAAAAABfnPAyUiIAAFIiAAArAAAAAAAAAAAAAACkge1AAwBAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzUEsBAh4DCgAAAAAAAAAAAA9KG6suIgAALiIAAC0AAAAAAAAAAAAAAKSBiGMDAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qc1BLAQIeAwoAAAAAAAAAAABFCzL9ECMAABAjAAAqAAAAAAAAAAAAAACkgQGGAwBAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC1qdXN0aW4uanNQSwECHgMKAAAAAAAAAAAARBKm51wGAABcBgAALQAAAAAAAAAAAAAApIFZqQMAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzUEsBAh4DCgAAAAAAAAAAACnDUk4qJwAAKicAACMAAAAAAAAAAAAAAKSBALADAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9tYXJzaGFsLmpzUEsBAh4DCgAAAAAAAAAAALvjTYmcJwAAnCcAACUAAAAAAAAAAAAAAKSBa9cDAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9yYW5rT3JkZXIuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAIQAAAAAAAAAAAAAApIFK/wMAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAF/qToJZBQAAWQUAAB4AAAAAAAAAAAAAAKSB0wAEAEBlbmRvL25hdC12NS4wLjEzL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAChKaq8PwoAAD8KAAAgAAAAAAAAAAAAAACkgWgGBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACXqL8lVAYAAFQGAAAoAAAAAAAAAAAAAACkgeUQBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvY29weUFycmF5LmpzUEsBAh4DCgAAAAAAAAAAADLPSrUpCAAAKQgAACkAAAAAAAAAAAAAAKSBfxcEAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9jb3B5UmVjb3JkLmpzUEsBAh4DCgAAAAAAAAAAAHAi5XpWCgAAVgoAAC4AAAAAAAAAAAAAAKSB7x8EAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9kZWVwbHlGdWxmaWxsZWQuanNQSwECHgMKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAAAAAAAAAAAApIGRKgQAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2Vycm9yLmpzUEsBAh4DCgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAAAAAAAAAAAAAKSBBz0EAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9pdGVyLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAAAAAAAAAAAApIHfQgQAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL21ha2UtZmFyLmpzUEsBAh4DCgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAAAAAAAAAAAAAKSBZVQEAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9tYWtlVGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAA0ikncUFQAAFBUAADAAAAAAAAAAAAAAAKSBLFkEAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAAAAAAAAAAACkgY5uBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvcGFzc1N0eWxlT2YuanNQSwECHgMKAAAAAAAAAAAAUoR7eqYXAACmFwAAKAAAAAAAAAAAAAAApIGGkwQAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3JlbW90YWJsZS5qc1BLAQIeAwoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAAAAAAAAAAACkgXKrBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvc2FmZS1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAJiXXyyyBwAAsgcAACUAAAAAAAAAAAAAAKSBQbgEAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zdHJpbmcuanNQSwECHgMKAAAAAAAAAAAAZj9ZlfwJAAD8CQAAJQAAAAAAAAAAAAAApIE2wAQAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3N5bWJvbC5qc1BLAQIeAwoAAAAAAAAAAABg1WOeFAcAABQHAAAlAAAAAAAAAAAAAACkgXXKBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAAAAAAAAAAAAAKSBzNEEAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAAAAAAAAAAAAAKSBEdsEAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADFh1fptw4AALcOAAAeAAAAAAAAAAAAAACkgZ3cBABAZW5kby9wYXR0ZXJucy12MS40LjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAW6U5DDkyAAA5MgAAKgAAAAAAAAAAAAAApIGQ6wQAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NoZWNrS2V5LmpzUEsBAh4DCgAAAAAAAAAAAIQ/iwcTFQAAExUAAC0AAAAAAAAAAAAAAKSBER4FAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1BLAQIeAwoAAAAAAAAAAABMm2YWxw0AAMcNAAApAAAAAAAAAAAAAACkgW8zBQBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weUJhZy5qc1BLAQIeAwoAAAAAAAAAAAApnmdszgsAAM4LAAApAAAAAAAAAAAAAACkgX1BBQBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weVNldC5qc1BLAQIeAwoAAAAAAAAAAABNkSIn4BIAAOASAAA5AAAAAAAAAAAAAACkgZJNBQBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAAWzrVy1IWAABSFgAANQAAAAAAAAAAAAAApIHJYAUAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAAfWCLM4scAACLHAAANQAAAAAAAAAAAAAApIFudwUAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAApEMnKO0YAADtGAAANgAAAAAAAAAAAAAApIFMlAUAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzUEsBAh4DCgAAAAAAAAAAAB04DJTIrQAAyK0AADUAAAAAAAAAAAAAAKSBja0FAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACIAAAAAAAAAAAAAAKSBqFsGAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAA0gGixEIGAABCBgAAJQAAAAAAAAAAAAAApIEyXQYAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xMy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACzXVtGVQIAAFUCAAAuAAAAAAAAAAAAAACkgbdjBgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzL3NyYy9pcy1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAPpm8JGcBwAAnAcAAC0AAAAAAAAAAAAAAKSBWGYGAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTMvc3JjL21lbW8tcmFjZS5qc1BLAQIeAwoAAAAAAAAAAACcbcSyfAUAAHwFAAA4AAAAAAAAAAAAAACkgT9uBgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAApAAAAAAAAAAAAAACkgRF0BgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjEzL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADSAaLEQgYAAEIGAAAlAAAAAAAAAAAAAACkgaJ1BgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjE0L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAALNdW0ZVAgAAVQIAAC4AAAAAAAAAAAAAAKSBJ3wGAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQvc3JjL2lzLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAA+mbwkZwHAACcBwAALQAAAAAAAAAAAAAApIHIfgYAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW4xNC9zcmMvbWVtby1yYWNlLmpzUEsBAh4DCgAAAAAAAAAAAJxtxLJ8BQAAfAUAADgAAAAAAAAAAAAAAKSBr4YGAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAAAAAAAAAAAAAKSBgYwGAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uMTQvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAANIBosRCBgAAQgYAACQAAAAAAAAAAAAAAKSBEo4GAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC1uNi9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACzXVtGVQIAAFUCAAAtAAAAAAAAAAAAAACkgZaUBgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjYvc3JjL2lzLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAA+mbwkZwHAACcBwAALAAAAAAAAAAAAAAApIE2lwYAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW42L3NyYy9tZW1vLXJhY2UuanNQSwECHgMKAAAAAAAAAAAAnG3EsnwFAAB8BQAANwAAAAAAAAAAAAAApIEcnwYAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44LW42L3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAoAAAAAAAAAAAAAACkge2kBgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgtbjYvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAANxo90KQEQAAkBEAABwAAAAAAAAAAAAAAKSBfaYGAEBlbmRvL3N0cmVhbS12MS4yLjgvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAZlcRCcMBAADDAQAAHAAAAAAAAAAAAAAApIFHuAYAamVzc2llLmpzLXYwLjMuNC9zcmMvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAACQYc8DcwEAAHMBAAAfAAAAAAAAAAAAAACkgUS6BgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9FLmpzUEsBAh4DCgAAAAAAAAAAAOD1uR9vAgAAbwIAACwAAAAAAAAAAAAAAKSB9LsGAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzUEsBAh4DCgAAAAAAAAAAAP9+H3bmAQAA5gEAACIAAAAAAAAAAAAAAKSBrb4GAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21haW4uanNQSwECHgMKAAAAAAAAAAAANxfQTswHAADMBwAAJAAAAAAAAAAAAAAApIHTwAYAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFrZXJzLmpzUEsBAh4DCgAAAAAAAAAAAIo2475JAwAASQMAACkAAAAAAAAAAAAAAKSB4cgGAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzUEsBAh4DCgAAAAAAAAAAAAZvJkKIAQAAiAEAACIAAAAAAAAAAAAAAKSBccwGAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL21haW4uanNQSwECHgMKAAAAAAAAAAAAqRU0LzBEBgAwRAYANAAAAAAAAAAAAAAApIE5zgYAa3JlYWQtY29udHJhY3QtdjAuMS4wL3NyYy9wcm9wb3NhbC9iYXNlLWludmVudG9yeS5qc1BLAQIeAwoAAAAAAAAAAAAAlmB3LScAAC0nAAA6AAAAAAAAAAAAAACkgbsSDQBrcmVhZC1jb250cmFjdC12MC4xLjAvc3JjL3Byb3Bvc2FsL3N0YXJ0LWtyZWFkLXByb3Bvc2FsLmpzUEsFBgAAAABxAHEAbigAAEA6DQAAAA==", + "endoZipBase64Sha512": "3d529cedd24548b7324ee87e1192fa58496932f8187d36545f7bf67d63d3105376492893ff93a8c573a3a641f9fe15f0a39ae07367982e4e6fc461de1f854b2c" +} \ No newline at end of file diff --git a/agoric/a3p-integration/proposals/k:kread/submission/upgrade-kread-proposal.js b/agoric/a3p-integration/proposals/k:kread/submission/upgrade-kread-proposal.js new file mode 100644 index 000000000..de4ed6881 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/submission/upgrade-kread-proposal.js @@ -0,0 +1,37 @@ +import { E } from '@endo/far'; + +export const upgradeKread = async powers => { + console.log('LOG: upgrading Kread'); + + const { + consume: { kreadKit: kreadKitP, kreadCommitteeCreatorFacet }, + } = powers; + + const initialPoserInvitation = await E( + kreadCommitteeCreatorFacet, + ).getPoserInvitation(); + + const { adminFacet, privateArgs } = await kreadKitP; + + const newPrivateArgs = harden({ + ...privateArgs, + initialPoserInvitation, + }); + + const bundleID = + 'b1-1ed215fa6131b937ffe2a73a858e4f246a7e3f63844ef30bb8baf262f125a63ab3c526c021886060c3519060aecac65bdd3da4b6d0cc9cc4a80306a9623c7a91'; + await E(adminFacet).upgradeContract(bundleID, newPrivateArgs); + + console.log('LOG: KREAd contract upgraded!'); +}; + +export const getManifestForUpgradeKread = () => ({ + manifest: { + [upgradeKread.name]: { + consume: { + kreadKit: true, + kreadCommitteeCreatorFacet: true, + }, + }, + }, +}); diff --git a/agoric/a3p-integration/proposals/k:kread/submission/upgrade-kread.js b/agoric/a3p-integration/proposals/k:kread/submission/upgrade-kread.js new file mode 100644 index 000000000..f997432a9 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/submission/upgrade-kread.js @@ -0,0 +1,14 @@ +import { makeHelpers } from '@agoric/deploy-script-support'; + +/** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */ +export const defaultProposalBuilder = async () => + harden({ + sourceSpec: '@agoric/vats/src/proposals/upgrade-kread-proposal.js', + getManifestCall: ['getManifestForUpgradeKread'], + }); + +/** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */ +export default async (homeP, endowments) => { + const { writeCoreEval } = await makeHelpers(homeP, endowments); + await writeCoreEval('upgrade-kread', defaultProposalBuilder); +}; diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/chain.js b/agoric/a3p-integration/proposals/k:kread/test-lib/chain.js new file mode 100644 index 000000000..1e96c0354 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/chain.js @@ -0,0 +1,140 @@ +/** @file copied from packages/agoric-cli */ +// TODO DRY in https://github.com/Agoric/agoric-sdk/issues/9109 +// @ts-check +/* global process */ + +const agdBinary = 'agd'; + +/** + * @param {ReadonlyArray} swingsetArgs + * @param {import('./rpc.js').MinimalNetworkConfig & { + * from: string, + * fees?: string, + * dryRun?: boolean, + * verbose?: boolean, + * keyring?: {home?: string, backend: string} + * stdout?: Pick + * execFileSync: typeof import('child_process').execFileSync + * }} opts + */ +export const execSwingsetTransaction = (swingsetArgs, opts) => { + const { + from, + fees, + dryRun = false, + verbose = true, + keyring = undefined, + chainName, + rpcAddrs, + stdout = process.stdout, + execFileSync, + } = opts; + const homeOpt = keyring?.home ? [`--home=${keyring.home}`] : []; + const backendOpt = keyring?.backend + ? [`--keyring-backend=${keyring.backend}`] + : []; + const feeOpt = fees ? ['--fees', fees] : []; + const cmd = [`--node=${rpcAddrs[0]}`, `--chain-id=${chainName}`].concat( + homeOpt, + backendOpt, + feeOpt, + [`--from=${from}`, 'tx', 'swingset'], + swingsetArgs, + ); + + if (dryRun) { + stdout.write(`Run this interactive command in shell:\n\n`); + stdout.write(`${agdBinary} `); + stdout.write(cmd.join(' ')); + stdout.write('\n'); + } else { + const yesCmd = cmd.concat(['--yes']); + if (verbose) console.log('Executing ', yesCmd); + const out = execFileSync(agdBinary, yesCmd, { encoding: 'utf-8' }); + + // agd puts this diagnostic on stdout rather than stderr :-/ + // "Default sign-mode 'direct' not supported by Ledger, using sign-mode 'amino-json'. + if (out.startsWith('Default sign-mode')) { + const stripDiagnostic = out.replace(/^Default[^\n]+\n/, ''); + return stripDiagnostic; + } + return out; + } +}; +harden(execSwingsetTransaction); + +/** + * @param {import('./rpc.js').MinimalNetworkConfig & { + * execFileSync: typeof import('child_process').execFileSync, + * delay: (ms: number) => Promise, + * period?: number, + * retryMessage?: string, + * }} opts + * @returns {(l: (b: { time: string, height: string }) => Promise) => Promise} + */ +export const pollBlocks = opts => async lookup => { + const { execFileSync, delay, rpcAddrs, period = 3 * 1000 } = opts; + assert(execFileSync, 'missing execFileSync'); + const { retryMessage } = opts; + + const nodeArgs = [`--node=${rpcAddrs[0]}`]; + + await null; // separate sync prologue + + for (;;) { + const sTxt = execFileSync(agdBinary, ['status', ...nodeArgs]); + const status = JSON.parse(sTxt.toString()); + const { + SyncInfo: { latest_block_time: time, latest_block_height: height }, + } = status; + try { + // see await null above + const result = await lookup({ time, height }); + return result; + } catch (_err) { + console.error( + time, + retryMessage || 'not in block', + height, + 'retrying...', + ); + await delay(period); + } + } +}; + +/** + * @param {string} txhash + * @param {import('./rpc.js').MinimalNetworkConfig & { + * execFileSync: typeof import('child_process').execFileSync, + * delay: (ms: number) => Promise, + * period?: number, + * }} opts + */ +export const pollTx = async (txhash, opts) => { + const { execFileSync, rpcAddrs, chainName } = opts; + assert(execFileSync, 'missing execFileSync in pollTx'); + + const nodeArgs = [`--node=${rpcAddrs[0]}`]; + const outJson = ['--output', 'json']; + + const lookup = async () => { + const out = execFileSync( + agdBinary, + [ + 'query', + 'tx', + txhash, + `--chain-id=${chainName}`, + ...nodeArgs, + ...outJson, + ], + { stdio: ['ignore', 'pipe', 'ignore'] }, + ); + // XXX this type is defined in a .proto file somewhere + /** @type {{ height: string, txhash: string, code: number, timestamp: string }} */ + const info = JSON.parse(out.toString()); + return info; + }; + return pollBlocks({ ...opts, retryMessage: 'tx not in block' })(lookup); +}; diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/errors.js b/agoric/a3p-integration/proposals/k:kread/test-lib/errors.js new file mode 100644 index 000000000..57dc771e6 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/errors.js @@ -0,0 +1,20 @@ +/** + * @file Copied from "@agoric/internal" + */ + +import { q } from '@endo/errors'; + +/** + * @template T + * @param {T | null | undefined} val + * @param {string} [optDetails] + * @returns {T} + */ +export const NonNullish = (val, optDetails = `unexpected ${q(val)}`) => { + if (val != null) { + // This `!= null` idiom checks that `val` is neither `null` nor `undefined`. + return val; + } + assert.fail(optDetails); +}; +harden(NonNullish); diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/governance.js b/agoric/a3p-integration/proposals/k:kread/test-lib/governance.js new file mode 100644 index 000000000..ce08264b8 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/governance.js @@ -0,0 +1,156 @@ +import { agops, agoric, executeOffer } from '@agoric/synthetic-chain'; +import { makeVstorageKit } from '@agoric/client-utils'; + +/** + * @param {typeof window.fetch} fetch + * @param {import('@agoric/client-utils').MinimalNetworkConfig} networkConfig + */ +export const makeGovernanceDriver = async (fetch, networkConfig) => { + const { readLatestHead, marshaller } = await makeVstorageKit( + { fetch }, + networkConfig, + ); + + /** @param {string} previousOfferId */ + const generateVoteOffer = async previousOfferId => { + const id = `propose-${Date.now()}`; + + const latestQuestionRecord = + /** @type {import('@agoric/governance/src/types.js').QuestionSpec} */ ( + await readLatestHead( + 'published.committees.Economic_Committee.latestQuestion', + ) + ); + + const chosenPositions = [latestQuestionRecord.positions[0]]; + const body = { + method: 'executeOffer', + offer: { + id, + invitationSpec: { + invitationMakerName: 'makeVoteInvitation', + previousOffer: previousOfferId, + source: 'continuing', + invitationArgs: harden([ + chosenPositions, + // @ts-expect-error narrowing + latestQuestionRecord.questionHandle, + ]), + }, + proposal: {}, + }, + }; + + const capData = marshaller.toCapData(harden(body)); + return JSON.stringify(capData); + }; + + const voteOnProposedChanges = async ( + /** @type {string} */ address, + /** @type {string} */ committeeAcceptOfferId, + ) => { + await null; + const offerId = + committeeAcceptOfferId || + (await agops.ec( + 'find-continuing-id', + '--for', + 'Voter0', + '--from', + address, + )); + + return executeOffer(address, generateVoteOffer(offerId)); + }; + + /** + * Generates a vault director parameter change proposal as a `executeOffer` message + * body. + * + * @param {string} previousOfferId - the `id` of the offer that this proposal is + * responding to + * @param {string | number | bigint | boolean} voteDur - how long the vote should + * be open for (in seconds) + * @param {any} params + * @param {{ paramPath: any; }} paramsPath + * @returns {Promise} - the `executeOffer` message body as a JSON string + */ + const generateVaultDirectorParamChange = async ( + previousOfferId, + voteDur, + params, + paramsPath, + ) => { + const voteDurSec = BigInt(voteDur); + const toSec = (/** @type {number} */ ms) => BigInt(Math.round(ms / 1000)); + + const id = `propose-${Date.now()}`; + const deadline = toSec(Date.now()) + voteDurSec; + + const a = await agoric.follow( + '-lF', + ':published.agoricNames.instance', + '-o', + 'text', + ); + const instance = Object.fromEntries(marshaller.fromCapData(JSON.parse(a))); + assert(instance.VaultFactory); + + const body = { + method: 'executeOffer', + offer: { + id, + invitationSpec: { + invitationMakerName: 'VoteOnParamChange', + previousOffer: previousOfferId, + source: 'continuing', + }, + offerArgs: { + deadline, + instance: instance.VaultFactory, + params, + path: paramsPath, + }, + proposal: {}, + }, + }; + + const capData = marshaller.toCapData(harden(body)); + return JSON.stringify(capData); + }; + + /** + * + * @param {string} address + * @param {any} params + * @param {{paramPath: any}} path + * @param {string} charterAcceptOfferId + */ + const proposeVaultDirectorParamChange = async ( + address, + params, + path, + charterAcceptOfferId, + ) => { + await null; + const offerId = + charterAcceptOfferId || + (await agops.ec( + 'find-continuing-id', + '--for', + `${'charter\\ member\\ invitation'}`, + '--from', + address, + )); + + return executeOffer( + address, + generateVaultDirectorParamChange(offerId, 10, params, path), + ); + }; + + return { + voteOnProposedChanges, + proposeVaultDirectorParamChange, + }; +}; diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/index.js b/agoric/a3p-integration/proposals/k:kread/test-lib/index.js new file mode 100644 index 000000000..479d81503 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/index.js @@ -0,0 +1,27 @@ +/* eslint-env node */ +import { makeWalletUtils } from '@agoric/client-utils'; +import { execFileSync } from 'child_process'; +import { makeAgdWalletUtils } from './wallet.js'; + +export const networkConfig = { + rpcAddrs: ['http://0.0.0.0:26657'], + chainName: 'agoriclocal', +}; + +/** + * Resolve after a delay in milliseconds. + * + * @param {number} ms + * @returns {Promise} + */ +const delay = ms => new Promise(resolve => setTimeout(() => resolve(), ms)); + +export const walletUtils = await makeWalletUtils( + { delay, fetch }, + networkConfig, +); + +export const agdWalletUtils = await makeAgdWalletUtils( + { execFileSync, setTimeout, walletUtils }, + networkConfig, +); diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/kread.js b/agoric/a3p-integration/proposals/k:kread/test-lib/kread.js new file mode 100644 index 000000000..6644ee74b --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/kread.js @@ -0,0 +1,400 @@ +// @ts-nocheck FIXME +import assert from 'node:assert'; + +import { + agoric, + executeOffer, + getContractInfo, + makeAgd, +} from '@agoric/synthetic-chain'; +import { execFileSync } from 'child_process'; +import { makeCopyBag } from '@agoric/store'; +import { AmountMath } from '@agoric/ertp'; +import { boardSlottingMarshaller, makeFromBoard } from '@agoric/client-utils'; + +const ISTunit = 1_000_000n; + +/** @type {(file: string, args: string[], opts: any) => string} */ +const showAndExec = (file, args, opts) => { + console.log('$', file, ...args); + return execFileSync(file, args, opts); +}; + +// @ts-expect-error string is not assignable to Buffer +const agd = makeAgd({ execFileSync: showAndExec }).withOpts({ + keyringBackend: 'test', +}); + +const fromBoard = makeFromBoard(); +const marshaller = boardSlottingMarshaller(fromBoard.convertSlotToVal); + +const brandsRaw = await agoric.follow( + '-lF', + ':published.agoricNames.brand', + '-o', + 'text', +); +const brands = Object.fromEntries( + marshaller.fromCapData(JSON.parse(brandsRaw)), +); + +assert(brands.IST, 'Brand IST not found'); +assert(brands.timer, 'Brand timer not found'); +assert(brands.KREAdCHARACTER, 'Brand KREAdCHARACTER not found'); +assert(brands.KREAdITEM, 'Brand KREAdITEM not found'); + +export const getMarketCharactersChildren = async () => { + const { children } = await agd.query([ + 'vstorage', + 'children', + `published.kread.market-characters`, + ]); + + return children; +}; + +export const getMarketItemsChildren = async () => { + const { children } = await agd.query([ + 'vstorage', + 'children', + `published.kread.market-items`, + ]); + + return children; +}; + +export const getMarketItem = async itemNode => { + const itemMarketPath = `:published.kread.market-items.${itemNode}`; + const rawItemData = await agoric.follow('-lF', itemMarketPath, '-o', 'text'); + const item = marshaller.fromCapData(JSON.parse(rawItemData)); + + return item; +}; + +export const getCharacterInventory = async characterName => { + const inventoryPath = `kread.character.inventory-${characterName}`; + const characterInventory = await getContractInfo(inventoryPath, { + agoric, + prefix: 'published.', + }); + + return characterInventory; +}; + +export const getMarketCharacterFromVstorage = async () => { + const charactersMarket = await getMarketCharactersChildren(); + const path = `:published.kread.market-characters.${charactersMarket[0]}`; + const rawCharacterData = await agoric.follow('-lF', path, '-o', 'text'); + const marketCharacter = marshaller.fromCapData(JSON.parse(rawCharacterData)); + + return marketCharacter; +}; + +export const getBalanceFromPurse = async (address, type) => { + const walletRaw = await agoric.follow( + '-lF', + `:published.wallet.${address}.current`, + '-o', + 'text', + ); + const purses = marshaller.fromCapData(JSON.parse(walletRaw)).purses; + + const assetBrands = { + character: brands.KREAdCHARACTER, + item: brands.KREAdITEM, + }; + const assetBrand = assetBrands[type]; + if (!assetBrand) { + throw new Error('Invalid type provided. Must be "character" or "item".'); + } + + const assetPurse = purses.find( + ({ brand }) => brand.getBoardId() === assetBrand.getBoardId(), + ); + + return assetPurse?.balance.value.payload[0]?.[0] || null; +}; + +/** @import {Brand, CopyBagAmount} from '@agoric/ertp/src/types.js'; */ + +/** + * @param {Brand} brand + * @param {any} asset + * @returns {CopyBagAmount<'item'>} + */ +export const assetAsAmount = (brand, asset) => { + const assetValue = makeCopyBag([[asset, 1n]]); + const assetAmount = AmountMath.make(brand, assetValue); + return assetAmount; +}; + +export const totalAssetPriceAmount = asset => { + const fees = AmountMath.add(asset.platformFee, asset.royalty); + const price = AmountMath.add(asset.askingPrice, fees); + return price; +}; +const mintCharacterOffer = async name => { + const body = { + method: 'executeOffer', + offer: { + id: 'KREAd-mint-character-acceptance-test', + invitationSpec: { + source: 'agoricContract', + instancePath: ['kread'], + callPipe: [['makeMintCharacterInvitation', []]], + }, + offerArgs: { name }, + proposal: { + give: { + Price: { + brand: brands.IST, + value: 5n * ISTunit, + }, + }, + }, + }, + }; + + return JSON.stringify(marshaller.toCapData(harden(body))); +}; + +const unequipAllItemsOffer = async address => { + const kreadCharacter = await getBalanceFromPurse(address, 'character'); + if (!kreadCharacter) { + throw new Error('Character not found on user purse'); + } + + // deal with KREAd's funky parallel character representation swap + const inventoryKeyId = kreadCharacter.keyId === 1 ? 2 : 1; + const kreadCharacter2 = { ...kreadCharacter, keyId: inventoryKeyId }; + + const kreadCharacterAmount = assetAsAmount( + brands.KREAdCHARACTER, + kreadCharacter, + ); + + const kreadCharacter2Amount = assetAsAmount( + brands.KREAdCHARACTER, + kreadCharacter2, + ); + + const body = { + method: 'executeOffer', + offer: { + id: 'KREAd-unequip-all-items-acceptance-test', + invitationSpec: { + source: 'agoricContract', + instancePath: ['kread'], + callPipe: [['makeUnequipAllInvitation', []]], + }, + proposal: { + give: { + CharacterKey1: kreadCharacterAmount, + }, + want: { + CharacterKey2: kreadCharacter2Amount, + }, + }, + }, + }; + + return JSON.stringify(marshaller.toCapData(harden(body))); +}; + +const buyItemOffer = async () => { + const children = await getMarketItemsChildren(); + const marketItem = await getMarketItem(children[0]); + + const itemAmount = assetAsAmount(brands.KREAdITEM, marketItem.asset); + const priceAmount = totalAssetPriceAmount(marketItem); + + const body = { + method: 'executeOffer', + offer: { + id: 'KREAd-buy-item-acceptance-test', + invitationSpec: { + source: 'agoricContract', + instancePath: ['kread'], + callPipe: [['makeBuyItemInvitation', []]], + }, + offerArgs: { entryId: marketItem.id }, + proposal: { + give: { + Price: priceAmount, + }, + want: { + Item: itemAmount, + }, + }, + }, + }; + + return JSON.stringify(marshaller.toCapData(harden(body))); +}; + +const sellItemOffer = async address => { + const kreadItem = await getBalanceFromPurse(address, 'item'); + if (!kreadItem) { + throw new Error('Item not found on user purse'); + } + + const itemAmount = assetAsAmount(brands.KREAdITEM, kreadItem); + + const body = { + method: 'executeOffer', + offer: { + id: 'KREAd-sell-item-acceptance-test', + invitationSpec: { + source: 'agoricContract', + instancePath: ['kread'], + callPipe: [['makeSellItemInvitation', []]], + }, + proposal: { + give: { + Item: itemAmount, + }, + want: { + Price: { + brand: brands.IST, + value: 5n * ISTunit, + }, + }, + }, + }, + }; + + return JSON.stringify(marshaller.toCapData(harden(body))); +}; + +const buyCharacterOffer = async () => { + const marketCharacter = await getMarketCharacterFromVstorage(); + + const kreadCharacterAmount = assetAsAmount( + brands.KREAdCHARACTER, + marketCharacter.asset, + ); + const priceAmount = totalAssetPriceAmount(marketCharacter); + + const body = { + method: 'executeOffer', + offer: { + id: 'KREAd-buy-character-acceptance-test', + invitationSpec: { + source: 'agoricContract', + instancePath: ['kread'], + callPipe: [['makeBuyCharacterInvitation', []]], + }, + proposal: { + give: { + Price: priceAmount, + }, + want: { + Character: kreadCharacterAmount, + }, + }, + }, + }; + + return JSON.stringify(marshaller.toCapData(harden(body))); +}; + +const sellCharacterOffer = async (address, id) => { + const kreadCharacter = await getBalanceFromPurse(address, 'character'); + if (!kreadCharacter) { + throw new Error('Character not found on user purse'); + } + + const kreadCharacterAmount = assetAsAmount( + brands.KREAdCHARACTER, + kreadCharacter, + ); + + const body = { + method: 'executeOffer', + offer: { + id, + invitationSpec: { + source: 'agoricContract', + instancePath: ['kread'], + callPipe: [['makeSellCharacterInvitation', []]], + }, + proposal: { + give: { + Character: kreadCharacterAmount, + }, + want: { + Price: { + brand: brands.IST, + value: 5n * ISTunit, + }, + }, + }, + }, + }; + + return JSON.stringify(marshaller.toCapData(harden(body))); +}; + +/** + * @param {string} address + * @param {string} characterName + * @returns + */ +export const mintCharacter = async ( + address, + characterName = 'ephemeral_Ace', +) => { + return executeOffer(address, mintCharacterOffer(characterName)); +}; + +/** + * @param {string} address + * @returns + */ +export const unequipAllItems = async address => { + return executeOffer(address, unequipAllItemsOffer(address)); +}; + +/** + * @param {string} address + * @returns + */ +export const buyItem = async address => { + return executeOffer(address, buyItemOffer()); +}; + +/** + * @param {string} address + * @returns + */ +export const sellItem = async address => { + return executeOffer(address, sellItemOffer(address)); +}; + +/** + * @param {string} address + * @param {string} offerId + * @returns + */ +export const sellCharacter = async ( + address, + offerId = 'sell-character-acceptance', +) => { + return executeOffer(address, sellCharacterOffer(address, offerId)); +}; + +/** + * @param {string} address + * @returns + */ +export const buyCharacter = async address => { + return executeOffer(address, buyCharacterOffer()); +}; + +export const installBundle = async bundlePath => { + return agd.tx(['swingset', 'install-bundle', `@${bundlePath}`], { + chainId: 'agoriclocal', + from: 'gov1', + yes: true, + }); +}; \ No newline at end of file diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/price-feed.js b/agoric/a3p-integration/proposals/k:kread/test-lib/price-feed.js new file mode 100644 index 000000000..ea30984d5 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/price-feed.js @@ -0,0 +1,62 @@ +/* eslint-env node */ + +import { retryUntilCondition } from '@agoric/client-utils'; +import { + agoric, + getContractInfo, + getPriceQuote, + pushPrices, +} from '@agoric/synthetic-chain'; + +export const scale6 = x => BigInt(x * 1_000_000); + +/** + * + * @param {Map} oraclesByBrand + * @param {string} brand + * @param {number} price + * @param {number} roundId + * @returns {Promise} + */ +export const verifyPushedPrice = async ( + oraclesByBrand, + brand, + price, + roundId, +) => { + const pushPriceRetryOpts = { + maxRetries: 5, // arbitrary + retryIntervalMs: 5000, // in ms + }; + + await pushPrices(price, brand, oraclesByBrand, roundId); + console.log(`Pushing price ${price} for ${brand}`); + + await retryUntilCondition( + () => getPriceQuote(brand), + res => res === `+${scale6(price).toString()}`, + 'price not pushed yet', + { + log: console.log, + setTimeout: global.setTimeout, + ...pushPriceRetryOpts, + }, + ); + console.log(`Price ${price} pushed for ${brand}`); +}; + +/** + * + * @param {string} brand + * @returns {Promise} + */ +export const getPriceFeedRoundId = async brand => { + const latestRoundPath = `published.priceFeed.${brand}-USD_price_feed.latestRound`; + const latestRound = await getContractInfo(latestRoundPath, { + agoric, + prefix: '', + }); + + console.log('latestRound: ', latestRound); + return Number(latestRound.roundId); +}; diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/psm-lib.js b/agoric/a3p-integration/proposals/k:kread/test-lib/psm-lib.js new file mode 100644 index 000000000..f97a89c7d --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/psm-lib.js @@ -0,0 +1,732 @@ +/* eslint-env node */ + +import { execa } from 'execa'; +import { getNetworkConfig } from 'agoric/src/helpers.js'; +import { + boardSlottingMarshaller, + makeFromBoard, + retryUntilCondition, + waitUntilAccountFunded, + waitUntilOfferResult, +} from '@agoric/client-utils'; +import { AmountMath } from '@agoric/ertp'; +import { + addUser, + agd, + agops, + agopsLocation, + agoric, + CHAINID, + executeCommand, + executeOffer, + getUser, + GOV1ADDR, + mkTemp, + VALIDATORADDR, +} from '@agoric/synthetic-chain'; +import fsp from 'node:fs/promises'; +import { NonNullish } from './errors.js'; +import { getBalances } from './utils.js'; + +/** @import {Result as ExecaResult, ExecaError} from 'execa'; */ +/** + * @typedef {ExecaResult & { all: string } & ( + * | { failed: false } + * | Pick< + * ExecaError & { failed: true }, + * 'failed', + * | 'shortMessage' + * | 'cause' + * | 'exitCode' + * | 'signal' + * | 'signalDescription' + * > + * )} SendOfferResult + */ + +// Export these from synthetic-chain? +const USDC_DENOM = NonNullish(process.env.USDC_DENOM); +const PSM_PAIR = NonNullish(process.env.PSM_PAIR).replace('.', '-'); + +/** + * @import {Coin} from '@agoric/cosmic-proto/cosmos/base/v1beta1/coin.js'; + */ + +/** + * @typedef {object} PsmMetrics + * @property {import('@agoric/ertp').Amount<'nat'>} anchorPoolBalance + * @property {import('@agoric/ertp').Amount<'nat'>} feePoolBalance + * @property {import('@agoric/ertp').Amount<'nat'>} mintedPoolBalance + * @property {import('@agoric/ertp').Amount<'nat'>} totalAnchorProvided + * @property {import('@agoric/ertp').Amount<'nat'>} totalMintedProvided + */ + +const fromBoard = makeFromBoard(); +const marshaller = boardSlottingMarshaller(fromBoard.convertSlotToVal); + +/** + * Import from synthetic-chain once it is updated + * + * @param {string} addr + * @param {string} wanted + * @param {string} [from] + */ +export const bankSend = (addr, wanted, from = VALIDATORADDR) => { + const chain = ['--chain-id', CHAINID]; + const fromArg = ['--from', from]; + const testKeyring = ['--keyring-backend', 'test']; + const noise = [...fromArg, ...chain, ...testKeyring, '--yes']; + + return agd.tx('bank', 'send', from, addr, wanted, ...noise); +}; + +/** + * + * @param {{ + * address: string + * instanceName: string + * newParams: Params + * deadline: bigint + * offerId: string + * }} QuestionDetails + */ +export const buildProposePSMParamChangeOffer = async ({ + address, + instanceName, + newParams, + deadline, + offerId, +}) => { + const charterAcceptOfferId = await agops.ec( + 'find-continuing-id', + '--for', + `${'charter\\ member\\ invitation'}`, + '--from', + address, + ); + console.log('charterAcceptOfferId', charterAcceptOfferId); + const [brands, instances] = await Promise.all([ + agoric + .follow('-lF', ':published.agoricNames.brand', '-o', 'text') + .then(brandsRaw => + Object.fromEntries(marshaller.fromCapData(JSON.parse(brandsRaw))), + ), + agoric + .follow('-lF', ':published.agoricNames.instance', '-o', 'text') + .then(instancesRaw => + Object.fromEntries(marshaller.fromCapData(JSON.parse(instancesRaw))), + ), + ]); + + console.log('charterAcceptOfferId', charterAcceptOfferId); + console.log('BRANDS', brands); + console.log('INSTANCE', instances); + + /** + * @param {bigint} numValInPercent + */ + const toRatio = numValInPercent => { + const commonDenominator = AmountMath.make(brands.IST, 10_000n); + const numerator = AmountMath.make(brands.IST, numValInPercent * 100n); // Convert to bps + + return { + numerator, + denominator: commonDenominator, + }; + }; + + const params = {}; + if (newParams.giveMintedFeeVal) { + params.GiveMintedFee = toRatio(newParams.giveMintedFeeVal); + } + + if (newParams.wantMintedFeeVal) { + params.WantMintedFee = toRatio(newParams.wantMintedFeeVal); + } + + if (newParams.mintLimit) { + params.MintLimit = AmountMath.make(brands.IST, newParams.mintLimit); + } + + const offerSpec = /** @type {const} */ ({ + id: offerId, + invitationSpec: { + source: 'continuing', + previousOffer: charterAcceptOfferId, + invitationMakerName: 'VoteOnParamChange', + }, + proposal: {}, + offerArgs: { + instance: instances[instanceName], + params, + deadline, + }, + }); + + const spendAction = { + method: 'executeOffer', + offer: offerSpec, + }; + + // @ts-expect-error XXX Passable + const offer = JSON.stringify(marshaller.toCapData(harden(spendAction))); + console.log(offerSpec); + console.log(offer); + + return executeOffer(address, offer); +}; + +/** + * + * @param {{ + * committeeAddrs: Array + * position: number | string + * }} VotingDetails + */ +export const voteForNewParams = ({ committeeAddrs, position }) => { + console.log('ACTIONS voting for position', position, 'using', committeeAddrs); + return Promise.all( + committeeAddrs.map(account => + // @ts-expect-error Casting + agops.ec('vote', '--forPosition', position, '--send-from', account), + ), + ); +}; + +/** + * @param {{follow: (...params: string[]) => Promise }} io + */ +export const fetchLatestEcQuestion = async io => { + const { follow } = io; + const pathOutcome = ':published.committees.Economic_Committee.latestOutcome'; + const pathQuestion = + ':published.committees.Economic_Committee.latestQuestion'; + + const [latestOutcome, latestQuestion] = await Promise.all([ + follow('-lF', pathOutcome, '-o', 'text').then(outcomeRaw => + marshaller.fromCapData(JSON.parse(outcomeRaw)), + ), + follow('-lF', pathQuestion, '-o', 'text').then(questionRaw => + marshaller.fromCapData(JSON.parse(questionRaw)), + ), + ]); + + return { latestOutcome, latestQuestion }; +}; + +const checkCommitteeElectionResult = ( + /** @type {{ latestOutcome: { outcome: any; question: any; }; latestQuestion: { closingRule: { deadline: any; }; questionHandle: any; }; }} */ electionResult, + /** @type {{ outcome: any; deadline: any; }} */ expectedResult, +) => { + const { + latestOutcome: { outcome, question }, + latestQuestion: { + closingRule: { deadline }, + questionHandle, + }, + } = electionResult; + const { outcome: expectedOutcome, deadline: expectedDeadline } = + expectedResult; + + return ( + expectedOutcome === outcome && + deadline === expectedDeadline && + question === questionHandle + ); +}; + +/** + * @typedef {{ + * giveMintedFeeVal: bigint; + * wantMintedFeeVal: bigint; + * mintLimit: bigint; + * }} Params + * + * + * @param {{ + * address: string + * instanceName: string + * newParams: Params + * votingDuration: number + * offerId?: string + * }} question + * + * @param {{ + * committeeAddrs: Array + * position: number + * }} voting + * + * @param {{ now: () => number; follow: (...params: string[]) => Promise}} io + */ +export const implementPsmGovParamChange = async (question, voting, io) => { + const { now: getNow, follow } = io; + const now = getNow(); + const deadline = BigInt( + question.votingDuration * 60 + Math.round(now / 1000), + ); + + await buildProposePSMParamChangeOffer({ + ...question, + deadline, + offerId: now.toString(), + }); + await voteForNewParams(voting); + + console.log('ACTIONS wait for the vote deadline to pass'); + await retryUntilCondition( + () => fetchLatestEcQuestion({ follow }), + electionResult => + checkCommitteeElectionResult(electionResult, { + outcome: 'win', + deadline, + }), + 'PSM param change election failed', + { setTimeout, retryIntervalMs: 5000, maxRetries: 15 }, + ); +}; + +/** + * @param {string} anchor + */ +export const getPsmGovernance = async anchor => { + const governanceRaw = await agoric.follow( + '-lF', + `:published.psm.IST.${anchor}.governance`, + '-o', + 'text', + ); + const { current } = marshaller.fromCapData(JSON.parse(governanceRaw)); + return current; +}; + +/** + * @param {string} anchor + */ +export const getPsmMetrics = async anchor => { + const metricsRaw = await agoric.follow( + '-lF', + `:published.psm.IST.${anchor}.metrics`, + '-o', + 'text', + ); + + return marshaller.fromCapData(JSON.parse(metricsRaw)); +}; + +export const checkGovParams = async ( + /** @type {import("ava").ExecutionContext} */ t, + /** @type {any} */ expected, + /** @type {string} */ psmName, +) => { + const current = await getPsmGovernance(psmName); + + t.log({ + give: current.WantMintedFee.value, + want: current.GiveMintedFee.value, + mintLimit: current.MintLimit, + }); + + t.like(current, expected); +}; + +/** + * + * @param {string} userName + * @param {{ + * denom: string, + * value: string + * }} expectedAnchorFunds + */ +export const checkUserInitializedSuccessfully = async ( + userName, + expectedAnchorFunds, +) => { + const userAddress = await getUser(userName); + + const balance = await getBalances([userAddress], expectedAnchorFunds.denom); + assert(balance >= BigInt(expectedAnchorFunds.value)); +}; + +/** + * + * @param {string} name + * @param {{ + * denom: string, + * value: string + * }} fund + * @param {{query: () => Promise, setTimeout: typeof setTimeout}} io + */ +export const initializeNewUser = async (name, fund, io) => { + const psmTrader = await addUser(name); + await Promise.all([ + bankSend(psmTrader, `20000000ubld,${fund.value}${fund.denom}`), + bankSend(psmTrader, `1000000uist`, GOV1ADDR), + ]); + + await waitUntilAccountFunded( + psmTrader, + io, + { denom: fund.denom, value: parseInt(fund.value, 10) }, + { errorMessage: `${psmTrader} not funded` }, + ); + + await checkUserInitializedSuccessfully(name, fund); +}; + +/** + * Similar to + * https://github.com/Agoric/agoric-3-proposals/blob/422b163fecfcf025d53431caebf6d476778b5db3/packages/synthetic-chain/src/lib/commonUpgradeHelpers.ts#L123-L139 + * However, for an address that is not provisioned, `agoric wallet send` is + * needed because `agops perf satisfaction` hangs when trying to follow + * nonexistent vstorage path ":published.wallet.${address}". + * + * @param {string} address + * @param {Promise} offerPromise + * @returns {Promise} + */ +export const sendOfferAgoric = async (address, offerPromise) => { + const offerPath = await mkTemp('agops.XXX'); + const offer = await offerPromise; + await fsp.writeFile(offerPath, offer); + + const [settlement] = await Promise.allSettled([ + execa({ + all: true, + })`agoric wallet --keyring-backend=test send --offer ${offerPath} --from ${address} --verbose`, + ]); + return settlement.status === 'fulfilled' + ? settlement.value + : settlement.reason; +}; + +/** + * A variant of {@link sendOfferAgoric} that uses `agd` directly to e.g. + * control gas calculation. + * + * @param {string} address + * @param {Promise} offerPromise + * @returns {Promise} + */ +export const sendOfferAgd = async (address, offerPromise) => { + const offer = await offerPromise; + const networkConfig = await getNetworkConfig({ env: process.env, fetch }); + const { chainName, rpcAddrs } = networkConfig; + const args = [].concat( + [`--node=${rpcAddrs[0]}`, `--chain-id=${chainName}`], + [`--keyring-backend=test`, `--from=${address}`], + ['tx', 'swingset', 'wallet-action', '--allow-spend', offer], + '--yes', + '-bblock', + '-ojson', + ); + + const [settlement] = await Promise.allSettled([ + execa('agd', args, { all: true }), + ]); + + // Upon successful exit, verify that the *output* also indicates success. + // cf. https://github.com/Agoric/agoric-sdk/blob/master/packages/agoric-cli/src/lib/wallet.js + if (settlement.status === 'fulfilled') { + const result = settlement.value; + try { + const tx = JSON.parse(result.stdout); + if (tx.code !== 0) { + return { ...result, failed: true, shortMessage: `code ${tx.code}` }; + } + } catch (err) { + return { + ...result, + failed: true, + shortMessage: 'unexpected output', + cause: err, + }; + } + } + + return settlement.status === 'fulfilled' + ? settlement.value + : settlement.reason; +}; + +/** + * @param {string} address + * @param {Array} params + * @param {{ + * follow: (...params: string[]) => Promise; + * sendOffer?: (address: string, offerPromise: Promise) => Promise; + * setTimeout: typeof global.setTimeout; + * now: () => number + * }} io + */ +export const psmSwap = async (address, params, io) => { + const { now, sendOffer = sendOfferAgoric, ...waitIO } = io; + const offerId = `${address}-psm-swap-${now()}`; + const newParams = ['psm', ...params, '--offerId', offerId]; + const offerPromise = executeCommand(agopsLocation, newParams); + const sendResult = await sendOffer(address, offerPromise); + if (sendResult.failed) { + const { + command, + durationMs, + shortMessage, + cause, + exitCode, + signal, + signalDescription, + all: output, + } = sendResult; + const summary = { + command, + durationMs, + shortMessage, + cause, + exitCode, + signal, + signalDescription, + output, + }; + console.error('psmSwap tx send failed', summary); + throw Error( + `psmSwap tx send failed: ${JSON.stringify({ exitCode, signal, signalDescription })}`, + { cause }, + ); + } + console.log('psmSwap tx send results', sendResult.all); + + await waitUntilOfferResult(address, offerId, true, waitIO, { + errorMessage: `${offerId} not succeeded`, + }); +}; + +/** + * + * @param {number} base + * @param {number} fee + */ +const giveAnchor = (base, fee) => Math.ceil(base / (1 - fee)); + +/** + * + * @param {number} base + * @param {number} fee + */ +const receiveAnchor = (base, fee) => Math.ceil(base * (1 - fee)); + +/** + * + * @param {Coin[]} balances + * @param {string} targetDenom + */ +const extractBalance = (balances, targetDenom) => { + const balance = balances.find(({ denom }) => denom === targetDenom); + if (!balance) return 0; + return Number(balance.amount); +}; + +/** + * Checking IST balances can be tricky because of the execution fee mentioned in + * https://github.com/Agoric/agoric-sdk/issues/6525. So we first check for + * equality, but if that fails we recheck against an assumption that a fee of + * the default "minFeeDebit" has been charged. + * + * @param {import('ava').ExecutionContext} t + * @param {number} actualBalance + * @param {number} expectedBalance + */ +export const tryISTBalances = async (t, actualBalance, expectedBalance) => { + const firstTry = await t.try(tt => { + tt.is(actualBalance, expectedBalance); + }); + if (firstTry.passed) { + firstTry.commit(); + return; + } + + firstTry.discard(); + t.log('tryISTBalances assuming no batched IST fee', firstTry.errors); + // See golang/cosmos/x/swingset/types/default-params.go + // and `ChargeBeans` in golang/cosmos/x/swingset/keeper/keeper.go. + const minFeeDebit = 200_000; + t.is(actualBalance + minFeeDebit, expectedBalance); +}; + +/** + * + * @param {import('ava').ExecutionContext} t + * @param {PsmMetrics} metricsBefore + * @param {Coin[]} balancesBefore + * @param {{trader: string; fee: number; anchor: string;} & ( + * | {wantMinted: number} + * | {giveMinted: number} + * )} tradeInfo + */ +export const checkSwapSucceeded = async ( + t, + metricsBefore, + balancesBefore, + tradeInfo, +) => { + const [metricsAfter, balancesAfter] = await Promise.all([ + getPsmMetrics(tradeInfo.anchor), + getBalances([tradeInfo.trader]), + ]); + + t.log('METRICS_AFTER', metricsAfter); + t.log('BALANCES_AFTER', balancesAfter); + + if ('wantMinted' in tradeInfo) { + const anchorPaid = giveAnchor( + tradeInfo.wantMinted * 1000000, + tradeInfo.fee, + ); + const mintedReceived = tradeInfo.wantMinted * 1000000; + const feePaid = anchorPaid - mintedReceived; + + t.deepEqual( + extractBalance(balancesAfter, USDC_DENOM), + extractBalance(balancesBefore, USDC_DENOM) - anchorPaid, + ); + + await tryISTBalances( + t, + extractBalance(balancesAfter, 'uist'), + extractBalance(balancesBefore, 'uist') + mintedReceived, + ); + + t.like(metricsAfter, { + anchorPoolBalance: { + value: metricsBefore.anchorPoolBalance.value + BigInt(anchorPaid), + }, + feePoolBalance: { + value: metricsBefore.feePoolBalance.value + BigInt(feePaid), + }, + mintedPoolBalance: { + value: metricsBefore.mintedPoolBalance.value + BigInt(anchorPaid), + }, + totalAnchorProvided: { + value: metricsBefore.totalAnchorProvided.value, + }, + totalMintedProvided: { + value: metricsBefore.totalMintedProvided.value + BigInt(anchorPaid), + }, + }); + } else if ('giveMinted' in tradeInfo) { + const mintedPaid = tradeInfo.giveMinted * 1000000; + const anchorReceived = receiveAnchor( + tradeInfo.giveMinted * 1000000, + tradeInfo.fee, + ); + const feePaid = mintedPaid - anchorReceived; + + t.deepEqual( + extractBalance(balancesAfter, USDC_DENOM), + extractBalance(balancesBefore, USDC_DENOM) + anchorReceived, + ); + + await tryISTBalances( + t, + extractBalance(balancesAfter, 'uist'), + extractBalance(balancesBefore, 'uist') - mintedPaid, + ); + + t.like(metricsAfter, { + anchorPoolBalance: { + value: metricsBefore.anchorPoolBalance.value - BigInt(anchorReceived), + }, + feePoolBalance: { + value: metricsBefore.feePoolBalance.value + BigInt(feePaid), + }, + mintedPoolBalance: { + value: metricsBefore.mintedPoolBalance.value - BigInt(anchorReceived), + }, + totalAnchorProvided: { + value: metricsBefore.totalAnchorProvided.value + BigInt(anchorReceived), + }, + totalMintedProvided: { + value: metricsBefore.totalMintedProvided.value, + }, + }); + } +}; + +/** + * + * @param {Array<{ denom: string; amount: string }>} balances + * @param {string} address + */ +export const adjustBalancesIfNotProvisioned = async (balances, address) => { + const { children } = await agd.query( + 'vstorage', + 'children', + 'published.wallet', + '-o', + 'json', + ); + const addressProvisioned = children.includes(address); + + if (addressProvisioned === true) return balances; + + const balancesAdjusted = []; + + for (const { denom, amount } of balances) { + if (denom === 'uist') { + const startingAmount = ( + parseInt(amount, 10) + + 250000 - + 1_000_000 + ).toString(); // provision sends 250000uist to new accounts and 1 IST is charged + balancesAdjusted.push({ denom, amount: startingAmount }); + } else { + balancesAdjusted.push({ denom, amount }); + } + } + + return balancesAdjusted; +}; + +/** + * + * @param {any} t + * @param {string} address + * @param {Record} metricsBefore + */ +export const checkSwapExceedMintLimit = async (t, address, metricsBefore) => { + const [offerResult, metricsAfter] = await Promise.all([ + agoric.follow('-lF', `:published.wallet.${address}`), + getPsmMetrics(PSM_PAIR.split('-')[1]), + ]); + const { status, updated } = offerResult; + + t.is(updated, 'offerStatus'); + t.is(status.error, 'Error: Request would exceed mint limit'); + t.like(metricsBefore, { + mintedPoolBalance: { value: metricsAfter.mintedPoolBalance.value }, + }); +}; + +/** + * @param {string} anchor + * @returns {Promise<{ maxMintableValue: number; wantFeeValue: number; giveFeeValue: number; }>} + */ +export const maxMintBelowLimit = async anchor => { + const [governance, metrics] = await Promise.all([ + getPsmGovernance(anchor), + getPsmMetrics(anchor), + ]); + + const mintLimitVal = Number(governance.MintLimit.value.value); + const mintedPoolBalanceVal = Number(metrics.mintedPoolBalance.value); + const maxMintableValue = mintLimitVal - mintedPoolBalanceVal - 1; + + const wantFeeRatio = governance.WantMintedFee.value; + const giveFeeRatio = governance.GiveMintedFee.value; + + const wantFeeValue = + Number(wantFeeRatio.numerator.value) / + Number(wantFeeRatio.denominator.value); + const giveFeeValue = + Number(giveFeeRatio.numerator.value) / + Number(giveFeeRatio.denominator.value); + + return { maxMintableValue, wantFeeValue, giveFeeValue }; +}; diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/rpc.js b/agoric/a3p-integration/proposals/k:kread/test-lib/rpc.js new file mode 100644 index 000000000..907072d23 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/rpc.js @@ -0,0 +1,266 @@ +/** @file copied from packages/agoric-cli */ +// TODO DRY in https://github.com/Agoric/agoric-sdk/issues/9109 +// @ts-check +/* global Buffer */ + +import { + boardSlottingMarshaller, + makeBoardRemote, +} from '@agoric/internal/src/marshal.js'; +import { Fail } from '@endo/errors'; + +export { boardSlottingMarshaller }; + +export const boardValToSlot = val => { + if ('getBoardId' in val) { + return val.getBoardId(); + } + Fail`unknown obj in boardSlottingMarshaller.valToSlot ${val}`; +}; + +export const networkConfigUrl = agoricNetSubdomain => + `https://${agoricNetSubdomain}.agoric.net/network-config`; +export const rpcUrl = agoricNetSubdomain => + `https://${agoricNetSubdomain}.rpc.agoric.net:443`; + +/** + * @typedef {{ rpcAddrs: string[], chainName: string }} MinimalNetworkConfig + */ + +/** @type {MinimalNetworkConfig} */ +const networkConfig = { + rpcAddrs: ['http://0.0.0.0:26657'], + chainName: 'agoriclocal', +}; +export { networkConfig }; +// console.warn('networkConfig', networkConfig); + +/** + * @param {object} powers + * @param {typeof window.fetch} powers.fetch + * @param {MinimalNetworkConfig} config + */ +export const makeVStorage = (powers, config = networkConfig) => { + /** @param {string} path */ + const getJSON = path => { + const url = config.rpcAddrs[0] + path; + // console.warn('fetching', url); + return powers.fetch(url, { keepalive: true }).then(res => res.json()); + }; + // height=0 is the same as omitting height and implies the highest block + const url = (path = 'published', { kind = 'children', height = 0 } = {}) => + `/abci_query?path=%22/custom/vstorage/${kind}/${path}%22&height=${height}`; + + const readStorage = (path = 'published', { kind = 'children', height = 0 }) => + getJSON(url(path, { kind, height })) + .catch(err => { + throw Error(`cannot read ${kind} of ${path}: ${err.message}`); + }) + .then(data => { + const { + result: { response }, + } = data; + if (response?.code !== 0) { + /** @type {any} */ + const err = Error( + `error code ${response?.code} reading ${kind} of ${path}: ${response.log}`, + ); + err.code = response?.code; + err.codespace = response?.codespace; + throw err; + } + return data; + }); + + return { + url, + decode({ result: { response } }) { + const { code } = response; + if (code !== 0) { + throw response; + } + const { value } = response; + return Buffer.from(value, 'base64').toString(); + }, + /** + * + * @param {string} path + * @returns {Promise} latest vstorage value at path + */ + async readLatest(path = 'published') { + const raw = await readStorage(path, { kind: 'data' }); + return this.decode(raw); + }, + async keys(path = 'published') { + const raw = await readStorage(path, { kind: 'children' }); + return JSON.parse(this.decode(raw)).children; + }, + /** + * @param {string} path + * @param {number} [height] default is highest + * @returns {Promise<{blockHeight: number, values: string[]}>} + */ + async readAt(path, height = undefined) { + const raw = await readStorage(path, { kind: 'data', height }); + const txt = this.decode(raw); + /** @type {{ value: string }} */ + const { value } = JSON.parse(txt); + return JSON.parse(value); + }, + /** + * Read values going back as far as available + * + * @param {string} path + * @param {number | string} [minHeight] + * @returns {Promise} + */ + async readFully(path, minHeight = undefined) { + const parts = []; + // undefined the first iteration, to query at the highest + let blockHeight; + await null; + do { + // console.debug('READING', { blockHeight }); + let values; + try { + ({ blockHeight, values } = await this.readAt( + path, + blockHeight && Number(blockHeight) - 1, + )); + // console.debug('readAt returned', { blockHeight }); + } catch (err) { + if ( + // CosmosSDK ErrNotFound; there is no data at the path + (err.codespace === 'sdk' && err.code === 38) || + // CosmosSDK ErrUnknownRequest; misrepresentation of the same until + // https://github.com/Agoric/agoric-sdk/commit/dafc7c1708977aaa55e245dc09a73859cf1df192 + // TODO remove after upgrade-12 + err.message.match(/unknown request/) + ) { + // console.error(err); + break; + } + throw err; + } + parts.push(values); + // console.debug('PUSHED', values); + // console.debug('NEW', { blockHeight, minHeight }); + if (minHeight && Number(blockHeight) <= Number(minHeight)) break; + } while (blockHeight > 0); + return parts.flat(); + }, + }; +}; +/** @typedef {ReturnType} VStorage */ + +export const makeFromBoard = () => { + const cache = new Map(); + const convertSlotToVal = (boardId, iface) => { + if (cache.has(boardId)) { + return cache.get(boardId); + } + const val = makeBoardRemote({ boardId, iface }); + cache.set(boardId, val); + return val; + }; + return harden({ convertSlotToVal }); +}; +/** @typedef {ReturnType} IdMap */ + +export const storageHelper = { + /** @param { string } txt */ + parseCapData: txt => { + assert(typeof txt === 'string', typeof txt); + /** @type {{ value: string }} */ + const { value } = JSON.parse(txt); + const specimen = JSON.parse(value); + const { blockHeight, values } = specimen; + assert(values, `empty values in specimen ${value}`); + const capDatas = storageHelper.parseMany(values); + return { blockHeight, capDatas }; + }, + /** + * @param {string} txt + * @param {IdMap} ctx + */ + unserializeTxt: (txt, ctx) => { + const { capDatas } = storageHelper.parseCapData(txt); + return capDatas.map(capData => + boardSlottingMarshaller(ctx.convertSlotToVal).fromCapData(capData), + ); + }, + /** @param {string[]} capDataStrings array of stringified capData */ + parseMany: capDataStrings => { + assert(capDataStrings && capDataStrings.length); + /** @type {{ body: string, slots: string[] }[]} */ + const capDatas = capDataStrings.map(s => JSON.parse(s)); + for (const capData of capDatas) { + assert(typeof capData === 'object' && capData !== null); + assert('body' in capData && 'slots' in capData); + assert(typeof capData.body === 'string'); + assert(Array.isArray(capData.slots)); + } + return capDatas; + }, +}; +harden(storageHelper); + +/** + * @param {IdMap} ctx + * @param {VStorage} vstorage + * @returns {Promise} + */ +export const makeAgoricNames = async (ctx, vstorage) => { + const reverse = {}; + const entries = await Promise.all( + ['brand', 'instance', 'vbankAsset'].map(async kind => { + const content = await vstorage.readLatest( + `published.agoricNames.${kind}`, + ); + /** @type {Array<[string, import('@agoric/vats/tools/board-utils.js').BoardRemote]>} */ + const parts = storageHelper.unserializeTxt(content, ctx).at(-1); + for (const [name, remote] of parts) { + if ('getBoardId' in remote) { + reverse[remote.getBoardId()] = name; + } + } + return [kind, Object.fromEntries(parts)]; + }), + ); + return { ...Object.fromEntries(entries), reverse }; +}; + +/** + * @param {{ fetch: typeof window.fetch }} io + * @param {MinimalNetworkConfig} config + */ +export const makeVstorageKit = async ({ fetch }, config = networkConfig) => { + await null; + try { + const vstorage = makeVStorage({ fetch }, config); + const fromBoard = makeFromBoard(); + const agoricNames = await makeAgoricNames(fromBoard, vstorage); + + const marshaller = boardSlottingMarshaller(fromBoard.convertSlotToVal); + + /** @type {(txt: string) => unknown} */ + const unserializeHead = txt => + storageHelper.unserializeTxt(txt, fromBoard).at(-1); + + /** @type {(path: string) => Promise} */ + const readLatestHead = path => + vstorage.readLatest(path).then(unserializeHead); + + return { + agoricNames, + fromBoard, + marshaller, + readLatestHead, + unserializeHead, + vstorage, + }; + } catch (err) { + throw Error(`RPC failure (${config.rpcAddrs}): ${err.message}`); + } +}; +/** @typedef {Awaited>} RpcUtils */ diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/utils.js b/agoric/a3p-integration/proposals/k:kread/test-lib/utils.js new file mode 100644 index 000000000..69b67992f --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/utils.js @@ -0,0 +1,90 @@ +/* eslint-env node */ +import { makeStargateClient, makeVstorageKit } from '@agoric/client-utils'; +import { readFile, writeFile } from 'node:fs/promises'; +import { networkConfig } from './rpc.js'; + +export const stargateClientP = makeStargateClient(networkConfig, { fetch }); +export const vstorageKitP = makeVstorageKit({ fetch }, networkConfig); + +/** + * @import {WalletUtils} from '@agoric/client-utils'; + * @import {CurrentWalletRecord} from '@agoric/smart-wallet/src/smartWallet.js'; + */ + +/** + * @param {string} fileName base file name without .tjs extension + * @param {Record} replacements + */ +export const replaceTemplateValuesInFile = async (fileName, replacements) => { + let script = await readFile(`${fileName}.tjs`, 'utf-8'); + for (const [template, value] of Object.entries(replacements)) { + script = script.replaceAll(`{{${template}}}`, value); + } + await writeFile(`${fileName}.js`, script); +}; + +// FIXME this return type depends on its arguments in surprising ways +/** + * @param {string[]} addresses + * @param {string} [targetDenom] + * @returns {Promise} + */ +export const getBalances = async (addresses, targetDenom = undefined) => { + const client = await stargateClientP; + const balancesList = await Promise.all( + addresses.map(async address => { + const balances = await client.getAllBalances(address); + + if (targetDenom) { + const balance = balances.find(({ denom }) => denom === targetDenom); + return balance ? BigInt(balance.amount) : undefined; + } + + return balances; + }), + ); + + return addresses.length === 1 ? balancesList[0] : balancesList; +}; + +// TODO move this out of testing. To inter-protocol? +// "vaults" is an Inter thing, but vstorage shape is a full chain (client) thing +// Maybe a plugin architecture where the truth is in inter-protocol and the +// client-lib rolls up the exports of many packages? +/** + * @param {string} addr + * @param {WalletUtils} walletUtils + * @returns {Promise} + */ +export const listVaults = async (addr, { getCurrentWalletRecord }) => { + const current = await getCurrentWalletRecord(addr); + const vaultStoragePaths = current.offerToPublicSubscriberPaths.map( + ([_offerId, pathmap]) => pathmap.vault, + ); + + return vaultStoragePaths; +}; + +/** + * @param {{setTimeout: typeof setTimeout}} io + */ +export const makeTimerUtils = ({ setTimeout }) => { + /** + * Resolve after a delay in milliseconds. + * + * @param {number} ms + * @returns {Promise} + */ + const delay = ms => new Promise(resolve => setTimeout(() => resolve(), ms)); + + /** @param {number} timestamp */ + const waitUntil = async timestamp => { + const timeDelta = Math.floor(Date.now() / 1000) - Number(timestamp); + await delay(timeDelta); + }; + + return { + delay, + waitUntil, + }; +}; diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/vaults.js b/agoric/a3p-integration/proposals/k:kread/test-lib/vaults.js new file mode 100644 index 000000000..af8543375 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/vaults.js @@ -0,0 +1,258 @@ +/* eslint-env node */ + +import { + boardSlottingMarshaller, + makeFromBoard, + retryUntilCondition, +} from '@agoric/client-utils'; +import { AmountMath } from '@agoric/ertp'; +import { + agops, + agoric, + executeOffer, + getContractInfo, + GOV1ADDR, + GOV2ADDR, +} from '@agoric/synthetic-chain'; +import { + ceilMultiplyBy, + makeRatio, +} from '@agoric/zoe/src/contractSupport/ratio.js'; +import { E } from '@endo/far'; +import { walletUtils } from './index.js'; +import { listVaults, vstorageKitP } from './utils.js'; + +const fromBoard = makeFromBoard(); +const marshaller = boardSlottingMarshaller(fromBoard.convertSlotToVal); + +/** + * @param {string} address + * @returns {Promise<{ vaultID: string, debt: bigint, collateral: bigint, state: string }>} + */ +export const getLastVaultFromAddress = async address => { + const activeVaults = await listVaults(address, walletUtils); + const vaultPath = activeVaults[activeVaults.length - 1]; + const vaultID = vaultPath.split('.').pop(); + + if (!vaultID) { + throw new Error(`No vaults found for ${address}`); + } + + const vaultData = await getContractInfo(vaultPath, { agoric, prefix: '' }); + + const debt = vaultData.debtSnapshot.debt.value; + const collateral = vaultData.locked.value; + const state = vaultData.vaultState; + + return { vaultID, debt, collateral, state }; +}; + +/** + * @param {string} vaultManager + * @returns {Promise<{ availableDebtForMint: bigint, debtLimit: bigint, totalDebt: bigint }>} + */ +export const getAvailableDebtForMint = async vaultManager => { + const governancePath = `published.vaultFactory.managers.${vaultManager}.governance`; + const governance = await getContractInfo(governancePath, { + agoric, + prefix: '', + }); + + const metricsPath = `published.vaultFactory.managers.${vaultManager}.metrics`; + const metrics = await getContractInfo(metricsPath, { + agoric, + prefix: '', + }); + + const debtLimit = governance.current.DebtLimit.value; + const totalDebt = metrics.totalDebt; + // @ts-expect-error + const availableDebtForMint = (debtLimit.value - totalDebt.value) / 1_000_000n; + + return { + availableDebtForMint, + debtLimit: debtLimit.value, + totalDebt: totalDebt.value, + }; +}; + +/** + * @returns {Promise} + */ +export const getMinInitialDebt = async () => { + const governancePath = `published.vaultFactory.governance`; + const governance = await getContractInfo(governancePath, { + agoric, + prefix: '', + }); + + const minInitialDebt = governance.current.MinInitialDebt.value.value; + + return minInitialDebt / 1_000_000n; +}; + +/** + * @param {bigint} toMintValue + * @param {string} vaultManager + * @returns {Promise<{ mintFee: import('@agoric/ertp/src/types.js').NatAmount, adjustedToMintAmount: import('@agoric/ertp/src/types.js').NatAmount }>} + */ +export const calculateMintFee = async (toMintValue, vaultManager) => { + const { brand } = await E.get(vstorageKitP).agoricNames; + + const governancePath = `published.vaultFactory.managers.${vaultManager}.governance`; + const governance = await getContractInfo(governancePath, { + agoric, + prefix: '', + }); + + const mintFee = governance.current.MintFee; + const { numerator, denominator } = mintFee.value; + + const mintFeeRatio = makeRatio( + numerator.value, + brand.IST, + denominator.value, + brand.IST, + ); + + // @ts-expect-error XXX BoardRemote not Brand + const toMintAmount = AmountMath.make(brand.IST, toMintValue * 1_000_000n); + const expectedMintFee = ceilMultiplyBy(toMintAmount, mintFeeRatio); + const adjustedToMintAmount = AmountMath.add(toMintAmount, expectedMintFee); + + return { mintFee, adjustedToMintAmount }; +}; + +/** + * @param {Array} accounts + * @param {number} position + */ +const voteForNewParams = (accounts, position) => { + console.log('ACTIONS voting for position', position, 'using', accounts); + return Promise.all( + accounts.map(account => + agops.ec( + 'vote', + '--forPosition', + String(position), + '--send-from', + account, + ), + ), + ); +}; + +/** + * + * @param {string} previousOfferId + * @param {number} voteDur + * @param {number} debtLimit + */ +const paramChangeOfferGeneration = async ( + previousOfferId, + voteDur, + debtLimit, +) => { + const ISTunit = 1_000_000n; // aka displayInfo: { decimalPlaces: 6 } + + const { brand } = await E.get(vstorageKitP).agoricNames; + assert(brand.IST); + assert(brand.ATOM); + + const { instance } = await E.get(vstorageKitP).agoricNames; + assert(instance.VaultFactory); + + const voteDurSec = BigInt(voteDur); + const debtLimitValue = BigInt(debtLimit) * ISTunit; + const toSec = ms => BigInt(Math.round(ms / 1000)); + + const id = `propose-${Date.now()}`; + const deadline = toSec(Date.now()) + voteDurSec; + + const body = { + method: 'executeOffer', + offer: { + id, + invitationSpec: { + invitationMakerName: 'VoteOnParamChange', + previousOffer: previousOfferId, + source: 'continuing', + }, + offerArgs: { + deadline, + instance: instance.VaultFactory, + params: { + DebtLimit: { + brand: brand.IST, + value: debtLimitValue, + }, + }, + path: { + paramPath: { + key: { + collateralBrand: brand.ATOM, + }, + }, + }, + }, + proposal: {}, + }, + }; + + return JSON.stringify(marshaller.toCapData(harden(body))); +}; + +/** + * + * @param {string} address + * @param {*} debtLimit + * @returns {Promise} + */ +export const proposeNewDebtCeiling = async (address, debtLimit) => { + const charterAcceptOfferId = await agops.ec( + 'find-continuing-id', + '--for', + `${'charter\\ member\\ invitation'}`, + '--from', + address, + ); + + return executeOffer( + address, + paramChangeOfferGeneration(charterAcceptOfferId, 30, debtLimit), + ); +}; + +export const GOV4ADDR = 'agoric1c9gyu460lu70rtcdp95vummd6032psmpdx7wdy'; + +/** + * + * @param {string} address + * @param {bigint} debtLimit + */ +export const setDebtLimit = async (address, debtLimit) => { + const govAccounts = [GOV1ADDR, GOV2ADDR, GOV4ADDR]; + + console.log('ACTIONS Setting debt limit'); + + await proposeNewDebtCeiling(address, debtLimit); + await voteForNewParams(govAccounts, 0); + + console.log('ACTIONS wait for the vote to pass'); + + const pushPriceRetryOpts = { + maxRetries: 10, // arbitrary + retryIntervalMs: 5000, // in ms + }; + + await retryUntilCondition( + () => getAvailableDebtForMint('manager0'), + res => res.debtLimit === debtLimit * 1_000_000n, + 'debt limit not set yet', + { + log: console.log, + setTimeout: global.setTimeout, + ...pushPriceRetryOpts, + }, + ); +}; diff --git a/agoric/a3p-integration/proposals/k:kread/test-lib/wallet.js b/agoric/a3p-integration/proposals/k:kread/test-lib/wallet.js new file mode 100644 index 000000000..04fcb8f9c --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/test-lib/wallet.js @@ -0,0 +1,91 @@ +// TODO DRY in https://github.com/Agoric/agoric-sdk/issues/9109 +// @ts-check +/* global */ + +import { inspect } from 'util'; +import { execSwingsetTransaction, pollTx } from './chain.js'; +import { makeTimerUtils } from './utils.js'; + +/** + * Sign and broadcast a wallet-action. + * + * @throws { Error & { code: number } } if transaction fails + * @param {import('@agoric/smart-wallet/src/smartWallet.js').BridgeAction} bridgeAction + * @param {import('./rpc.js').MinimalNetworkConfig & { + * from: string, + * marshaller: Pick, 'toCapData'>, + * fees?: string, + * verbose?: boolean, + * keyring?: {home?: string, backend: string}, + * stdout: Pick, + * execFileSync: typeof import('child_process').execFileSync, + * delay: (ms: number) => Promise, + * dryRun?: boolean, + * }} opts + */ +export const sendAction = async (bridgeAction, opts) => { + const { marshaller } = opts; + const offerBody = JSON.stringify(marshaller.toCapData(harden(bridgeAction))); + + // tryExit should not require --allow-spend + // https://github.com/Agoric/agoric-sdk/issues/7291 + const spendMethods = ['executeOffer', 'tryExitOffer']; + const spendArg = spendMethods.includes(bridgeAction.method) + ? ['--allow-spend'] + : []; + + const act = ['wallet-action', ...spendArg, offerBody]; + const out = execSwingsetTransaction([...act, '--output', 'json'], opts); + if (opts.dryRun) { + return; + } + + assert(out); // not dry run + const tx = JSON.parse(out); + if (tx.code !== 0) { + const err = Error(`failed to send tx: ${tx.raw_log} code: ${tx.code}`); + // @ts-expect-error XXX how to add properties to an error? + err.code = tx.code; + throw err; + } + + return pollTx(tx.txhash, opts); +}; + +/** + * Stop-gap using execFileSync until we have a pure JS signing client. + * + * @param {object} root0 + * @param {import('@agoric/client-utils').WalletUtils} root0.walletUtils + * @param {import('child_process')['execFileSync']} root0.execFileSync + * @param {typeof setTimeout} root0.setTimeout + * @param {import('@agoric/client-utils').MinimalNetworkConfig} networkConfig + */ +export const makeAgdWalletUtils = async ( + { execFileSync, walletUtils, setTimeout }, + networkConfig, +) => { + const { marshaller } = walletUtils; + + const { delay } = await makeTimerUtils({ setTimeout }); + /** + * + * @param {string} from + * @param {import('@agoric/smart-wallet/src/smartWallet.js').BridgeAction} bridgeAction + */ + const broadcastBridgeAction = async (from, bridgeAction) => { + console.log('broadcastBridgeAction', inspect(bridgeAction, { depth: 10 })); + return sendAction(bridgeAction, { + ...networkConfig, + delay, + execFileSync, + from, + marshaller, + keyring: { backend: 'test' }, + }); + }; + + return { + broadcastBridgeAction, + }; +}; diff --git a/agoric/a3p-integration/proposals/k:kread/upgrade-kread/b1-6e51d6d709f732b348d7c1f671e8871808ee75c69c31726c2513d3b2c7a15a56698fb9092f5ed54bcc7b13555637db69dfcf5980b366551310268bc8ea5a6ec7.json b/agoric/a3p-integration/proposals/k:kread/upgrade-kread/b1-6e51d6d709f732b348d7c1f671e8871808ee75c69c31726c2513d3b2c7a15a56698fb9092f5ed54bcc7b13555637db69dfcf5980b366551310268bc8ea5a6ec7.json new file mode 100644 index 000000000..c751bd322 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/upgrade-kread/b1-6e51d6d709f732b348d7c1f671e8871808ee75c69c31726c2513d3b2c7a15a56698fb9092f5ed54bcc7b13555637db69dfcf5980b366551310268bc8ea5a6ec7.json @@ -0,0 +1,5 @@ +{ + "moduleFormat": "endoZipBase64", + "endoZipBase64": "UEsDBAoAAAAAAAAAAABDy8jrmm8AAJpvAAAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgIm1vZHVsZSI6ICIuL3NyYy9wcm9wb3NhbHMvdXBncmFkZS1rcmVhZC1wcm9wb3NhbC5qcyIKICB9LAogICJjb21wYXJ0bWVudHMiOiB7CiAgICAiQGFnb3JpYy92YXRzLXYwLjE1LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvdmF0cyIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3ZhdHMtdjAuMTUuMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3ZhdHMtdjAuMTUuMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vYWdvcmljLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL2JhbmsvdjFiZXRhMS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvYmFuay92MWJldGExL3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9iYW5rL3YxYmV0YTEvdHguanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL2JhbmsvdjFiZXRhMS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvZGlzdHJpYnV0aW9uL3YxYmV0YTEvcXVlcnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL2Rpc3RyaWJ1dGlvbi92MWJldGExL3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9kaXN0cmlidXRpb24vdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvZGlzdHJpYnV0aW9uL3YxYmV0YTEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL3N0YWtpbmcvdjFiZXRhMS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3Mvc3Rha2luZy92MWJldGExL3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9zdGFraW5nL3YxYmV0YTEvdHguanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL3N0YWtpbmcvdjFiZXRhMS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvdHgvdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvdHgvdjFiZXRhMS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9nb29nbGUvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9nb29nbGUvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9nb29nbGUvcHJvdG9idWYvYW55LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2dvb2dsZS9wcm90b2J1Zi9hbnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjL2FwcGxpY2F0aW9ucy9pbnRlcmNoYWluX2FjY291bnRzL3YxL3BhY2tldC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pYmMvYXBwbGljYXRpb25zL2ludGVyY2hhaW5fYWNjb3VudHMvdjEvcGFja2V0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy9hcHBsaWNhdGlvbnMvdHJhbnNmZXIvdjEvdHguanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjL2FwcGxpY2F0aW9ucy90cmFuc2Zlci92MS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvY29yZS9jaGFubmVsL3YxL2NoYW5uZWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjL2NvcmUvY2hhbm5lbC92MS9jaGFubmVsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy9jb3JlL2Nvbm5lY3Rpb24vdjEvY29ubmVjdGlvbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pYmMvY29yZS9jb25uZWN0aW9uL3YxL2Nvbm5lY3Rpb24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWNxLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWNxL3YxLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWNxL3YxL3BhY2tldC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pY3EvdjEvcGFja2V0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9zd2luZ3NldC9tc2dzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy9zd2luZ3NldC9tc2dzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3N3aW5nc2V0L3F1ZXJ5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy9zd2luZ3NldC9xdWVyeS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9zd2luZ3NldC9zd2luZ3NldC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvc3dpbmdzZXQvc3dpbmdzZXQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vdGVuZGVybWludC8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL3RlbmRlcm1pbnQvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by90ZW5kZXJtaW50L2FiY2kvdHlwZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vdGVuZGVybWludC9hYmNpL3R5cGVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3ZzdG9yYWdlL3F1ZXJ5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy92c3RvcmFnZS9xdWVyeS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2dvdmVybmFuY2UiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9uZXR3b3JrIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbmV0d29yay12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N3aW5nc2V0LXZhdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N3aW5nc2V0LXZhdC12MC4zMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy90aW1lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdGltZS12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdHMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdm93IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdm93LXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy96b2VTZXJ2aWNlL3pvZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvc291cmNlLW1hcC1ub2RlLXBvd2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc291cmNlLW1hcC1ub2RlLXBvd2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3NvdXJjZS1tYXAtbm9kZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc291cmNlLW1hcC1ub2RlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEyIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiaW1wb3J0LW1ldGEtcmVzb2x2ZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJpbXBvcnQtbWV0YS1yZXNvbHZlLXYyLjIuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiamVzc2llLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Byb3Bvc2Fscy91cGdyYWRlLWtyZWFkLXByb3Bvc2FsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wcm9wb3NhbHMvdXBncmFkZS1rcmVhZC1wcm9wb3NhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI1ZWMwMDk3NDYzZDQ0ZTQ1ZjNmMjBiNTZhZjQyMGFhMjA2N2E4ZWJjMzc2YTlhMGFiZDkyMjVjZDk2Y2VlOGM5OTAyNmJjNDVmYTNmYzBjNTY5Nzk2ZWFjM2I5N2NiM2NlOWY0MDQ0MDMyYjgyZGUzYTM5NTk1Y2IwM2JkOTk0IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vudi1vcHRpb25zIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQxNzc2ZWViMjFiMWM1NTFkYTNmOWI4ZGNkZjVhYmQ4OGJjYmY1ZjhlMzhjYjA0ZWRhYmM4Y2I5NjRiYjk3NTE4ZmY0Y2FjYjc0M2U4YWJiYWFjMjI4NjE2ODE1ZmJlNDBlODZiZTJkN2Q0MjgxNTc4OTUyZjhhYTg2NmExYjk3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vudi1vcHRpb25zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbnYtb3B0aW9ucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFkYjE1ZDRiNjY5MzMyNWQzNDUyMzgwY2E2MmRkOTdhN2FlNGQwMzNiZjY3NTNhYmY0MTc1YmY4ZjJhNDA1ZGNjOTNkODc3ZGRkZWMxMGE3YmU1YjRmYzMyMzY3ZDcyZTNlNzY4MDBmN2Y0OGM2MDhkYTQ1M2MzZDJkMTE0NDg1IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9lcnJvcnMtdjEuMi43IjogewogICAgICAibmFtZSI6ICJAZW5kby9lcnJvcnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2Fzc2VydC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Fzc2VydC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb21wYXJ0bWVudC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbXBhcnRtZW50LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbnNvbGUtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb25zb2xlLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93bi1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xvY2tkb3duLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAic2VzL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MWY4ZjRmNTdmNGY2ZTJjOGI1ZDI5NjczNjdmZmU0ZDA3YzljYjE3NjFhN2M1Yzg4NDg2ZjRiMjdhNGUzZmU1N2QyOTg0YTU5MDgzY2Y1Mjk3MTkxOGZmOTllYmZhNmI4MmE4YzBkOWM1ZDM0ZWM1ZDk0OGIxNWM5OWQyZWIxMyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjlkM2U5MTA0YjZlMjViMDJhNzM0OTc5YWQ0ZjE5Nzg2YmE4NzE2OWU4MGY4YjBkOGE1MTE2NzgxZDkxNmNhMWNhYTBjY2FhZDllY2IzYTQ1YWYxMjAxNTYyZjAwNWVhOGEwYTJlMGFkMjYyMmMwN2E5NThlYzg3ZmU0NTgxMDliIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sb2NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbG9jYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhOTVkZjRjYTMyODIwOTY4ZjEyMDNhYjVlYTI3MmI5NjFhZTMxMTYzNDA3MGNmMTUyMGU4YWFhNjJjYThlYTIyMjk3MDQ0YWM0ZTg4OTI2NzRmYmI5MWEzNDNhNzY1MGRjYmFmNTNiN2M3NDUyMWFkNWU1NTZiOGYzM2EzM2E0ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjkxMTE0NmM4ZTA0NTIyNzAwZTIzYzkzOGU2YmE1NzBhYzdlYTFlOTE1ZDllN2M0ZGNiYzUzZmMwZjdhYjhhY2I4ZGQ3Y2ZjMDdjNTJlMDJmMmM2NTc0MDRlZTg5ZWY3MzExYTMyNzk0YTg3MTFhYTdhYjQzYTU0MjBiMzJjODgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm8tc2hpbS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm8tc2hpbS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5MjA1MWY2OTQ0MmRiMTNmOWUyYjZjMTlkZGQxODljNTFhYjIxYTg0MDQyMTAzMDFmOGQyNjFiM2IzMTk0OGJkNTBjYjZmODUyM2UwMzVjNGYzZGY3NjMxMTU4MjhmYzJlYWRjOWMyYjEyNzE3ZmEzOTM4ZmQ0ZjFkNzg0YjEwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYWNrLXR1cm5zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFjay10dXJucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgwY2JhNzU3OThiZGEzOTIwZDc1ZDY4NWRmMzgzYTZiYmEwNzE1ZTEzMjY0ODRjNjNhZjgxZWJkZTdlODRiMzg1ZjA3YTczNzdmYzUyZmMzYzgwZTgwMzFiYTdmOTFiNWJkMjVjODdjNDk5NDY5ZWExZDEzNzA3Nzc3OWFiMWU4IgogICAgICAgIH0sCiAgICAgICAgIi4vdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmZWEwNDExYjIxNmM3MTQxNTE0Mzk2NjY0ZjhmODIxM2FjZDExMmU5MzBjMGY0ZmFjMDM0MjdmNTczN2Q3MzdkMGU5NDZiNmNjNGM2MDg4NGQwNDA1N2I3N2Y4ODA4YTM5NjczNjg1OTU1ODg3MjQzNWVhZWVlZDJmMTMyNjQ3ZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZmFyLXYxLjEuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZmFyIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwNDM1M2MxZTI4MmM3ZjA4YTQ5ZDE2YWMyZWVhMDY5YTFjMzI1MzQwNWJlNjNkODU1YTgzOWIwOGI4MGQ5YmQzYzI3NDQ1YWUxZGEyYmMzMWJmNDYyMTNkNWIyZDQxNDM5MTE3Y2YxZWMwZjExYWYwMjQ3ZDk1NWE3NjE3NzU2IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGFzcy1zdHlsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZmFzdC1jaGVjay9hdmEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGZhc3QtY2hlY2svYXZhLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGliL2VzbS9hdmEtZmFzdC1jaGVjay5qcyIKICAgICAgICB9LAogICAgICAgICJAZmFzdC1jaGVjay9hdmEvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBmYXN0LWNoZWNrL2F2YS12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjk5MzJkNTRmNWI0MWFjN2IyNDFiMDQ0N2RlYmI1Zjc5MzU5YTRjYWM1MmQ3Y2I2ODQ1NTRkMjUxNTE5OWI5OWE0NWYwMWZlYzkyYWNhNDdhYTViNzE1OWU0ZWRiOTRhYzdjYzRiMWJhODYxNWIyMzk0NDI4ODFlZDg5MGZlMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29weUFycmF5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5QXJyYXkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZjA3YWI5ZDE3M2M1MDM4MzhlYzVhYzkzMDYxYjk3YmMxZTAyNzljNmJlM2M0ZDdiYTQ2YzFlOWFjZjQxYzBjOTgwMGRhZGI5YTI1YmI5ZTc5YmE3MjJhMGQ0MzQ0YmNjZmI5MGIyMGViNjdmMWNmOTA4NTg4NGYyYzcyZmJhYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5UmVjb3JkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5UmVjb3JkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjFjNDljYzZkNTc3YWFiMmJlYTc4ZDQ0M2NlOGRlNzEzOGE0OGFkZDAxOGEyMjE1NjRmYTE0NDRiMTVlYWE2OWI2MjIxNjExODA4NWVlMjY1NTUyZWU0OGM2ZWRmNmVhNTlhMDAzOGU4Mzc1ZTU0MTQ5ODJlMjEyYTg5MWZlMjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWVwbHlGdWxmaWxsZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4M2MwYmMwYmVjMTk0ZmQ5MTFiNDljODc5Mzk5ODg2ZGY2ZDY2ZGI3OWY3NTBkMjQzZDY2NWQ5YmFmYTFjY2M0NDcyZjg0MzM4NjQxYjBlMTg0Y2FjMzljNTc3ZGZhMTE1ZThiM2RiYmY2OTI3ZjliNzdiMGQ3MjgzNzRjNzA2ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZWNkMGUzZGVhNjRhOTE5MmM1NzhkMDc4YmFmZGE2OGQxNWYzYmY4YzVmN2Y3MmRlYTUzYmY2MDQyZWRlMjY2MmExYTMwZTVkNWRhNGYxNjI3NjRlNDExMTFkYjA2ZGE5YjRiMjVjNDNhOTE3OWRhMjYxMmFiMDZkOGE1ZTgzZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2l0ZXItaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFhOGQ3Y2UwNTFiZWM4NzU2NGU3YzRmNmFkMTIwMzYyNjk4MmY0MWEzMjM4YTUxMDI1ZmFhNTMxMDFkNjI3YTUzMDBjYmI0MDY2MWIzOGU4ZGIxMjAwMDMyMmQ3YWRmOTU5MmNmMGE1YmE3Y2Q2MzE2OWMyMTdiNDBiYzQ4YzMwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2UtZmFyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLWZhci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhlZGFiNTk2OGI2OTFhMjlhMmZkODU0Y2EzMzFiZDQ3NWUwZjQ3ZjU1NGJmMWY5ZGQ2N2NjMTdjZjI3YTEyYzlkNzY1NDZhZDZmYjZlMjllYjk5NjE1ZjQ0Y2I1ZjAxNTUxNDI4NmE5YWIyM2Y0NDhiYmM0NWIwODQxYzFkYWY5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2VUYWdnZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2VUYWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMDFmODJmOWI0MDY0M2Y1OWFkYzIwMmRhNzFhMDFhNTdhZjYwNDRmYTVkZTlmOWJmODkzYjkzMjc5Y2ExYTE1Y2JhMTBiZmQ1NmMwYWQ5MzAwNjM3YWUyZDYyZDA4ZWI4M2JhNzA2M2JhODA1ZGZkMWJlYWYxMjRiYzJmZWEyMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZTU1NjA0N2VmMDMxZGI0MzZjODRmYTMyOGIzNzNmYjQ4YmE5ZTQ2NmVjMjQyZDQwZjFmZjJmZmIyZTZmZTBkMjkwY2JjY2QwOTA1ZDFmMjgxMDk2ZGRkNTM3YjgwY2ZhZDAxNjdjYTI2MTk1MzU5OTdhMjMyODhiMzY4OGNjMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlT2YuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDJhOWVmYmIyODU2ZTZmZmMwZjM4OWM4NWRmZGRhODRlNjExYzNiZjQ3YmE0NzgwZjIwNzgxYjk2MzdiNjAyMjFiZTE0ODAzOGE4MDlmMmQ2ZmI3NmUyZGU2NDY5ZmRhZTYzYzAwNTI1NmJhNTRlNDk2ZTc0ZmJlZDUzOTdhZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yZW1vdGFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JlbW90YWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM5MTAwOTM4NzQ3NWNiOTczN2JjOGFkNTBmOThhNDg4YzhhNTExMTAzMzI2YjUzYjQyOTQ5MTdhZDY4Njg4M2EwYTRiYWQ2ZGIwNmE5NGMwNTA2YmVmMTRhY2JhZGYzMDg1MjhiOTFkYTI0YjJhNTBlOTU4MWEzZWNhOTIwNzU3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3NhZmUtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2FmZS1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWQ2Y2JmYjNjM2Y5ZTE4YTAwNTY4N2M1OTdmMWVmYjc3OTVkYjNhYzM2OTc0NDdjYWEyYjI4MjRjYzFiYWIxNGNiMWI4YTFhNzA2YWRhMTI5ZDc5OGIwYTkyZDA5YTkxM2YwODNiZmM3YjYzNjc2ZTcxMzhmNWZiZmU5YzBjODUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RyaW5nLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdHJpbmcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzOWIyMTAxNzFkZmYyOTZmMzhiNDU3NzA2YWIwMjFlYWJiNzU2MGUyNThkOTNmZmY2OGI1NmU5NmM2YzJhNmMyYzlkOTcxNmI5NjYwZWE5OGNlZDlmZjRhYjZkZjAyYWEwMWI4ZjgxODZiNzA2ZTVmNzBiYTI3ZGZlOTVlZDg5ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zeW1ib2wuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N5bWJvbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY4NWM0ZWFjYTc5ZTgxY2U3MzBjNWNjYWM0MTIwZjkyYmY0OGIzMTdmMzRkODM1YWQyMTM5ZWM3MTExNTU5M2NlNGU5ZjlhYzY4ZDc3YjlkZDZiNmIzOTc1YmYxNjZiZjQxZGUzODI0ZWVjZmU1YmIxNjllNTcxYjMzYmFmZWMyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdGFnZ2VkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2RkMGNlOTJlZThiNWU2ZDAwOTdhNTc4ODI0MmE4NzllNzI2YzY3YzU0ZmZiMGUzYmE0ZWFlMzk5NjQxZGM0ZDFhYzVlNTYxOWY1ZjU2NmU2YTNlZGQ4NDZjZjg3M2I1YzFjNTk3ODViMjUxZmQyMDRlOTA4OWIxN2FjMDE0OTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMyOWZjMTU0MDUzNzcxNWRmODU0YTM4YTVlNDVhZTZkMjI4NmU5ZmIxNTFjNTI4NTZjOWI5ZGZjMWUyMmNkNjMwOWVkMzIyMjMwZTZmZWNjNmEyNDhhNmIzNDUwYTNmZjE2NGE2NzRlZWZmODI4YzkxNWVjNDgyMDNiZGM2NjQ3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hc3NlcnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29tcGFydG1lbnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb21wYXJ0bWVudC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb25zb2xlLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29uc29sZS1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24tc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sb2NrZG93bi1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODM3NjUwNWY2OGJkYzNjYjk0ZTY1NzY0ZTJmZTMyZWNlOTAyNmExMzc3ZTcwNDFlZWFkYzc1MDE4MGE5N2U5ODJmN2M0YWI4ZjczMTg4ODQ4NDJkZDIyNTg1MjlkYjQyNTQ0ZjU4YmQwOTkwOTM5NDhiMGM1YzM0MGI4NmVlOWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdjNjJiNTgwNWM0MjU1NzZiZDExYmEzODcxMDZlNzJhZDY5NWE3NDIyM2Y1OGQ2Zjg5MWNiZjE4YTY2Y2U0MjY4MTFiMTJmMzhkYjEzODQ4NzcwYzkyZmU5YTgzNDczYjQyZjE3MGRmNDZjYjg2ZDI1NDg4YjdmNWZkMWQ5ZWE0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lbW8tcmFjZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWVtby1yYWNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDYyMjVmMWI1M2RmMWIyOGIzOWUzNzcyN2JhMGRmNDkxNThjMTI3MmJmYzExNTFlM2VkOTc4ZGU1ZTgwYmI1MzU4MGY5MDVhMzcyNTg2MjJiYWMzZmM4ZjgzZTA5MDQxZWJmNzQxZDgwNTZhZmZiNjFkMmI2MWQyZGI0YzNlYjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2E4YzUyMzQ3NWVlMDVkZTI4MDFiZDM2ZDk3NjdkNjgyNWFhNjBkZGEwNGQ0N2U0NDA0OWVjNGY0OTA4NjM2MWEzOWUzZmIxOThmYWM4NDhjMzU2MGZmNWY1NWM3NzM1MjI1NTM1ZWNhNTYzZWVhMjc2NzViMThhNGY5NDc2ZjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9UEsDBAoAAAAAAAAAAAA6Y/mEowUAAKMFAAA8AAAAQGFnb3JpYy92YXRzLXYwLjE1LjEvc3JjL3Byb3Bvc2Fscy91cGdyYWRlLWtyZWFkLXByb3Bvc2FsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbImdldE1hbmlmZXN0Rm9yVXBncmFkZUtyZWFkIiwidXBncmFkZUtyZWFkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0ICAgICAgICB1cGdyYWRlS3JlYWQ9YXN5bmMocG93ZXJzKT0+e1xuY29uc29sZS5sb2coJ0xPRzogdXBncmFkaW5nIEtyZWFkJyk7XG5cbmNvbnN0e1xuY29uc3VtZTp7a3JlYWRLaXQ6a3JlYWRLaXRQLGtyZWFkQ29tbWl0dGVlQ3JlYXRvckZhY2V0fX09XG5wb3dlcnM7XG5cbmNvbnN0IGluaXRpYWxQb3Nlckludml0YXRpb249YXdhaXQgRShcbmtyZWFkQ29tbWl0dGVlQ3JlYXRvckZhY2V0KS5cbmdldFBvc2VySW52aXRhdGlvbigpO1xuXG5jb25zdHthZG1pbkZhY2V0LHByaXZhdGVBcmdzfT1hd2FpdCBrcmVhZEtpdFA7XG5cbmNvbnN0IG5ld1ByaXZhdGVBcmdzPWhhcmRlbih7XG4uLi5wcml2YXRlQXJncyxcbmluaXRpYWxQb3Nlckludml0YXRpb259KTtcblxuXG5jb25zdCBidW5kbGVJRD1cbidiMS0xZWQyMTVmYTYxMzFiOTM3ZmZlMmE3M2E4NThlNGYyNDZhN2UzZjYzODQ0ZWYzMGJiOGJhZjI2MmYxMjVhNjNhYjNjNTI2YzAyMTg4NjA2MGMzNTE5MDYwYWVjYWM2NWJkZDNkYTRiNmQwY2M5Y2M0YTgwMzA2YTk2MjNjN2E5MSc7XG5hd2FpdCBFKGFkbWluRmFjZXQpLnVwZ3JhZGVDb250cmFjdChidW5kbGVJRCxuZXdQcml2YXRlQXJncyk7XG5cbmNvbnNvbGUubG9nKCdMT0c6IEtSRUFkIGNvbnRyYWN0IHVwZ3JhZGVkIScpO1xuIH07JGjNj19vbmNlLnVwZ3JhZGVLcmVhZCh1cGdyYWRlS3JlYWQpO1xuXG5jb25zdCAgICAgICAgZ2V0TWFuaWZlc3RGb3JVcGdyYWRlS3JlYWQ9KCk9Pih7XG5tYW5pZmVzdDp7XG5bdXBncmFkZUtyZWFkLm5hbWVdOntcbmNvbnN1bWU6e1xua3JlYWRLaXQ6dHJ1ZSxcbmtyZWFkQ29tbWl0dGVlQ3JlYXRvckZhY2V0OnRydWV9fX19KTskaM2PX29uY2UuZ2V0TWFuaWZlc3RGb3JVcGdyYWRlS3JlYWQoZ2V0TWFuaWZlc3RGb3JVcGdyYWRlS3JlYWQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidXBncmFkZUtyZWFkIjpbInVwZ3JhZGVLcmVhZCJdLCJnZXRNYW5pZmVzdEZvclVwZ3JhZGVLcmVhZCI6WyJnZXRNYW5pZmVzdEZvclVwZ3JhZGVLcmVhZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFGOc6lAEAAJQBAAAhAAAAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2Vudi1vcHRpb25zLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2Vudi1vcHRpb25zLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJK3R37sDQAA7A0AACsAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjcvc3JjL2Vudi1vcHRpb25zLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIiwiZ2V0RW52aXJvbm1lbnRPcHRpb24iLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IiwibWFrZUVudmlyb25tZW50Q2FwdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cblxuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuY29uc3R7ZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLy9cbi8vXG5jb25zdCB1bmN1cnJ5VGhpcz1cbihmbik9PlxuKHJlY2VpdmVyLC4uLmFyZ3MpPT5cbmFwcGx5KGZuLHJlY2VpdmVyLGFyZ3MpO1xuY29uc3QgYXJyYXlQdXNoPXVuY3VycnlUaGlzKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbmNvbnN0IGFycmF5SW5jbHVkZXM9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKTtcbmNvbnN0IHN0cmluZ1NwbGl0PXVuY3VycnlUaGlzKFN0cmluZy5wcm90b3R5cGUuc3BsaXQpO1xuXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdCBGYWlsPShsaXRlcmFscywuLi5hcmdzKT0+e1xubGV0IG1zZz1saXRlcmFsc1swXTtcbmZvcihsZXQgaT0wO2k8YXJncy5sZW5ndGg7aSs9MSl7XG5tc2c9IGAke21zZ30ke2FyZ3NbaV19JHtsaXRlcmFsc1tpKzFdfWA7XG4gfVxudGhyb3cgRXJyb3IobXNnKTtcbiB9O1xuXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVudmlyb25tZW50Q2FwdG9yPShhR2xvYmFsLGRyb3BOYW1lcz1mYWxzZSk9PntcbmNvbnN0IGNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcz1bXTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb249KFxub3B0aW9uTmFtZSxcbmRlZmF1bHRTZXR0aW5nLFxub3B0T3RoZXJWYWx1ZXM9dW5kZWZpbmVkKT0+XG57XG50eXBlb2Ygb3B0aW9uTmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBuYW1lICR7cShvcHRpb25OYW1lKX0gbXVzdCBiZSBhIHN0cmluZy5gO1xudHlwZW9mIGRlZmF1bHRTZXR0aW5nPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIGRlZmF1bHQgc2V0dGluZyAke3EoXG5kZWZhdWx0U2V0dGluZylcbiB9IG11c3QgYmUgYSBzdHJpbmcuYDtcblxuLyogICAgICAgICAgICAgICAgICovXG5sZXQgc2V0dGluZz1kZWZhdWx0U2V0dGluZztcbmNvbnN0IGdsb2JhbFByb2Nlc3M9YUdsb2JhbC5wcm9jZXNzfHx1bmRlZmluZWQ7XG5jb25zdCBnbG9iYWxFbnY9XG50eXBlb2YgZ2xvYmFsUHJvY2Vzcz09PSdvYmplY3QnJiZnbG9iYWxQcm9jZXNzLmVudnx8dW5kZWZpbmVkO1xuaWYodHlwZW9mIGdsb2JhbEVudj09PSdvYmplY3QnKXtcbmlmKG9wdGlvbk5hbWUgaW4gZ2xvYmFsRW52KXtcbmlmKCFkcm9wTmFtZXMpe1xuYXJyYXlQdXNoKGNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcyxvcHRpb25OYW1lKTtcbiB9XG5jb25zdCBvcHRpb25WYWx1ZT1nbG9iYWxFbnZbb3B0aW9uTmFtZV07XG4vL1xudHlwZW9mIG9wdGlvblZhbHVlPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWVkICR7cShcbm9wdGlvbk5hbWUpXG4gfSwgaWYgcHJlc2VudCwgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUsIGdvdCAke3EoXG5vcHRpb25WYWx1ZSlcbiB9YDtcbnNldHRpbmc9b3B0aW9uVmFsdWU7XG4gfVxuIH1cbm9wdE90aGVyVmFsdWVzPT09dW5kZWZpbmVkfHxcbnNldHRpbmc9PT1kZWZhdWx0U2V0dGluZ3x8XG5hcnJheUluY2x1ZGVzKG9wdE90aGVyVmFsdWVzLHNldHRpbmcpfHxcbkZhaWwgYFVucmVjb2duaXplZCAke3Eob3B0aW9uTmFtZSl9IHZhbHVlICR7cShcbnNldHRpbmcpXG4gfS4gRXhwZWN0ZWQgb25lIG9mICR7cShbZGVmYXVsdFNldHRpbmcsLi4ub3B0T3RoZXJWYWx1ZXNdKX1gO1xucmV0dXJuIHNldHRpbmc7XG4gfTtcbmZyZWV6ZShnZXRFbnZpcm9ubWVudE9wdGlvbik7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldEVudmlyb25tZW50T3B0aW9uc0xpc3Q9KG9wdGlvbk5hbWUpPT57XG5jb25zdCBvcHRpb249Z2V0RW52aXJvbm1lbnRPcHRpb24ob3B0aW9uTmFtZSwnJyk7XG5yZXR1cm4gZnJlZXplKG9wdGlvbj09PScnP1tdOnN0cmluZ1NwbGl0KG9wdGlvbiwnLCcpKTtcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpO1xuXG5jb25zdCBlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzPShvcHRpb25OYW1lLGVsZW1lbnQpPT5cbmFycmF5SW5jbHVkZXMoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdChvcHRpb25OYW1lKSxlbGVtZW50KTtcblxuY29uc3QgZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPSgpPT57XG5yZXR1cm4gZnJlZXplKFsuLi5jYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXNdKTtcbiB9O1xuZnJlZXplKGdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcyk7XG5cbnJldHVybiBmcmVlemUoe1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxcbmdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc30pO1xuXG4gfTskaM2PX29uY2UubWFrZUVudmlyb25tZW50Q2FwdG9yKG1ha2VFbnZpcm9ubWVudENhcHRvcik7XG5mcmVlemUobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmdldEVudmlyb25tZW50T3B0aW9uLFxuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCxcbmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXN9PVxubWFrZUVudmlyb25tZW50Q2FwdG9yKGdsb2JhbFRoaXMsdHJ1ZSk7JGjNj19vbmNlLmdldEVudmlyb25tZW50T3B0aW9uKGdldEVudmlyb25tZW50T3B0aW9uKTskaM2PX29uY2UuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdChnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KTskaM2PX29uY2UuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyhlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VFbnZpcm9ubWVudENhcHRvciI6WyJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwiZ2V0RW52aXJvbm1lbnRPcHRpb24iOlsiZ2V0RW52aXJvbm1lbnRPcHRpb24iXSwiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0Il0sImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiOlsiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD8cGkx3wcAAN8HAAAcAAAAQGVuZG8vZXJyb3JzLXYxLjIuNy9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiRmFpbCIsIlgiLCJhbm5vdGF0ZUVycm9yIiwiYXNzZXJ0IiwiYiIsImJhcmUiLCJtYWtlRXJyb3IiLCJub3RlIiwicSIsInF1b3RlIiwicmVkYWN0ZWQiLCJ0aHJvd1JlZGFjdGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuXG5jb25zdCBnbG9iYWxBc3NlcnQ9Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmlmKGdsb2JhbEFzc2VydD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGluaXRpYWxpemUgQGVuZG8vZXJyb3JzLCBtaXNzaW5nIGdsb2JhbFRoaXMuYXNzZXJ0LCBpbXBvcnQgJ3NlcycgYmVmb3JlICdAZW5kby9lcnJvcnMnYCk7XG5cbiB9XG5cbmNvbnN0IG1pc3Npbmc9LyogICAgICAgICAgICAgICAgKi9bXG4ndHlwZW9mJyxcbidlcnJvcicsXG4nZmFpbCcsXG4nZXF1YWwnLFxuJ3N0cmluZycsXG4nbm90ZScsXG4nZGV0YWlscycsXG4nRmFpbCcsXG4ncXVvdGUnLFxuLy9cbi8vXG4vL1xuLy9cbidtYWtlQXNzZXJ0J10uXG5maWx0ZXIoKG5hbWUpPT5nbG9iYWxBc3NlcnRbbmFtZV09PT11bmRlZmluZWQpO1xuaWYobWlzc2luZy5sZW5ndGg+MCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGluaXRpYWxpemUgQGVuZG8vZXJyb3JzLCBtaXNzaW5nIGdsb2JhbFRoaXMuYXNzZXJ0IG1ldGhvZHMgJHttaXNzaW5nLmpvaW4oXG4nLCAnKVxuIH1gKTtcblxuIH1cblxuLy9cbi8vXG4vL1xuY29uc3R7XG5iYXJlLFxuZGV0YWlsczpyZWRhY3RlZCxcbmVycm9yOm1ha2VFcnJvcixcbkZhaWw6dGhyb3dSZWRhY3RlZCxcbm1ha2VBc3NlcnQ6X29taXR0ZWRNYWtlQXNzZXJ0LFxubm90ZSxcbnF1b3RlLFxuLi4uYXNzZXJ0aW9uc309XG5nbG9iYWxBc3NlcnQ7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG4kaM2PX29uY2UucmVkYWN0ZWQocmVkYWN0ZWQpOyRozY9fb25jZS5tYWtlRXJyb3IobWFrZUVycm9yKTskaM2PX29uY2UudGhyb3dSZWRhY3RlZCh0aHJvd1JlZGFjdGVkKTskaM2PX29uY2Uubm90ZShub3RlKTskaM2PX29uY2UucXVvdGUocXVvdGUpO2NvbnN0IGFzc2VydD0odmFsdWUsb3B0RGV0YWlscyxlcnJDb250cnVjdG9yLG9wdGlvbnMpPT5cbmdsb2JhbEFzc2VydCh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk7JGjNj19vbmNlLmFzc2VydChhc3NlcnQpO1xuT2JqZWN0LmFzc2lnbihhc3NlcnQsYXNzZXJ0aW9ucyk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGJhcmVPclF1b3RlPWJhcmV8fHF1b3RlO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLmJhcmVPclF1b3RlKGJhcmVPclF1b3RlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlZGFjdGVkIjpbInJlZGFjdGVkIl0sIlgiOlsicmVkYWN0ZWQiXSwibWFrZUVycm9yIjpbIm1ha2VFcnJvciJdLCJ0aHJvd1JlZGFjdGVkIjpbInRocm93UmVkYWN0ZWQiXSwiRmFpbCI6WyJ0aHJvd1JlZGFjdGVkIl0sIm5vdGUiOlsibm90ZSJdLCJhbm5vdGF0ZUVycm9yIjpbIm5vdGUiXSwicXVvdGUiOlsicXVvdGUiXSwicSI6WyJxdW90ZSJdLCJhc3NlcnQiOlsiYXNzZXJ0Il0sImJhcmUiOlsiYmFyZU9yUXVvdGUiXSwiYiI6WyJiYXJlT3JRdW90ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB+XVUrpRAAAKUQAAAjAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL0UuanN7ImltcG9ydHMiOlsiLi90cmFjay10dXJucy5qcyIsIi4vbWVzc2FnZS1icmVha3BvaW50cy5qcyJdLCJleHBvcnRzIjpbImRlZmF1bHQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHJhY2tUdXJucyxtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL3RyYWNrLXR1cm5zLmpzXCIsIFtbXCJ0cmFja1R1cm5zXCIsIFskaM2PX2EgPT4gKHRyYWNrVHVybnMgPSAkaM2PX2EpXV1dXSxbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbmNvbnN0e2RldGFpbHM6WCxxdW90ZTpxLEZhaWwsZXJyb3I6bWFrZUVycm9yfT1hc3NlcnQ7XG5jb25zdHthc3NpZ24sY3JlYXRlfT1PYmplY3Q7XG5cbi8qXG5cbiAqL1xuXG5jb25zdCBvblNlbmQ9bWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKCdFTkRPX1NFTkRfQlJFQUtQT0lOVFMnKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGJhc2VGcmVlemFibGVQcm94eUhhbmRsZXI9e1xuc2V0KF90YXJnZXQsX3Byb3AsX3ZhbHVlKXtcbnJldHVybiBmYWxzZTtcbiB9LFxuaXNFeHRlbnNpYmxlKF90YXJnZXQpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5zZXRQcm90b3R5cGVPZihfdGFyZ2V0LF92YWx1ZSl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbmRlbGV0ZVByb3BlcnR5KF90YXJnZXQsX3Byb3Ape1xucmV0dXJuIGZhbHNlO1xuIH19O1xuXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUVQcm94eUhhbmRsZXI9KHJlY2lwaWVudCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5nZXQ6KF90YXJnZXQscHJvcGVydHlLZXkscmVjZWl2ZXIpPT57XG5yZXR1cm4gaGFyZGVuKFxue1xuLy9cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW3Byb3BlcnR5S2V5XSguLi5hcmdzKXtcbmlmKHRoaXMhPT1yZWNlaXZlcil7XG4vL1xucmV0dXJuIEhhbmRsZWRQcm9taXNlLnJlamVjdChcbm1ha2VFcnJvcihcblggYFVuZXhwZWN0ZWQgcmVjZWl2ZXIgZm9yIFwiJHtxKHByb3BlcnR5S2V5KX1cIiBtZXRob2Qgb2YgRSgke3EoXG5yZWNpcGllbnQpXG4gfSlgKSk7XG5cblxuIH1cblxuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQscHJvcGVydHlLZXkpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5yZXR1cm4gSGFuZGxlZFByb21pc2UuYXBwbHlNZXRob2QocmVjaXBpZW50LHByb3BlcnR5S2V5LGFyZ3MpO1xuIH1cbi8vXG59W3Byb3BlcnR5S2V5XSk7XG5cbiB9LFxuYXBwbHk6KF90YXJnZXQsX3RoaXNBcmcsYXJnQXJyYXk9W10pPT57XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCx1bmRlZmluZWQpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuIH1cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5hcHBseUZ1bmN0aW9uKHJlY2lwaWVudCxhcmdBcnJheSk7XG4gfSxcbmhhczooX3RhcmdldCxfcCk9Pntcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUVTZW5kT25seVByb3h5SGFuZGxlcj0ocmVjaXBpZW50LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmdldDooX3RhcmdldCxwcm9wZXJ0eUtleSxyZWNlaXZlcik9PntcbnJldHVybiBoYXJkZW4oXG57XG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltwcm9wZXJ0eUtleV0oLi4uYXJncyl7XG4vL1xudGhpcz09PXJlY2VpdmVyfHxcbkZhaWwgYFVuZXhwZWN0ZWQgcmVjZWl2ZXIgZm9yIFwiJHtxKFxucHJvcGVydHlLZXkpXG4gfVwiIG1ldGhvZCBvZiBFLnNlbmRPbmx5KCR7cShyZWNpcGllbnQpfSlgO1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQscHJvcGVydHlLZXkpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5IYW5kbGVkUHJvbWlzZS5hcHBseU1ldGhvZFNlbmRPbmx5KHJlY2lwaWVudCxwcm9wZXJ0eUtleSxhcmdzKTtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuLy9cbn1bcHJvcGVydHlLZXldKTtcblxuIH0sXG5hcHBseTooX3RhcmdldCxfdGhpc0FyZyxhcmdzQXJyYXk9W10pPT57XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCx1bmRlZmluZWQpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuIH1cbkhhbmRsZWRQcm9taXNlLmFwcGx5RnVuY3Rpb25TZW5kT25seShyZWNpcGllbnQsYXJnc0FycmF5KTtcbnJldHVybiB1bmRlZmluZWQ7XG4gfSxcbmhhczooX3RhcmdldCxfcCk9Pntcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUVHZXRQcm94eUhhbmRsZXI9KHgsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuaGFzOihfdGFyZ2V0LF9wcm9wKT0+dHJ1ZSxcbmdldDooX3RhcmdldCxwcm9wKT0+SGFuZGxlZFByb21pc2UuZ2V0KHgscHJvcCl9KTtcblxuXG4vKlxuXG4gKi9cbmNvbnN0IG1ha2VFPShIYW5kbGVkUHJvbWlzZSk9PntcbnJldHVybiBoYXJkZW4oXG5hc3NpZ24oXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbi8vXG4oeCk9PmhhcmRlbihuZXcgUHJveHkoKCk9PnsgfSxtYWtlRVByb3h5SGFuZGxlcih4LEhhbmRsZWRQcm9taXNlKSkpLFxue1xuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5nZXQ6KHgpPT5cbi8vXG5oYXJkZW4oXG5uZXcgUHJveHkoY3JlYXRlKG51bGwpLG1ha2VFR2V0UHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG5cblxuLypcblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbnJlc29sdmU6SGFuZGxlZFByb21pc2UucmVzb2x2ZSxcblxuLypcblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbnNlbmRPbmx5Oih4KT0+XG4vL1xuaGFyZGVuKFxubmV3IFByb3h5KCgpPT57IH0sbWFrZUVTZW5kT25seVByb3h5SGFuZGxlcih4LEhhbmRsZWRQcm9taXNlKSkpLFxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG53aGVuOih4LG9uZnVsZmlsbGVkLG9ucmVqZWN0ZWQpPT5cbkhhbmRsZWRQcm9taXNlLnJlc29sdmUoeCkudGhlbihcbi4uLnRyYWNrVHVybnMoW29uZnVsZmlsbGVkLG9ucmVqZWN0ZWRdKSl9KSk7XG5cblxuXG5cbiB9O1xuXG5jb25zdHtkZWZhdWx0OiRjzY9fZGVmYXVsdH09e2RlZmF1bHQ6bWFrZUV9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZmF1bHQoJGPNj19kZWZhdWx0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHQiOlsiZGVmYXVsdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAApAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL2V4cG9ydHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABAg46yqDAAAqgwAACcAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvbG9jYWwuanN7ImltcG9ydHMiOlsiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZ2V0TWV0aG9kTmFtZXMiLCJsb2NhbEFwcGx5RnVuY3Rpb24iLCJsb2NhbEFwcGx5TWV0aG9kIiwibG9jYWxHZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyOyRozY9faW1wb3J0cyhbW1wiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtbXCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXJcIiwgWyRozY9fYSA9PiAobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7ZGV0YWlsczpYLHF1b3RlOnEsRmFpbH09YXNzZXJ0O1xuXG5jb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGdldFByb3RvdHlwZU9mLGZyZWV6ZX09T2JqZWN0O1xuY29uc3R7YXBwbHksb3duS2V5c309UmVmbGVjdDtcblxuY29uc3QgbnR5cGVvZj0oc3BlY2ltZW4pPT5zcGVjaW1lbj09PW51bGw/J251bGwnOnR5cGVvZiBzcGVjaW1lbjtcblxuY29uc3Qgb25EZWxpdmVyeT1tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIoJ0VORE9fREVMSVZFUllfQlJFQUtQT0lOVFMnKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc09iamVjdD0odmFsKT0+T2JqZWN0KHZhbCk9PT12YWw7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjb21wYXJlU3RyaW5naWZpZWQ9KGEsYik9PntcbmlmKHR5cGVvZiBhPT09dHlwZW9mIGIpe1xuY29uc3QgbGVmdD1TdHJpbmcoYSk7XG5jb25zdCByaWdodD1TdHJpbmcoYik7XG4vL1xucmV0dXJuIGxlZnQ8cmlnaHQ/LTE6bGVmdD5yaWdodD8xOjA7XG4gfVxuaWYodHlwZW9mIGE9PT0nc3ltYm9sJyl7XG5hc3NlcnQodHlwZW9mIGI9PT0nc3RyaW5nJyk7XG5yZXR1cm4tMTtcbiB9XG5hc3NlcnQodHlwZW9mIGE9PT0nc3RyaW5nJyk7XG5hc3NlcnQodHlwZW9mIGI9PT0nc3ltYm9sJyk7XG5yZXR1cm4gMTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE1ldGhvZE5hbWVzPSh2YWwpPT57XG5sZXQgbGF5ZXI9dmFsO1xuY29uc3QgbmFtZXM9bmV3IFNldCgpOy8vXG53aGlsZShsYXllciE9PW51bGwmJmxheWVyIT09T2JqZWN0LnByb3RvdHlwZSl7XG4vL1xuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhsYXllcik7XG5mb3IoY29uc3QgbmFtZSBvZiBvd25LZXlzKGRlc2NzKSl7XG4vL1xuLy9cbmlmKHR5cGVvZiB2YWxbbmFtZV09PT0nZnVuY3Rpb24nKXtcbm5hbWVzLmFkZChuYW1lKTtcbiB9XG4gfVxuaWYoIWlzT2JqZWN0KHZhbCkpe1xuYnJlYWs7XG4gfVxubGF5ZXI9Z2V0UHJvdG90eXBlT2YobGF5ZXIpO1xuIH1cbnJldHVybiBoYXJkZW4oWy4uLm5hbWVzXS5zb3J0KGNvbXBhcmVTdHJpbmdpZmllZCkpO1xuIH07XG4vL1xuLy9cbiRozY9fb25jZS5nZXRNZXRob2ROYW1lcyhnZXRNZXRob2ROYW1lcyk7ZnJlZXplKGdldE1ldGhvZE5hbWVzKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlGdW5jdGlvbj0ocmVjaXBpZW50LGFyZ3MpPT57XG50eXBlb2YgcmVjaXBpZW50PT09J2Z1bmN0aW9uJ3x8XG5hc3NlcnQuZmFpbChcblggYENhbm5vdCBpbnZva2UgdGFyZ2V0IGFzIGEgZnVuY3Rpb247IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuaWYob25EZWxpdmVyeSYmb25EZWxpdmVyeS5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCx1bmRlZmluZWQpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkocmVjaXBpZW50LHVuZGVmaW5lZCxhcmdzKTtcbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UubG9jYWxBcHBseUZ1bmN0aW9uKGxvY2FsQXBwbHlGdW5jdGlvbik7XG5cbmNvbnN0ICAgICAgICBsb2NhbEFwcGx5TWV0aG9kPShyZWNpcGllbnQsbWV0aG9kTmFtZSxhcmdzKT0+e1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8bWV0aG9kTmFtZT09PW51bGwpe1xuLy9cbnJldHVybiBsb2NhbEFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ3MpO1xuIH1cbmlmKHJlY2lwaWVudD09PXVuZGVmaW5lZHx8cmVjaXBpZW50PT09bnVsbCl7XG5hc3NlcnQuZmFpbChcblggYENhbm5vdCBkZWxpdmVyICR7cShtZXRob2ROYW1lKX0gdG8gdGFyZ2V0OyB0eXBlb2YgdGFyZ2V0IGlzICR7cShcbm50eXBlb2YocmVjaXBpZW50KSlcbiB9YCxcblR5cGVFcnJvcik7XG5cbiB9XG5jb25zdCBmbj1yZWNpcGllbnRbbWV0aG9kTmFtZV07XG5pZihmbj09PXVuZGVmaW5lZCl7XG5hc3NlcnQuZmFpbChcblggYHRhcmdldCBoYXMgbm8gbWV0aG9kICR7cShtZXRob2ROYW1lKX0sIGhhcyAke3EoXG5nZXRNZXRob2ROYW1lcyhyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZ0eXBlPW50eXBlb2YoZm4pO1xudHlwZW9mIGZuPT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBpbnZva2VkIG1ldGhvZCAke3EobWV0aG9kTmFtZSl9IGlzIG5vdCBhIGZ1bmN0aW9uOyBpdCBpcyBhICR7cShcbmZ0eXBlKVxuIH1gO1xuaWYob25EZWxpdmVyeSYmb25EZWxpdmVyeS5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxtZXRob2ROYW1lKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuY29uc3QgcmVzdWx0PWFwcGx5KGZuLHJlY2lwaWVudCxhcmdzKTtcbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UubG9jYWxBcHBseU1ldGhvZChsb2NhbEFwcGx5TWV0aG9kKTtcblxuY29uc3QgICAgICAgIGxvY2FsR2V0PSh0LGtleSk9PnRba2V5XTskaM2PX29uY2UubG9jYWxHZXQobG9jYWxHZXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0TWV0aG9kTmFtZXMiOlsiZ2V0TWV0aG9kTmFtZXMiXSwibG9jYWxBcHBseUZ1bmN0aW9uIjpbImxvY2FsQXBwbHlGdW5jdGlvbiJdLCJsb2NhbEFwcGx5TWV0aG9kIjpbImxvY2FsQXBwbHlNZXRob2QiXSwibG9jYWxHZXQiOlsibG9jYWxHZXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAY5wTOkMAADpDAAANQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vudi1vcHRpb25zIl0sImV4cG9ydHMiOlsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldEVudmlyb25tZW50T3B0aW9uOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7cXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2hhc093bixmcmVlemUsZW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG4vKlxuXG5cblxuXG5cbiAqL1xuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCBpc0pTT05SZWNvcmQ9KHZhbCk9PlxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZ2YWwhPT1udWxsJiYhQXJyYXkuaXNBcnJheSh2YWwpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzaW1wbGlmeVRhZz0odGFnKT0+e1xuZm9yKGNvbnN0IHByZWZpeCBvZlsnQWxsZWdlZDogJywnRGVidWdOYW1lOiAnXSl7XG5pZih0YWcuc3RhcnRzV2l0aChwcmVmaXgpKXtcbnJldHVybiB0YWcuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gfVxuIH1cbnJldHVybiB0YWc7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI9KG9wdGlvbk5hbWUpPT57XG5sZXQgYnJlYWtwb2ludHM9SlNPTi5wYXJzZShnZXRFbnZpcm9ubWVudE9wdGlvbihvcHRpb25OYW1lLCdudWxsJykpO1xuXG5pZihicmVha3BvaW50cz09PW51bGwpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGJyZWFrcG9pbnRzVGFibGU7XG5cbmNvbnN0IGdldEJyZWFrcG9pbnRzPSgpPT5icmVha3BvaW50cztcbmZyZWV6ZShnZXRCcmVha3BvaW50cyk7XG5cbmNvbnN0IHNldEJyZWFrcG9pbnRzPShuZXdCcmVha3BvaW50cz1icmVha3BvaW50cyk9PntcbmlzSlNPTlJlY29yZChuZXdCcmVha3BvaW50cyl8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24gdG8gYmUgYSBKU09OIGJyZWFrcG9pbnRzIHJlY29yZGA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IG5ld0JyZWFrcG9pbnRzVGFibGU9e19fcHJvdG9fXzpudWxsfTtcblxuZm9yKGNvbnN0W3RhZyxtZXRob2RCUHNdb2YgZW50cmllcyhuZXdCcmVha3BvaW50cykpe1xudGFnPT09c2ltcGxpZnlUYWcodGFnKXx8XG5GYWlsIGBKdXN0IHVzZSBzaW1wbGUgdGFnICR7cShzaW1wbGlmeVRhZyh0YWcpKX0gcmF0aGVyIHRoYW4gJHtxKHRhZyl9YDtcbmlzSlNPTlJlY29yZChtZXRob2RCUHMpfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uJ3MgJHtxKFxudGFnKVxuIH0gdG8gYmUgYSBKU09OIG1ldGhvZHMgYnJlYWtwb2ludHMgcmVjb3JkYDtcbmZvcihjb25zdFttZXRob2ROYW1lLGNvdW50XW9mIGVudHJpZXMobWV0aG9kQlBzKSl7XG5jb3VudD09PScqJ3x8XG50eXBlb2YgY291bnQ9PT0nbnVtYmVyJyYmXG5OdW1iZXIuaXNTYWZlSW50ZWdlcihjb3VudCkmJlxuY291bnQ+PTB8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24ncyAke3EodGFnKX0uJHtxKFxubWV0aG9kTmFtZSlcbiB9IHRvIGJlIFwiKlwiIG9yIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJgO1xuXG5jb25zdCBjbGFzc0JQcz1oYXNPd24obmV3QnJlYWtwb2ludHNUYWJsZSxtZXRob2ROYW1lKT9cbm5ld0JyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV06XG5uZXdCcmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdPXtcbi8vXG5fX3Byb3RvX186bnVsbH07XG5cbmNsYXNzQlBzW3RhZ109Y291bnQ7XG4gfVxuIH1cbmJyZWFrcG9pbnRzPW5ld0JyZWFrcG9pbnRzO1xuYnJlYWtwb2ludHNUYWJsZT1uZXdCcmVha3BvaW50c1RhYmxlO1xuIH07XG5mcmVlemUoc2V0QnJlYWtwb2ludHMpO1xuXG5jb25zdCBzaG91bGRCcmVha3BvaW50PShyZWNpcGllbnQsbWV0aG9kTmFtZSk9PntcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWR8fG1ldGhvZE5hbWU9PT1udWxsKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgY2xhc3NCUHM9YnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXXx8YnJlYWtwb2ludHNUYWJsZVsnKiddO1xuaWYoY2xhc3NCUHM9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmxldCB0YWc9c2ltcGxpZnlUYWcocmVjaXBpZW50W1N5bWJvbC50b1N0cmluZ1RhZ10pO1xubGV0IGNvdW50PWNsYXNzQlBzW3RhZ107XG5pZihjb3VudD09PXVuZGVmaW5lZCl7XG50YWc9JyonO1xuY291bnQ9Y2xhc3NCUHNbdGFnXTtcbmlmKGNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuaWYoY291bnQ9PT0nKicpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoY291bnQ9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cbmFzc2VydCh0eXBlb2YgY291bnQ9PT0nbnVtYmVyJyYmY291bnQ+PTEpO1xuY2xhc3NCUHNbdGFnXT1jb3VudC0xO1xucmV0dXJuIGZhbHNlO1xuIH07XG5mcmVlemUoc2hvdWxkQnJlYWtwb2ludCk7XG5cbmNvbnN0IGJyZWFrcG9pbnRUZXN0ZXI9ZnJlZXplKHtcbmdldEJyZWFrcG9pbnRzLFxuc2V0QnJlYWtwb2ludHMsXG5zaG91bGRCcmVha3BvaW50fSk7XG5cbmJyZWFrcG9pbnRUZXN0ZXIuc2V0QnJlYWtwb2ludHMoKTtcbnJldHVybiBicmVha3BvaW50VGVzdGVyO1xuIH07JGjNj19vbmNlLm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcihtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIpO1xuZnJlZXplKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiOlsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABlsu0UzAwAAMwMAACkAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvbm8tc2hpbS5qc3siaW1wb3J0cyI6WyIuL0UuanMiLCIuL2V4cG9ydHMuanMiXSwiZXhwb3J0cyI6WyJFIiwiSGFuZGxlZFByb21pc2UiXSwicmVleHBvcnRzIjpbIi4vZXhwb3J0cy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlRTskaM2PX2ltcG9ydHMoW1tcIi4vRS5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChtYWtlRSA9ICRozY9fYSldXV1dLFtcIi4vZXhwb3J0cy5qc1wiLCBbXV1dKTsgICBcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IGhwPUhhbmRsZWRQcm9taXNlOyRozY9fb25jZS5ocChocCk7XG5jb25zdCAgICAgICAgRT1tYWtlRShocCk7JGjNj19vbmNlLkUoRSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJIYW5kbGVkUHJvbWlzZSI6WyJocCJdLCJFIjpbIkUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAhqimx18JAABfCQAALQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy90cmFjay10dXJucy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyJdLCJleHBvcnRzIjpbInRyYWNrVHVybnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb24sZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjNj19hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRozY9fYSldXSxbXCJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzXCIsIFskaM2PX2EgPT4gKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbmxldCBoaWRkZW5QcmlvckVycm9yO1xubGV0IGhpZGRlbkN1cnJlbnRUdXJuPTA7XG5sZXQgaGlkZGVuQ3VycmVudEV2ZW50PTA7XG5cbi8vXG5jb25zdCBWRVJCT1NFPWVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMoJ0RFQlVHJywndHJhY2stdHVybnMnKTtcblxuLy9cbi8vXG5jb25zdCBFTkFCTEVEPVxuZ2V0RW52aXJvbm1lbnRPcHRpb24oJ1RSQUNLX1RVUk5TJywnZGlzYWJsZWQnLFsnZW5hYmxlZCddKT09PSdlbmFibGVkJztcblxuLy9cbi8vXG4vL1xuLy9cblxuY29uc3QgYWRkUmVqZWN0aW9uTm90ZT0oZGV0YWlsc05vdGUpPT4ocmVhc29uKT0+e1xuaWYocmVhc29uIGluc3RhbmNlb2YgRXJyb3Ipe1xuZ2xvYmFsVGhpcy5hc3NlcnQubm90ZShyZWFzb24sZGV0YWlsc05vdGUpO1xuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1JFSkVDVEVEIGF0IHRvcCBvZiBldmVudCBsb29wJyxyZWFzb24pO1xuIH1cbiB9O1xuXG5jb25zdCB3cmFwRnVuY3Rpb249XG4oZnVuYyxzZW5kaW5nRXJyb3IsWCk9PlxuKC4uLmFyZ3MpPT57XG5oaWRkZW5QcmlvckVycm9yPXNlbmRpbmdFcnJvcjtcbmhpZGRlbkN1cnJlbnRUdXJuKz0xO1xuaGlkZGVuQ3VycmVudEV2ZW50PTA7XG50cnl7XG5sZXQgcmVzdWx0O1xudHJ5e1xucmVzdWx0PWZ1bmMoLi4uYXJncyk7XG4gfWNhdGNoKGVycil7XG5pZihlcnIgaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKFxuZXJyLFxuWCBgVGhyb3duIGZyb206ICR7aGlkZGVuUHJpb3JFcnJvcn06JHtoaWRkZW5DdXJyZW50VHVybn0uJHtoaWRkZW5DdXJyZW50RXZlbnR9YCk7XG5cbiB9XG5pZihWRVJCT1NFKXtcbmNvbnNvbGUubG9nKCdUSFJPV04gdG8gdG9wIG9mIGV2ZW50IGxvb3AnLGVycik7XG4gfVxudGhyb3cgZXJyO1xuIH1cbi8vXG5jb25zdCBkZXRhaWxzTm90ZT1YIGBSZWplY3Rpb24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gO1xuUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkuY2F0Y2goYWRkUmVqZWN0aW9uTm90ZShkZXRhaWxzTm90ZSkpO1xucmV0dXJuIHJlc3VsdDtcbiB9ZmluYWxseXtcbmhpZGRlblByaW9yRXJyb3I9dW5kZWZpbmVkO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0cmFja1R1cm5zPShmdW5jcyk9PntcbmlmKCFFTkFCTEVEfHx0eXBlb2YgZ2xvYmFsVGhpcz09PSd1bmRlZmluZWQnfHwhZ2xvYmFsVGhpcy5hc3NlcnQpe1xucmV0dXJuIGZ1bmNzO1xuIH1cbmNvbnN0e2RldGFpbHM6WCxub3RlOmFubm90YXRlRXJyb3J9PWdsb2JhbFRoaXMuYXNzZXJ0O1xuXG5oaWRkZW5DdXJyZW50RXZlbnQrPTE7XG5jb25zdCBzZW5kaW5nRXJyb3I9RXJyb3IoXG4gYEV2ZW50OiAke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuaWYoaGlkZGVuUHJpb3JFcnJvciE9PXVuZGVmaW5lZCl7XG5hbm5vdGF0ZUVycm9yKHNlbmRpbmdFcnJvcixYIGBDYXVzZWQgYnk6ICR7aGlkZGVuUHJpb3JFcnJvcn1gKTtcbiB9XG5cbnJldHVybiAoLyogICAgICAgICAgICAqL1xuZnVuY3MubWFwKChmdW5jKT0+ZnVuYyYmd3JhcEZ1bmN0aW9uKGZ1bmMsc2VuZGluZ0Vycm9yLFgpKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UudHJhY2tUdXJucyh0cmFja1R1cm5zKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InRyYWNrVHVybnMiOlsidHJhY2tUdXJucyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA/8Oc6VgIAAFYCAAAjAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvdXRpbHMuanN7ImltcG9ydHMiOlsiLi9zcmMvbG9jYWwuanMiLCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOltudWxsLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvbG9jYWwuanNcIiwgW11dLFtcIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9sb2NhbC5qcyI6W1siZ2V0TWV0aG9kTmFtZXMiLCJnZXRNZXRob2ROYW1lcyJdXSwiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qcyI6W1sibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIiwibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAALSpg4VgIAAFYCAAAdAAAAQGVuZG8vZmFyLXYxLjEuOC9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJnZXRJbnRlcmZhY2VPZiIsImdldEludGVyZmFjZU9mIixudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW11dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyJAZW5kby9ldmVudHVhbC1zZW5kIjpbWyJFIiwiRSJdXSwiQGVuZG8vcGFzcy1zdHlsZSI6W1siRmFyIiwiRmFyIl0sWyJnZXRJbnRlcmZhY2VPZiIsImdldEludGVyZmFjZU9mIl0sWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAChKaq8PwoAAD8KAAAgAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvaXRlci1oZWxwZXJzLmpzIiwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3NyYy9lcnJvci5qcyIsIi4vc3JjL3JlbW90YWJsZS5qcyIsIi4vc3JjL3N5bWJvbC5qcyIsIi4vc3JjL3N0cmluZy5qcyIsIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIiwiLi9zcmMvbWFrZVRhZ2dlZC5qcyIsIi4vc3JjL21ha2UtZmFyLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiRmFyIiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJmaWx0ZXJJdGVyYWJsZSIsImZpbHRlckl0ZXJhYmxlIiwiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSIsImlzT2JqZWN0IiwiaXNPYmplY3QiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSIsImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIixudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2l0ZXItaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW11dLFtcIi4vc3JjL2Vycm9yLmpzXCIsIFtdXSxbXCIuL3NyYy9yZW1vdGFibGUuanNcIiwgW11dLFtcIi4vc3JjL3N5bWJvbC5qc1wiLCBbXV0sW1wiLi9zcmMvc3RyaW5nLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGVPZi5qc1wiLCBbXV0sW1wiLi9zcmMvbWFrZVRhZ2dlZC5qc1wiLCBbXV0sW1wiLi9zcmMvbWFrZS1mYXIuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVHdWFyZHMuanNcIiwgW11dLFtcIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOltbIm1hcEl0ZXJhYmxlIiwibWFwSXRlcmFibGUiXSxbImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiXV0sIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIjpbWyJQQVNTX1NUWUxFIiwiUEFTU19TVFlMRSJdLFsiaXNPYmplY3QiLCJpc09iamVjdCJdLFsiYXNzZXJ0Q2hlY2tlciIsImFzc2VydENoZWNrZXIiXSxbImdldFRhZyIsImdldFRhZyJdLFsiaGFzT3duUHJvcGVydHlPZiIsImhhc093blByb3BlcnR5T2YiXV0sIi4vc3JjL2Vycm9yLmpzIjpbWyJnZXRFcnJvckNvbnN0cnVjdG9yIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLFsiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSJdXSwiLi9zcmMvcmVtb3RhYmxlLmpzIjpbWyJnZXRJbnRlcmZhY2VPZiIsImdldEludGVyZmFjZU9mIl1dLCIuL3NyYy9zeW1ib2wuanMiOltbImFzc2VydFBhc3NhYmxlU3ltYm9sIiwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSxbImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIl0sWyJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiXSxbInBhc3NhYmxlU3ltYm9sRm9yTmFtZSIsInBhc3NhYmxlU3ltYm9sRm9yTmFtZSJdXSwiLi9zcmMvc3RyaW5nLmpzIjpbWyJpc1dlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIl0sWyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFBhc3NhYmxlU3RyaW5nIl1dLCIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6W1sicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdLFsiaXNQYXNzYWJsZSIsImlzUGFzc2FibGUiXSxbImFzc2VydFBhc3NhYmxlIiwiYXNzZXJ0UGFzc2FibGUiXSxbInRvUGFzc2FibGVFcnJvciIsInRvUGFzc2FibGVFcnJvciJdLFsidG9UaHJvd2FibGUiLCJ0b1Rocm93YWJsZSJdXSwiLi9zcmMvbWFrZVRhZ2dlZC5qcyI6W1sibWFrZVRhZ2dlZCIsIm1ha2VUYWdnZWQiXV0sIi4vc3JjL21ha2UtZmFyLmpzIjpbWyJSZW1vdGFibGUiLCJSZW1vdGFibGUiXSxbIkZhciIsIkZhciJdLFsiVG9GYXJGdW5jdGlvbiIsIlRvRmFyRnVuY3Rpb24iXSxbIkdFVF9NRVRIT0RfTkFNRVMiLCJHRVRfTUVUSE9EX05BTUVTIl1dLCIuL3NyYy90eXBlR3VhcmRzLmpzIjpbWyJhc3NlcnRSZWNvcmQiLCJhc3NlcnRSZWNvcmQiXSxbImFzc2VydENvcHlBcnJheSIsImFzc2VydENvcHlBcnJheSJdLFsiYXNzZXJ0UmVtb3RhYmxlIiwiYXNzZXJ0UmVtb3RhYmxlIl0sWyJpc1JlbW90YWJsZSIsImlzUmVtb3RhYmxlIl0sWyJpc1JlY29yZCIsImlzUmVjb3JkIl0sWyJpc0NvcHlBcnJheSIsImlzQ29weUFycmF5Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACXqL8lVAYAAFQGAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2NvcHlBcnJheS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQ29weUFycmF5SGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsYXNzZXJ0Q2hlY2tlcixnZXRPd25EYXRhRGVzY3JpcHRvcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImdldE93bkRhdGFEZXNjcmlwdG9yXCIsIFskaM2PX2EgPT4gKGdldE93bkRhdGFEZXNjcmlwdG9yID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7Z2V0UHJvdG90eXBlT2Z9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5LHByb3RvdHlwZTphcnJheVByb3RvdHlwZX09QXJyYXk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNhbkJlVmFsaWQ9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmlzQXJyYXkoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZjaGVjayhmYWxzZSxYIGBBcnJheSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weUFycmF5SGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2NvcHlBcnJheScsXG5cbmNhbkJlVmFsaWQsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PntcbmNhbkJlVmFsaWQoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuZ2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKT09PWFycmF5UHJvdG90eXBlfHxcbmFzc2VydC5mYWlsKFggYE1hbGZvcm1lZCBhcnJheTogJHtjYW5kaWRhdGV9YCxUeXBlRXJyb3IpO1xuLy9cbi8vXG5jb25zdCBsZW49LyogICAgICAgICAgICAgICAgICovXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsJ2xlbmd0aCcsZmFsc2UsYXNzZXJ0Q2hlY2tlcikudmFsdWU7XG5cbi8vXG4vL1xuZm9yKGxldCBpPTA7aTxsZW47aSs9MSl7XG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLGksdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9XG4vL1xub3duS2V5cyhjYW5kaWRhdGUpLmxlbmd0aD09PWxlbisxfHxcbmFzc2VydC5mYWlsKFggYEFycmF5cyBtdXN0IG5vdCBoYXZlIG5vbi1pbmRleGVzOiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4gfX0pOyRozY9fb25jZS5Db3B5QXJyYXlIZWxwZXIoQ29weUFycmF5SGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlBcnJheUhlbHBlciI6WyJDb3B5QXJyYXlIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMs9KtSkIAAApCAAAKQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9jb3B5UmVjb3JkLmpzeyJpbXBvcnRzIjpbIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5UmVjb3JkSGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsZ2V0T3duRGF0YURlc2NyaXB0b3IsQ1g7JGjNj19pbXBvcnRzKFtbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRozY9fYSA9PiAoY2FuQmVNZXRob2QgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0UHJvdG90eXBlT2YscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tPYmplY3RQcm90b3R5cGU9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09b2JqZWN0UHJvdG90eXBlfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZWNvcmRzIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb3BlcnR5Q2FuQmVWYWxpZD0oY2FuZGlkYXRlLGtleSx2YWx1ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG4odHlwZW9mIGtleT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUmVjb3JkcyBjYW4gb25seSBoYXZlIHN0cmluZy1uYW1lZCBwcm9wZXJ0aWVzOiAke2NhbmRpZGF0ZX1gKSYmKFxuIWNhbkJlTWV0aG9kKHZhbHVlKXx8XG4hIWNoZWNrJiZcbi8vXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbm5vdCBjb250YWluIG5vbi1mYXIgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBtYXkgYmUgbWV0aG9kcyBvZiBhbiBpbXBsaWNpdCBSZW1vdGFibGU6ICR7Y2FuZGlkYXRlfWApKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weVJlY29yZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5UmVjb3JkJyxcblxuY2FuQmVWYWxpZDooY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmNoZWNrT2JqZWN0UHJvdG90eXBlKGNhbmRpZGF0ZSxjaGVjaykmJlxuLy9cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkuZXZlcnkoKGtleSk9PlxuY2hlY2tQcm9wZXJ0eUNhbkJlVmFsaWQoY2FuZGlkYXRlLGtleSxjYW5kaWRhdGVba2V5XSxjaGVjaykpKTtcblxuXG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuLy9cbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoY2FuZGlkYXRlKSl7XG5jb25zdHt2YWx1ZX09Z2V0T3duRGF0YURlc2NyaXB0b3IoXG5jYW5kaWRhdGUsXG5uYW1lLFxudHJ1ZSxcbmFzc2VydENoZWNrZXIpO1xuXG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsbmFtZSx2YWx1ZSxhc3NlcnRDaGVja2VyKTtcbnBhc3NTdHlsZU9mUmVjdXIodmFsdWUpO1xuIH1cbiB9fSk7JGjNj19vbmNlLkNvcHlSZWNvcmRIZWxwZXIoQ29weVJlY29yZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJDb3B5UmVjb3JkSGVscGVyIjpbIkNvcHlSZWNvcmRIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAcCLlelYKAABWCgAALgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9kZWVwbHlGdWxmaWxsZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcGFzc1N0eWxlT2YuanMiLCIuL21ha2VUYWdnZWQuanMiXSwiZXhwb3J0cyI6WyJkZWVwbHlGdWxmaWxsZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxxLEUsaXNQcm9taXNlLGdldFRhZyxpc09iamVjdCxwYXNzU3R5bGVPZixtYWtlVGFnZ2VkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCIuL21ha2VUYWdnZWQuanNcIiwgW1tcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZXBseUZ1bGZpbGxlZD1hc3luYyh2YWwpPT57XG4vL1xuLy9cbi8vXG5cbmlmKCFpc09iamVjdCh2YWwpKXtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL3ZhbCk7XG4gfVxuaWYoaXNQcm9taXNlKHZhbCkpe1xucmV0dXJuIEUud2hlbih2YWwsKG5vbnApPT5kZWVwbHlGdWxmaWxsZWQobm9ucCkpO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZih2YWwpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmNvbnN0IHJlYz0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlYyk7XG5jb25zdCB2YWxQcz1uYW1lcy5tYXAoKG5hbWUpPT5kZWVwbHlGdWxmaWxsZWQocmVjW25hbWVdKSk7XG4vL1xucmV0dXJuIEUud2hlbihQcm9taXNlLmFsbCh2YWxQcyksKHZhbHMpPT5cbmhhcmRlbihmcm9tRW50cmllcyh2YWxzLm1hcCgoYyxpKT0+W25hbWVzW2ldLGNdKSkpKTtcblxuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5jb25zdCBhcnI9LyogICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdmFsUHM9YXJyLm1hcCgocCk9PmRlZXBseUZ1bGZpbGxlZChwKSk7XG4vL1xucmV0dXJuIEUud2hlbihQcm9taXNlLmFsbCh2YWxQcyksKHZhbHMpPT5oYXJkZW4odmFscykpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdCB0Z2Q9LyogICAgICAgICAgICAgICAgICAgICAqL3ZhbDtcbmNvbnN0IHRhZz1nZXRUYWcodGdkKTtcbi8vXG5yZXR1cm4gRS53aGVuKGRlZXBseUZ1bGZpbGxlZCh0Z2QucGF5bG9hZCksKHBheWxvYWQpPT5cbm1ha2VUYWdnZWQodGFnLHBheWxvYWQpKTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCByZW09LyogICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuLy9cbnJldHVybiByZW07XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXJyPS8qICAgICAgICAgICAgICAgICovdmFsO1xuLy9cbnJldHVybiBlcnI7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBwcm9tPS8qICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3ZhbDtcbnJldHVybiBFLndoZW4ocHJvbSwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChYIGBVbmV4cGVjdGVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFR5cGVFcnJvcik7XG4gfX1cblxuIH07JGjNj19vbmNlLmRlZXBseUZ1bGZpbGxlZChkZWVwbHlGdWxmaWxsZWQpO1xuaGFyZGVuKGRlZXBseUZ1bGZpbGxlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWVwbHlGdWxmaWxsZWQiOlsiZGVlcGx5RnVsZmlsbGVkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEObiqg0EgAANBIAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvZXJyb3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkVycm9ySGVscGVyIiwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyIsImdldEVycm9yQ29uc3RydWN0b3IiLCJpc0Vycm9yTGlrZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLGFzc2VydENoZWNrZXIsQ1g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7Z2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxoYXNPd24sZW50cmllc309T2JqZWN0O1xuXG4vL1xuLy9cbmNvbnN0IGVycm9yQ29uc3RydWN0b3JzPW5ldyBNYXAoXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW1xuWydFcnJvcicsRXJyb3JdLFxuWydFdmFsRXJyb3InLEV2YWxFcnJvcl0sXG5bJ1JhbmdlRXJyb3InLFJhbmdlRXJyb3JdLFxuWydSZWZlcmVuY2VFcnJvcicsUmVmZXJlbmNlRXJyb3JdLFxuWydTeW50YXhFcnJvcicsU3ludGF4RXJyb3JdLFxuWydUeXBlRXJyb3InLFR5cGVFcnJvcl0sXG5bJ1VSSUVycm9yJyxVUklFcnJvcl1cblxuLy9cbi8vXG4vL1xuLy9cbl0pO1xuXG5cbmlmKHR5cGVvZiBBZ2dyZWdhdGVFcnJvciE9PSd1bmRlZmluZWQnKXtcbi8vXG5lcnJvckNvbnN0cnVjdG9ycy5zZXQoJ0FnZ3JlZ2F0ZUVycm9yJyxBZ2dyZWdhdGVFcnJvcik7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEVycm9yQ29uc3RydWN0b3I9KG5hbWUpPT5lcnJvckNvbnN0cnVjdG9ycy5nZXQobmFtZSk7JGjNj19vbmNlLmdldEVycm9yQ29uc3RydWN0b3IoZ2V0RXJyb3JDb25zdHJ1Y3Rvcik7XG5oYXJkZW4oZ2V0RXJyb3JDb25zdHJ1Y3Rvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrRXJyb3JMaWtlPShjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xuLy9cbnJldHVybihcbmNhbmRpZGF0ZSBpbnN0YW5jZW9mIEVycm9yfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgRXJyb3IgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcbmhhcmRlbihjaGVja0Vycm9yTGlrZSk7XG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0Vycm9yTGlrZT0oY2FuZGlkYXRlKT0+Y2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlKTskaM2PX29uY2UuaXNFcnJvckxpa2UoaXNFcnJvckxpa2UpO1xuaGFyZGVuKGlzRXJyb3JMaWtlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0oXG5wcm9wTmFtZSxcbmRlc2MsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZihkZXNjLmVudW1lcmFibGUpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7ZGVzY31gKTtcblxuIH1cbmlmKCFoYXNPd24oZGVzYywndmFsdWUnKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHk6ICR7ZGVzY31gKTtcblxuIH1cbmNvbnN0e3ZhbHVlfT1kZXNjO1xuc3dpdGNoKHByb3BOYW1lKXtcbmNhc2UnbWVzc2FnZSc6XG5jYXNlJ3N0YWNrJzp7XG5yZXR1cm4oXG50eXBlb2YgdmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt2YWx1ZX1gKTtcblxuIH1cbmNhc2UnY2F1c2UnOntcbi8vXG5yZXR1cm4gY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IodmFsdWUscGFzc1N0eWxlT2ZSZWN1cixjaGVjayk7XG4gfVxuY2FzZSdlcnJvcnMnOntcbmlmKCFBcnJheS5pc0FycmF5KHZhbHVlKXx8cGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSkhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGNvcHlBcnJheTogJHt2YWx1ZX1gKTtcblxuIH1cbnJldHVybiB2YWx1ZS5ldmVyeSgoZXJyKT0+XG4vL1xuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoZXJyLHBhc3NTdHlsZU9mUmVjdXIsY2hlY2spKTtcblxuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7XG4gfX1cblxucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yIGhhcyBleHRyYSB1bnBhc3NlZCBwcm9wZXJ0eSAke3EocHJvcE5hbWUpfWApO1xuXG4gfTskaM2PX29uY2UuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuaGFyZGVuKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3I9KFxuY2FuZGlkYXRlLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrPXVuZGVmaW5lZCk9Plxue1xuaWYoIWNoZWNrRXJyb3JMaWtlKGNhbmRpZGF0ZSxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk7XG5jb25zdHtuYW1lfT1wcm90bztcbmNvbnN0IGVyckNvbnN0cnVjdG9yPWdldEVycm9yQ29uc3RydWN0b3IobmFtZSk7XG5pZihlcnJDb25zdHJ1Y3Rvcj09PXVuZGVmaW5lZHx8ZXJyQ29uc3RydWN0b3IucHJvdG90eXBlIT09cHJvdG8pe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGluaGVyaXQgZnJvbSBhbiBlcnJvciBjbGFzcyAucHJvdG90eXBlOiAke2NhbmRpZGF0ZX1gKTtcblxuIH1cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbmlmKCEoJ21lc3NhZ2UnaW4gZGVzY3MpKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUGFzc2FibGUgRXJyb3IgbXVzdCBoYXZlIGFuIG93biBcIm1lc3NhZ2VcIiBzdHJpbmcgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuXG5yZXR1cm4gZW50cmllcyhkZXNjcykuZXZlcnkoKFtwcm9wTmFtZSxkZXNjXSk9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoXG5wcm9wTmFtZSxcbmRlc2MsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2spKTtcblxuXG4gfTskaM2PX29uY2UuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuaGFyZGVuKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKTtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgRXJyb3JIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonZXJyb3InLFxuXG5jYW5CZVZhbGlkOmNoZWNrRXJyb3JMaWtlLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyLGFzc2VydENoZWNrZXIpfSk7JGjNj19vbmNlLkVycm9ySGVscGVyKEVycm9ySGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEVycm9yQ29uc3RydWN0b3IiOlsiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLCJpc0Vycm9yTGlrZSI6WyJpc0Vycm9yTGlrZSJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciJdLCJFcnJvckhlbHBlciI6WyJFcnJvckhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABBT/xPjwUAAI8FAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2l0ZXItaGVscGVycy5qc3siaW1wb3J0cyI6WyIuL21ha2UtZmFyLmpzIl0sImV4cG9ydHMiOlsiZmlsdGVySXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXI7JGjNj19pbXBvcnRzKFtbXCIuL21ha2UtZmFyLmpzXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcEl0ZXJhYmxlPShiYXNlSXRlcmFibGUsZnVuYyk9PlxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbkZhcignbWFwcGVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdtYXBwZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmNvbnN0e3ZhbHVlOmJhc2VWYWx1ZSxkb25lfT1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3QgdmFsdWU9ZG9uZT9iYXNlVmFsdWU6ZnVuYyhiYXNlVmFsdWUpO1xucmV0dXJuIGhhcmRlbih7dmFsdWUsZG9uZX0pO1xuIH19KTtcblxuIH19KTskaM2PX29uY2UubWFwSXRlcmFibGUobWFwSXRlcmFibGUpO1xuXG5oYXJkZW4obWFwSXRlcmFibGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZmlsdGVySXRlcmFibGU9KGJhc2VJdGVyYWJsZSxwcmVkKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdmaWx0ZXJlZCBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGJhc2VJdGVyYXRvcj1iYXNlSXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIEZhcignZmlsdGVyZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmZvcig7Oyl7XG5jb25zdCByZXN1bHQ9YmFzZUl0ZXJhdG9yLm5leHQoKTtcbmNvbnN0e3ZhbHVlLGRvbmV9PXJlc3VsdDtcbmlmKGRvbmV8fHByZWQodmFsdWUpKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbiB9fSk7XG5cbiB9fSk7JGjNj19vbmNlLmZpbHRlckl0ZXJhYmxlKGZpbHRlckl0ZXJhYmxlKTtcblxuaGFyZGVuKGZpbHRlckl0ZXJhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1hcEl0ZXJhYmxlIjpbIm1hcEl0ZXJhYmxlIl0sImZpbHRlckl0ZXJhYmxlIjpbImZpbHRlckl0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGTP4m9BEQAAQREAACcAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvbWFrZS1mYXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3JlbW90YWJsZS5qcyJdLCJleHBvcnRzIjpbIkZhciIsIkdFVF9NRVRIT0RfTkFNRVMiLCJSZW1vdGFibGUiLCJUb0ZhckZ1bmN0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldE1ldGhvZE5hbWVzLHEsRmFpbCxhc3NlcnRDaGVja2VyLFBBU1NfU1RZTEUsYXNzZXJ0SWZhY2UsZ2V0SW50ZXJmYWNlT2YsUmVtb3RhYmxlSGVscGVyOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qc1wiLCBbW1wiZ2V0TWV0aG9kTmFtZXNcIiwgWyRozY9fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcImFzc2VydElmYWNlXCIsIFskaM2PX2EgPT4gKGFzc2VydElmYWNlID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjNj19hKV1dLFtcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7cHJvdG90eXBlOmZ1bmN0aW9uUHJvdG90eXBlfT1GdW5jdGlvbjtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5zZXRQcm90b3R5cGVPZixcbmNyZWF0ZSxcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVJlbW90YWJsZVByb3RvPShyZW1vdGFibGUsaWZhY2UpPT57XG5sZXQgb2xkUHJvdG89Z2V0UHJvdG90eXBlT2YocmVtb3RhYmxlKTtcbmlmKHR5cGVvZiByZW1vdGFibGU9PT0nb2JqZWN0Jyl7XG5pZihvbGRQcm90bz09PW51bGwpe1xub2xkUHJvdG89b2JqZWN0UHJvdG90eXBlO1xuIH1cbm9sZFByb3RvPT09b2JqZWN0UHJvdG90eXBlfHxcbkZhaWwgYEZvciBub3csIHJlbW90YWJsZXMgY2Fubm90IGluaGVyaXQgZnJvbSBhbnl0aGluZyB1bnVzdWFsLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNlIGlmKHR5cGVvZiByZW1vdGFibGU9PT0nZnVuY3Rpb24nKXtcbm9sZFByb3RvIT09bnVsbHx8XG5GYWlsIGBPcmlnaW5hbCBmdW5jdGlvbiBtdXN0IG5vdCBpbmhlcml0IGZyb20gbnVsbDogJHtyZW1vdGFibGV9YDtcbm9sZFByb3RvPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuZ2V0UHJvdG90eXBlT2Yob2xkUHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuRmFpbCBgRmFyIGZ1bmN0aW9ucyBtdXN0IG9yaWdpbmFsbHkgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZSwgaW4gJHtyZW1vdGFibGV9YDtcbiB9ZWxzZXtcbkZhaWwgYHVucmVjb2duaXplZCB0eXBlb2YgJHtyZW1vdGFibGV9YDtcbiB9XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9sZFByb3RvLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3JlbW90YWJsZSd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOmlmYWNlfX0pKTtcblxuXG4gfTtcblxuY29uc3QgYXNzZXJ0Q2FuQmVSZW1vdGFibGU9KGNhbmRpZGF0ZSk9PlxuUmVtb3RhYmxlSGVscGVyLmNhbkJlVmFsaWQoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlPShcbi8vXG5pZmFjZT0nUmVtb3RhYmxlJyxcbnByb3BzPXVuZGVmaW5lZCxcbnJlbW90YWJsZT0vKiAgICAgICAgICAgICove30pPT5cbntcbmFzc2VydElmYWNlKGlmYWNlKTtcbmFzc2VydChpZmFjZSk7XG4vL1xuLy9cbnByb3BzPT09dW5kZWZpbmVkfHxGYWlsIGBSZW1vdGFibGUgcHJvcHMgbm90IHlldCBpbXBsZW1lbnRlZCAke3Byb3BzfWA7XG5cbi8vXG5hc3NlcnRDYW5CZVJlbW90YWJsZShyZW1vdGFibGUpO1xuXG4vL1xuIShQQVNTX1NUWUxFIGluIHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IG1hcmtlZCBhcyBhICR7cShcbnJlbW90YWJsZVtQQVNTX1NUWUxFXSlcbiB9YDtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuLmlzRmFrZXx8XG4vL1xuIWlzRnJvemVuKHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IGZyb3plbmA7XG5jb25zdCByZW1vdGFibGVQcm90bz1tYWtlUmVtb3RhYmxlUHJvdG8ocmVtb3RhYmxlLGlmYWNlKTtcblxuLy9cbi8vXG5jb25zdCBtdXRhdGVIYXJkZW5BbmRDaGVjaz0odGFyZ2V0KT0+e1xuLy9cbnNldFByb3RvdHlwZU9mKHRhcmdldCxyZW1vdGFibGVQcm90byk7XG5oYXJkZW4odGFyZ2V0KTtcbmFzc2VydENhbkJlUmVtb3RhYmxlKHRhcmdldCk7XG4gfTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHt9KTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHJlbW90YWJsZSk7XG5cbi8vXG4vL1xuYXNzZXJ0KGlmYWNlIT09dW5kZWZpbmVkKTsvL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgKi9yZW1vdGFibGUpO1xuIH07JGjNj19vbmNlLlJlbW90YWJsZShSZW1vdGFibGUpO1xuaGFyZGVuKFJlbW90YWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHRVRfTUVUSE9EX05BTUVTPSdfX2dldE1ldGhvZE5hbWVzX18nO1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuR0VUX01FVEhPRF9OQU1FUyhHRVRfTUVUSE9EX05BTUVTKTtcbmNvbnN0IGdldE1ldGhvZE5hbWVzTWV0aG9kPWhhcmRlbih7XG5bR0VUX01FVEhPRF9OQU1FU10oKXtcbnJldHVybiBnZXRNZXRob2ROYW1lcyh0aGlzKTtcbiB9fSlbXG5HRVRfTUVUSE9EX05BTUVTXTtcblxuY29uc3QgZ2V0TWV0aG9kTmFtZXNEZXNjcmlwdG9yPWhhcmRlbih7XG52YWx1ZTpnZXRNZXRob2ROYW1lc01ldGhvZCxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2UsXG53cml0YWJsZTpmYWxzZX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBGYXI9KGZhck5hbWUscmVtb3RhYmxlPXVuZGVmaW5lZCk9PntcbmNvbnN0IHI9cmVtb3RhYmxlPT09dW5kZWZpbmVkPy8qICAgICAgICAgICAgKi97fTpyZW1vdGFibGU7XG5pZih0eXBlb2Ygcj09PSdvYmplY3QnJiYhKEdFVF9NRVRIT0RfTkFNRVMgaW4gcikpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLEdFVF9NRVRIT0RfTkFNRVMsZ2V0TWV0aG9kTmFtZXNEZXNjcmlwdG9yKTtcbiB9XG5yZXR1cm4gUmVtb3RhYmxlKCBgQWxsZWdlZDogJHtmYXJOYW1lfWAsdW5kZWZpbmVkLHIpO1xuIH07JGjNj19vbmNlLkZhcihGYXIpO1xuaGFyZGVuKEZhcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBUb0ZhckZ1bmN0aW9uPShmYXJOYW1lLGZ1bmMpPT57XG5pZihnZXRJbnRlcmZhY2VPZihmdW5jKSE9PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIGZ1bmM7XG4gfVxuLy9cbnJldHVybiBGYXIoZmFyTmFtZSwoLi4uYXJncyk9PmZ1bmMoLi4uYXJncykpO1xuIH07JGjNj19vbmNlLlRvRmFyRnVuY3Rpb24oVG9GYXJGdW5jdGlvbik7XG5oYXJkZW4oVG9GYXJGdW5jdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJSZW1vdGFibGUiOlsiUmVtb3RhYmxlIl0sIkdFVF9NRVRIT0RfTkFNRVMiOlsiR0VUX01FVEhPRF9OQU1FUyJdLCJGYXIiOlsiRmFyIl0sIlRvRmFyRnVuY3Rpb24iOlsiVG9GYXJGdW5jdGlvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAr0aC/gAQAAIAEAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL21ha2VUYWdnZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcGFzc1N0eWxlT2YuanMiXSwiZXhwb3J0cyI6WyJtYWtlVGFnZ2VkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsUEFTU19TVFlMRSxhc3NlcnRQYXNzYWJsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbmNvbnN0e2NyZWF0ZSxwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVRhZ2dlZD0odGFnLHBheWxvYWQpPT57XG50eXBlb2YgdGFnPT09J3N0cmluZyd8fFxuRmFpbCBgVGhlIHRhZyBvZiBhIHRhZ2dlZCByZWNvcmQgbXVzdCBiZSBhIHN0cmluZzogJHt0YWd9YDtcbmFzc2VydFBhc3NhYmxlKGhhcmRlbihwYXlsb2FkKSk7XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9iamVjdFByb3RvdHlwZSx7XG5bUEFTU19TVFlMRV06e3ZhbHVlOid0YWdnZWQnfSxcbltTeW1ib2wudG9TdHJpbmdUYWddOnt2YWx1ZTp0YWd9LFxucGF5bG9hZDp7dmFsdWU6cGF5bG9hZCxlbnVtZXJhYmxlOnRydWV9fSkpO1xuXG5cbiB9OyRozY9fb25jZS5tYWtlVGFnZ2VkKG1ha2VUYWdnZWQpO1xuaGFyZGVuKG1ha2VUYWdnZWQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRhZ2dlZCI6WyJtYWtlVGFnZ2VkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA0ikncUFQAAFBUAADAAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiQ1giLCJQQVNTX1NUWUxFIiwiYXNzZXJ0Q2hlY2tlciIsImNhbkJlTWV0aG9kIiwiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCIsImNoZWNrUGFzc1N0eWxlIiwiY2hlY2tUYWdSZWNvcmQiLCJnZXRPd25EYXRhRGVzY3JpcHRvciIsImdldFRhZyIsImhhc093blByb3BlcnR5T2YiLCJpc09iamVjdCIsImlzVHlwZWRBcnJheSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG5nZXRQcm90b3R5cGVPZixcbmhhc093blByb3BlcnR5Om9iamVjdEhhc093blByb3BlcnR5LFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWc6dG9TdHJpbmdUYWdTeW1ib2x9PVN5bWJvbDtcblxuY29uc3QgdHlwZWRBcnJheVByb3RvdHlwZT1nZXRQcm90b3R5cGVPZihVaW50OEFycmF5LnByb3RvdHlwZSk7XG5jb25zdCB0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjPWdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbnR5cGVkQXJyYXlQcm90b3R5cGUsXG50b1N0cmluZ1RhZ1N5bWJvbCk7XG5cbmFzc2VydCh0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjKTtcbmNvbnN0IGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZz10eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjLmdldDtcbmFzc2VydCh0eXBlb2YgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPT09J2Z1bmN0aW9uJyk7XG5cbmNvbnN0ICAgICAgICBoYXNPd25Qcm9wZXJ0eU9mPShvYmoscHJvcCk9PlxuYXBwbHkob2JqZWN0SGFzT3duUHJvcGVydHksb2JqLFtwcm9wXSk7JGjNj19vbmNlLmhhc093blByb3BlcnR5T2YoaGFzT3duUHJvcGVydHlPZik7XG5oYXJkZW4oaGFzT3duUHJvcGVydHlPZik7XG5cbi8vXG5jb25zdCAgICAgICAgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsOyRozY9fb25jZS5pc09iamVjdChpc09iamVjdCk7XG5oYXJkZW4oaXNPYmplY3QpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNUeXBlZEFycmF5PShvYmplY3QpPT57XG4vL1xuY29uc3QgdGFnPWFwcGx5KGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZyxvYmplY3QsW10pO1xucmV0dXJuIHRhZyE9PXVuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5pc1R5cGVkQXJyYXkoaXNUeXBlZEFycmF5KTtcbmhhcmRlbihpc1R5cGVkQXJyYXkpO1xuXG5jb25zdCAgICAgICAgUEFTU19TVFlMRT1TeW1ib2wuZm9yKCdwYXNzU3R5bGUnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUEFTU19TVFlMRShQQVNTX1NUWUxFKTtcbmNvbnN0ICAgICAgICBjYW5CZU1ldGhvZD0oZnVuYyk9PlxudHlwZW9mIGZ1bmM9PT0nZnVuY3Rpb24nJiYhKFBBU1NfU1RZTEUgaW4gZnVuYyk7JGjNj19vbmNlLmNhbkJlTWV0aG9kKGNhbkJlTWV0aG9kKTtcbmhhcmRlbihjYW5CZU1ldGhvZCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDaGVja2VyPShjb25kLGRldGFpbHMpPT57XG5hc3NlcnQoY29uZCxkZXRhaWxzKTtcbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmFzc2VydENoZWNrZXIoYXNzZXJ0Q2hlY2tlcik7XG5oYXJkZW4oYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIENYPShjaGVjayk9PntcbmNvbnN0IHJlamVjdD0oVCwuLi5zdWJzKT0+Y2hlY2soZmFsc2UsWChULC4uLnN1YnMpKTtcbnJldHVybiByZWplY3Q7XG4gfTskaM2PX29uY2UuQ1goQ1gpO1xuaGFyZGVuKENYKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRPd25EYXRhRGVzY3JpcHRvcj0oXG5jYW5kaWRhdGUsXG5wcm9wTmFtZSxcbnNob3VsZEJlRW51bWVyYWJsZSxcbmNoZWNrKT0+XG57XG5jb25zdCBkZXNjPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNhbmRpZGF0ZSxwcm9wTmFtZSk7XG5cbnJldHVybihkZXNjIT09dW5kZWZpbmVkfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgJHtxKHByb3BOYW1lKX0gcHJvcGVydHkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApJiYoXG5oYXNPd25Qcm9wZXJ0eU9mKGRlc2MsJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBhY2Nlc3NvciBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCkmJihcbnNob3VsZEJlRW51bWVyYWJsZT9cbmRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3QgYmUgYW4gZW51bWVyYWJsZSBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YDpcbiFkZXNjLmVudW1lcmFibGV8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKT9cbmRlc2M6XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3VuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5nZXRPd25EYXRhRGVzY3JpcHRvcihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5oYXJkZW4oZ2V0T3duRGF0YURlc2NyaXB0b3IpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0VGFnPSh0YWdSZWNvcmQpPT50YWdSZWNvcmRbU3ltYm9sLnRvU3RyaW5nVGFnXTskaM2PX29uY2UuZ2V0VGFnKGdldFRhZyk7XG5oYXJkZW4oZ2V0VGFnKTtcblxuY29uc3QgICAgICAgIGNoZWNrUGFzc1N0eWxlPShvYmoscGFzc1N0eWxlLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxucGFzc1N0eWxlPT09ZXhwZWN0ZWRQYXNzU3R5bGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEV4cGVjdGVkICR7cShleHBlY3RlZFBhc3NTdHlsZSl9LCBub3QgJHtxKHBhc3NTdHlsZSl9OiAke29ian1gKTtcblxuIH07JGjNj19vbmNlLmNoZWNrUGFzc1N0eWxlKGNoZWNrUGFzc1N0eWxlKTtcbmhhcmRlbihjaGVja1Bhc3NTdHlsZSk7XG5cbmNvbnN0IG1ha2VDaGVja1RhZ1JlY29yZD0oY2hlY2tQcm90byk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1RhZ1JlY29yZD0odGFnUmVjb3JkLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxuKGlzT2JqZWN0KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgbm9uLW9iamVjdCBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiYoXG5pc0Zyb3plbih0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQSB0YWdSZWNvcmQgbXVzdCBiZSBmcm96ZW46ICR7dGFnUmVjb3JkfWApJiYoXG4haXNBcnJheSh0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQW4gYXJyYXkgY2Fubm90IGJlIGEgdGFnUmVjb3JkOiAke3RhZ1JlY29yZH1gKSYmXG5jaGVja1Bhc3NTdHlsZShcbnRhZ1JlY29yZCxcbmdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxQQVNTX1NUWUxFLGZhbHNlLGNoZWNrKS52YWx1ZSxcbmV4cGVjdGVkUGFzc1N0eWxlLFxuY2hlY2spJiYoXG5cbnR5cGVvZiBnZXRPd25EYXRhRGVzY3JpcHRvcih0YWdSZWNvcmQsU3ltYm9sLnRvU3RyaW5nVGFnLGZhbHNlLGNoZWNrKS5cbnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBBIFtTeW1ib2wudG9TdHJpbmdUYWddLW5hbWVkIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmc6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUHJvdG8odGFnUmVjb3JkLGdldFByb3RvdHlwZU9mKHRhZ1JlY29yZCksY2hlY2spKTtcblxuIH07XG5yZXR1cm4gaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcbiB9O1xuXG5jb25zdCAgICAgICAgY2hlY2tUYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhmYWxzZSxYIGBBIHRhZ1JlY29yZCBtdXN0IGluaGVyaXQgZnJvbSBPYmplY3QucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrVGFnUmVjb3JkKGNoZWNrVGFnUmVjb3JkKTtcblxuaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcblxuY29uc3QgICAgICAgIGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5wcm90byE9PW51bGwmJmdldFByb3RvdHlwZU9mKHByb3RvKT09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbiEhY2hlY2smJlxuY2hlY2soXG5mYWxzZSxcblggYEZvciBmdW5jdGlvbnMsIGEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZTogJHt2YWx9YCkpOyRozY9fb25jZS5jaGVja0Z1bmN0aW9uVGFnUmVjb3JkKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xuXG5cbmhhcmRlbihjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imhhc093blByb3BlcnR5T2YiOlsiaGFzT3duUHJvcGVydHlPZiJdLCJpc09iamVjdCI6WyJpc09iamVjdCJdLCJpc1R5cGVkQXJyYXkiOlsiaXNUeXBlZEFycmF5Il0sIlBBU1NfU1RZTEUiOlsiUEFTU19TVFlMRSJdLCJjYW5CZU1ldGhvZCI6WyJjYW5CZU1ldGhvZCJdLCJhc3NlcnRDaGVja2VyIjpbImFzc2VydENoZWNrZXIiXSwiQ1giOlsiQ1giXSwiZ2V0T3duRGF0YURlc2NyaXB0b3IiOlsiZ2V0T3duRGF0YURlc2NyaXB0b3IiXSwiZ2V0VGFnIjpbImdldFRhZyJdLCJjaGVja1Bhc3NTdHlsZSI6WyJjaGVja1Bhc3NTdHlsZSJdLCJjaGVja1RhZ1JlY29yZCI6WyJjaGVja1RhZ1JlY29yZCJdLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIjpbImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFAxNfrAkAACwJAAAKgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9wYXNzU3R5bGVPZi5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL2NvcHlBcnJheS5qcyIsIi4vY29weVJlY29yZC5qcyIsIi4vdGFnZ2VkLmpzIiwiLi9lcnJvci5qcyIsIi4vcmVtb3RhYmxlLmpzIiwiLi9zeW1ib2wuanMiLCIuL3NhZmUtcHJvbWlzZS5qcyIsIi4vc3RyaW5nLmpzIl0sImV4cG9ydHMiOlsiUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZSIsImlzUGFzc2FibGUiLCJwYXNzU3R5bGVPZiIsInRvUGFzc2FibGVFcnJvciIsInRvVGhyb3dhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxYLEZhaWwscSxhbm5vdGF0ZUVycm9yLG1ha2VFcnJvcixpc09iamVjdCxpc1R5cGVkQXJyYXksUEFTU19TVFlMRSxDb3B5QXJyYXlIZWxwZXIsQ29weVJlY29yZEhlbHBlcixUYWdnZWRIZWxwZXIsRXJyb3JIZWxwZXIsY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MsY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IsZ2V0RXJyb3JDb25zdHJ1Y3Rvcixpc0Vycm9yTGlrZSxSZW1vdGFibGVIZWxwZXIsYXNzZXJ0UGFzc2FibGVTeW1ib2wsYXNzZXJ0U2FmZVByb21pc2UsYXNzZXJ0UGFzc2FibGVTdHJpbmc7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJpc1R5cGVkQXJyYXlcIiwgWyRozY9fYSA9PiAoaXNUeXBlZEFycmF5ID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXV1dLFtcIi4vY29weUFycmF5LmpzXCIsIFtbXCJDb3B5QXJyYXlIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weUFycmF5SGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5UmVjb3JkLmpzXCIsIFtbXCJDb3B5UmVjb3JkSGVscGVyXCIsIFskaM2PX2EgPT4gKENvcHlSZWNvcmRIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3RhZ2dlZC5qc1wiLCBbW1wiVGFnZ2VkSGVscGVyXCIsIFskaM2PX2EgPT4gKFRhZ2dlZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vZXJyb3IuanNcIiwgW1tcIkVycm9ySGVscGVyXCIsIFskaM2PX2EgPT4gKEVycm9ySGVscGVyID0gJGjNj19hKV1dLFtcImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjXCIsIFskaM2PX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjID0gJGjNj19hKV1dLFtcImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yXCIsIFskaM2PX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yID0gJGjNj19hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXV1dLFtcIi4vcmVtb3RhYmxlLmpzXCIsIFtbXCJSZW1vdGFibGVIZWxwZXJcIiwgWyRozY9fYSA9PiAoUmVtb3RhYmxlSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9zeW1ib2wuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dXV0sW1wiLi9zYWZlLXByb21pc2UuanNcIiwgW1tcImFzc2VydFNhZmVQcm9taXNlXCIsIFskaM2PX2EgPT4gKGFzc2VydFNhZmVQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiLi9zdHJpbmcuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlU3RyaW5nXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3RyaW5nID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNGcm96ZW4sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx2YWx1ZXN9PU9iamVjdDtcblxuLypcblxuXG4gKi9cblxuY29uc3QgbWFrZUhlbHBlclRhYmxlPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBIZWxwZXJUYWJsZT17XG5fX3Byb3RvX186bnVsbCxcbmNvcHlBcnJheTp1bmRlZmluZWQsXG5jb3B5UmVjb3JkOnVuZGVmaW5lZCxcbnRhZ2dlZDp1bmRlZmluZWQsXG5lcnJvcjp1bmRlZmluZWQsXG5yZW1vdGFibGU6dW5kZWZpbmVkfTtcblxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmNvbnN0e3N0eWxlTmFtZX09aGVscGVyO1xuc3R5bGVOYW1lIGluIEhlbHBlclRhYmxlfHxGYWlsIGBVbnJlY29nbml6ZWQgaGVscGVyOiAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT09PXVuZGVmaW5lZHx8XG5GYWlsIGBjb25mbGljdGluZyBoZWxwZXJzIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT1oZWxwZXI7XG4gfVxuZm9yKGNvbnN0IHN0eWxlTmFtZSBvZiBvd25LZXlzKEhlbHBlclRhYmxlKSl7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdIT09dW5kZWZpbmVkfHxcbkZhaWwgYG1pc3NpbmcgaGVscGVyIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuIH1cblxucmV0dXJuIGhhcmRlbihIZWxwZXJUYWJsZSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VQYXNzU3R5bGVPZj0ocGFzc1N0eWxlSGVscGVycyk9PntcbmNvbnN0IEhlbHBlclRhYmxlPW1ha2VIZWxwZXJUYWJsZShwYXNzU3R5bGVIZWxwZXJzKTtcbmNvbnN0IHJlbW90YWJsZUhlbHBlcj1IZWxwZXJUYWJsZS5yZW1vdGFibGU7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHBhc3NTdHlsZU1lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuICAgKi9cbi8vXG5jb25zdCBwYXNzU3R5bGVPZj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbi8vXG5jb25zdCBpblByb2dyZXNzPW5ldyBTZXQoKTtcblxuY29uc3QgcGFzc1N0eWxlT2ZSZWN1cj0oaW5uZXIpPT57XG5jb25zdCBpbm5lcklzT2JqZWN0PWlzT2JqZWN0KGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xuY29uc3QgaW5uZXJTdHlsZT1wYXNzU3R5bGVNZW1vLmdldChpbm5lcik7XG5pZihpbm5lclN0eWxlKXtcbnJldHVybiBpbm5lclN0eWxlO1xuIH1cbiFpblByb2dyZXNzLmhhcyhpbm5lcil8fFxuRmFpbCBgUGFzcy1ieS1jb3B5IGRhdGEgY2Fubm90IGJlIGN5Y2xpYyAke2lubmVyfWA7XG5pblByb2dyZXNzLmFkZChpbm5lcik7XG4gfVxuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZkludGVybmFsKGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xucGFzc1N0eWxlTWVtby5zZXQoaW5uZXIscGFzc1N0eWxlKTtcbmluUHJvZ3Jlc3MuZGVsZXRlKGlubmVyKTtcbiB9XG5yZXR1cm4gcGFzc1N0eWxlO1xuIH07XG5cbmNvbnN0IHBhc3NTdHlsZU9mSW50ZXJuYWw9KGlubmVyKT0+e1xuY29uc3QgdHlwZXN0cj10eXBlb2YgaW5uZXI7XG5zd2l0Y2godHlwZXN0cil7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOntcbnJldHVybiB0eXBlc3RyO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5hc3NlcnRQYXNzYWJsZVN0cmluZyhpbm5lcik7XG5yZXR1cm4nc3RyaW5nJztcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2woaW5uZXIpO1xucmV0dXJuJ3N5bWJvbCc7XG4gfVxuY2FzZSdvYmplY3QnOntcbmlmKGlubmVyPT09bnVsbCl7XG5yZXR1cm4nbnVsbCc7XG4gfVxuaWYoIWlzRnJvemVuKGlubmVyKSl7XG5hc3NlcnQuZmFpbChcbi8vXG4vL1xuaXNUeXBlZEFycmF5KGlubmVyKT9cblggYENhbm5vdCBwYXNzIG11dGFibGUgdHlwZWQgYXJyYXlzIGxpa2UgJHtpbm5lcn0uYDpcblggYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgKTtcblxuIH1cbmlmKGlzUHJvbWlzZShpbm5lcikpe1xuYXNzZXJ0U2FmZVByb21pc2UoaW5uZXIpO1xucmV0dXJuJ3Byb21pc2UnO1xuIH1cbnR5cGVvZiBpbm5lci50aGVuIT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBDYW5ub3QgcGFzcyBub24tcHJvbWlzZSB0aGVuYWJsZXNgO1xuY29uc3QgcGFzc1N0eWxlVGFnPWlubmVyW1BBU1NfU1RZTEVdO1xuaWYocGFzc1N0eWxlVGFnIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YocGFzc1N0eWxlVGFnLCdzdHJpbmcnKTtcbmNvbnN0IGhlbHBlcj1IZWxwZXJUYWJsZVtwYXNzU3R5bGVUYWddO1xuaGVscGVyIT09dW5kZWZpbmVkfHxcbkZhaWwgYFVucmVjb2duaXplZCBQYXNzU3R5bGU6ICR7cShwYXNzU3R5bGVUYWcpfWA7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZVRhZyk7XG4gfVxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmlmKGhlbHBlci5jYW5CZVZhbGlkKGlubmVyKSl7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gaGVscGVyLnN0eWxlTmFtZTtcbiB9XG4gfVxucmVtb3RhYmxlSGVscGVyLmFzc2VydFZhbGlkKGlubmVyLHBhc3NTdHlsZU9mUmVjdXIpO1xucmV0dXJuJ3JlbW90YWJsZSc7XG4gfVxuY2FzZSdmdW5jdGlvbic6e1xuaXNGcm96ZW4oaW5uZXIpfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgO1xudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVucmVjb2duaXplZCB0eXBlb2YgJHtxKHR5cGVzdHIpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTtcblxucmV0dXJuIHBhc3NTdHlsZU9mUmVjdXIocGFzc2FibGUpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHBhc3NTdHlsZU9mKTtcbiB9O1xuXG5jb25zdCAgICAgICAgUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2w9U3ltYm9sLmZvcignQGVuZG8gcGFzc1N0eWxlT2YnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sKFBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sKTtcbmNvbnN0ICAgICAgICBwYXNzU3R5bGVPZj1cbmdsb2JhbFRoaXMmJmdsb2JhbFRoaXNbUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2xdfHxcbm1ha2VQYXNzU3R5bGVPZihbXG5Db3B5QXJyYXlIZWxwZXIsXG5Db3B5UmVjb3JkSGVscGVyLFxuVGFnZ2VkSGVscGVyLFxuRXJyb3JIZWxwZXIsXG5SZW1vdGFibGVIZWxwZXJdKTskaM2PX29uY2UucGFzc1N0eWxlT2YocGFzc1N0eWxlT2YpO1xuXG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZT0odmFsKT0+e1xucGFzc1N0eWxlT2YodmFsKTsvL1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlKGFzc2VydFBhc3NhYmxlKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT57XG50cnl7XG4vL1xuLy9cbnJldHVybiBwYXNzU3R5bGVPZihzcGVjaW1lbikhPT11bmRlZmluZWQ7XG4gfWNhdGNoKF8pe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9OyRozY9fb25jZS5pc1Bhc3NhYmxlKGlzUGFzc2FibGUpO1xuaGFyZGVuKGlzUGFzc2FibGUpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc1Bhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2M9KG5hbWUsZGVzYyk9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MobmFtZSxkZXNjLHBhc3NTdHlsZU9mKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0b1Bhc3NhYmxlRXJyb3I9KGVycik9PntcbmhhcmRlbihlcnIpO1xuaWYoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoZXJyLHBhc3NTdHlsZU9mKSl7XG5yZXR1cm4gZXJyO1xuIH1cbmNvbnN0e25hbWUsbWVzc2FnZX09ZXJyO1xuY29uc3R7Y2F1c2U6Y2F1c2VEZXNjLGVycm9yczplcnJvcnNEZXNjfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZXJyKTtcbmxldCBjYXVzZTtcbmxldCBlcnJvcnM7XG5pZihjYXVzZURlc2MmJmlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYygnY2F1c2UnLGNhdXNlRGVzYykpe1xuY2F1c2U9Y2F1c2VEZXNjLnZhbHVlO1xuIH1cbmlmKGVycm9yc0Rlc2MmJmlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYygnZXJyb3JzJyxlcnJvcnNEZXNjKSl7XG5lcnJvcnM9ZXJyb3JzRGVzYy52YWx1ZTtcbiB9XG5cbmNvbnN0IGVyckNvbnN0cnVjdG9yPWdldEVycm9yQ29uc3RydWN0b3IoIGAke25hbWV9YCl8fEVycm9yO1xuY29uc3QgbmV3RXJyb3I9bWFrZUVycm9yKCBgJHttZXNzYWdlfWAsZXJyQ29uc3RydWN0b3Ise1xuLy9cbmNhdXNlLFxuZXJyb3JzfSk7XG5cbi8vXG5oYXJkZW4obmV3RXJyb3IpO1xuLy9cbi8vXG4vL1xuYW5ub3RhdGVFcnJvcihuZXdFcnJvcixYIGBjb3BpZWQgZnJvbSBlcnJvciAke2Vycn1gKTtcbnBhc3NTdHlsZU9mKG5ld0Vycm9yKT09PSdlcnJvcid8fFxuRmFpbCBgRXhwZWN0ZWQgJHtuZXdFcnJvcn0gdG8gYmUgYSBwYXNzYWJsZSBlcnJvcmA7XG5yZXR1cm4gbmV3RXJyb3I7XG4gfTskaM2PX29uY2UudG9QYXNzYWJsZUVycm9yKHRvUGFzc2FibGVFcnJvcik7XG5oYXJkZW4odG9QYXNzYWJsZUVycm9yKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvVGhyb3dhYmxlPShzcGVjaW1lbik9PntcbmhhcmRlbihzcGVjaW1lbik7XG5pZihpc0Vycm9yTGlrZShzcGVjaW1lbikpe1xucmV0dXJuIHRvUGFzc2FibGVFcnJvcigvKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuKTtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuaWYoaXNPYmplY3Qoc3BlY2ltZW4pKXtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGVsZW1lbnRzPS8qICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpe1xuZWxlbWVudD09PXRvVGhyb3dhYmxlKGVsZW1lbnQpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VsZW1lbnR9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmNvbnN0IHJlYz0vKiAgICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgdmFsIG9mIHZhbHVlcyhyZWMpKXtcbnZhbD09PXRvVGhyb3dhYmxlKHZhbCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7dmFsfWA7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmNvbnN0e3BheWxvYWR9PXRnO1xucGF5bG9hZD09PXRvVGhyb3dhYmxlKHBheWxvYWQpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke3BheWxvYWR9YDtcbmJyZWFrO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGVyPS8qICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5lcj09PXRvVGhyb3dhYmxlKGVyKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHtlcn1gO1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBBICR7cShwYXNzU3R5bGUpfSBpcyBub3QgdGhyb3dhYmxlOiAke3NwZWNpbWVufWA7XG4gfX1cblxuIH1cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH07JGjNj19vbmNlLnRvVGhyb3dhYmxlKHRvVGhyb3dhYmxlKTtcbmhhcmRlbih0b1Rocm93YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCJdLCJwYXNzU3R5bGVPZiI6WyJwYXNzU3R5bGVPZiJdLCJhc3NlcnRQYXNzYWJsZSI6WyJhc3NlcnRQYXNzYWJsZSJdLCJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXSwidG9QYXNzYWJsZUVycm9yIjpbInRvUGFzc2FibGVFcnJvciJdLCJ0b1Rocm93YWJsZSI6WyJ0b1Rocm93YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABShHt6phcAAKYXAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3JlbW90YWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiUmVtb3RhYmxlSGVscGVyIiwiYXNzZXJ0SWZhY2UiLCJnZXRJbnRlcmZhY2VPZiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsYXNzZXJ0Q2hlY2tlcixjYW5CZU1ldGhvZCxoYXNPd25Qcm9wZXJ0eU9mLFBBU1NfU1RZTEUsY2hlY2tUYWdSZWNvcmQsY2hlY2tGdW5jdGlvblRhZ1JlY29yZCxpc09iamVjdCxnZXRUYWcsQ1g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRozY9fYSA9PiAoY2FuQmVNZXRob2QgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja1RhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGUsXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1cbk9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IGNoZWNrSWZhY2U9KGlmYWNlLGNoZWNrKT0+e1xucmV0dXJuKFxuLy9cbih0eXBlb2YgaWZhY2U9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZvciBub3csIGludGVyZmFjZSAke2lmYWNlfSBtdXN0IGJlIGEgc3RyaW5nOyB1bmltcGxlbWVudGVkYCkmJihcbmlmYWNlPT09J1JlbW90YWJsZSd8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnQWxsZWdlZDogJyl8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnRGVidWdOYW1lOiAnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRm9yIG5vdywgaWZhY2UgJHtxKFxuaWZhY2UpXG4gfSBtdXN0IGJlIFwiUmVtb3RhYmxlXCIgb3IgYmVnaW4gd2l0aCBcIkFsbGVnZWQ6IFwiIG9yIFwiRGVidWdOYW1lOiBcIjsgdW5pbXBsZW1lbnRlZGApKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0SWZhY2U9KGlmYWNlKT0+Y2hlY2tJZmFjZShpZmFjZSxhc3NlcnRDaGVja2VyKTskaM2PX29uY2UuYXNzZXJ0SWZhY2UoYXNzZXJ0SWZhY2UpO1xuaGFyZGVuKGFzc2VydElmYWNlKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tSZW1vdGFibGVQcm90b09mPShvcmlnaW5hbCxjaGVjayk9PntcbmlzT2JqZWN0KG9yaWdpbmFsKXx8XG5GYWlsIGBSZW1vdGFibGVzIG11c3QgYmUgb2JqZWN0cyBvciBmdW5jdGlvbnM6ICR7b3JpZ2luYWx9YDtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBwcm90bz1nZXRQcm90b3R5cGVPZihvcmlnaW5hbCk7XG5pZihcbnByb3RvPT09b2JqZWN0UHJvdG90eXBlfHxcbnByb3RvPT09bnVsbHx8XG5wcm90bz09PUZ1bmN0aW9uLnByb3RvdHlwZSlcbntcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZW1vdGFibGVzIG11c3QgYmUgZXhwbGljaXRseSBkZWNsYXJlZDogJHtxKG9yaWdpbmFsKX1gKTtcblxuIH1cblxuaWYodHlwZW9mIG9yaWdpbmFsPT09J29iamVjdCcpe1xuY29uc3QgcHJvdG9Qcm90bz1nZXRQcm90b3R5cGVPZihwcm90byk7XG5pZihwcm90b1Byb3RvIT09b2JqZWN0UHJvdG90eXBlJiZwcm90b1Byb3RvIT09bnVsbCl7XG4vL1xucmV0dXJuIGNoZWNrUmVtb3RhYmxlKHByb3RvLGNoZWNrKTtcbiB9XG5pZighY2hlY2tUYWdSZWNvcmQocHJvdG8sJ3JlbW90YWJsZScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfWVsc2UgaWYodHlwZW9mIG9yaWdpbmFsPT09J2Z1bmN0aW9uJyl7XG5pZighY2hlY2tGdW5jdGlvblRhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06e3ZhbHVlOmlmYWNlfSxcbi4uLnJlc3REZXNjc309XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHByb3RvKTtcblxucmV0dXJuKFxuKG93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIFJlbW90YWJsZSBQcm90byAke293bktleXMocmVzdERlc2NzKX1gKSYmXG5jaGVja0lmYWNlKGlmYWNlLGNoZWNrKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbmZpcm1lZFJlbW90YWJsZXM9bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tSZW1vdGFibGU9KHZhbCxjaGVjayk9PntcbmlmKGNvbmZpcm1lZFJlbW90YWJsZXMuaGFzKHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoIWlzRnJvemVuKHZhbCkpe1xucmV0dXJuKFxuISFjaGVjayYmQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7dmFsfWApO1xuXG4gfVxuLy9cbmlmKCFSZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZCh2YWwsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCByZXN1bHQ9Y2hlY2tSZW1vdGFibGVQcm90b09mKHZhbCxjaGVjayk7XG5pZihyZXN1bHQpe1xuY29uZmlybWVkUmVtb3RhYmxlcy5hZGQodmFsKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEludGVyZmFjZU9mPSh2YWwpPT57XG5pZihcbiFpc09iamVjdCh2YWwpfHxcbnZhbFtQQVNTX1NUWUxFXSE9PSdyZW1vdGFibGUnfHxcbiFjaGVja1JlbW90YWJsZSh2YWwpKVxue1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuLy9cbnJldHVybiBnZXRUYWcodmFsKTtcbiB9OyRozY9fb25jZS5nZXRJbnRlcmZhY2VPZihnZXRJbnRlcmZhY2VPZik7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlT2YpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFJlbW90YWJsZUhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidyZW1vdGFibGUnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xuY29uc3QgdmFsaWRUeXBlPVxuKGlzT2JqZWN0KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLW9iamVjdHMgYXMgUmVtb3RhYmxlICR7Y2FuZGlkYXRlfWApJiYoXG4haXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIGFycmF5cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCk7XG5pZighdmFsaWRUeXBlKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbmlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nb2JqZWN0Jyl7XG4vL1xuLy9cbnJldHVybiBvd25LZXlzKGRlc2NzKS5ldmVyeSgoa2V5KT0+e1xucmV0dXJuKFxuLy9cbihoYXNPd25Qcm9wZXJ0eU9mKGRlc2NzWy8qICAgICAgICAgICAgICAgICAqL2tleV0sJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgUmVtb3RhYmxlcyB3aXRoIGFjY2Vzc29ycyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleT09PVN5bWJvbC50b1N0cmluZ1RhZyYmY2hlY2tJZmFjZShjYW5kaWRhdGVba2V5XSxjaGVjayl8fFxuKGNhbkJlTWV0aG9kKGNhbmRpZGF0ZVtrZXldKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggbm9uLW1ldGhvZHMgbGlrZSAke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGluICR7Y2FuZGlkYXRlfWApJiYoXG5rZXkhPT1QQVNTX1NUWUxFfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBBIHBhc3MtYnktcmVtb3RlIGNhbm5vdCBzaGFkb3cgJHtxKFBBU1NfU1RZTEUpfWApKSk7XG5cbiB9KTtcbiB9ZWxzZSBpZih0eXBlb2YgY2FuZGlkYXRlPT09J2Z1bmN0aW9uJyl7XG4vL1xuLy9cbmNvbnN0e1xubmFtZTpuYW1lRGVzYyxcbmxlbmd0aDpsZW5ndGhEZXNjLFxuLy9cbltTeW1ib2wudG9TdHJpbmdUYWddOnRvU3RyaW5nVGFnRGVzYyxcbi4uLnJlc3REZXNjc309XG5kZXNjcztcbmNvbnN0IHJlc3RLZXlzPW93bktleXMocmVzdERlc2NzKTtcbnJldHVybihcbihuYW1lRGVzYyYmdHlwZW9mIG5hbWVEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEZhciBmdW5jdGlvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiYoXG5sZW5ndGhEZXNjJiZ0eXBlb2YgbGVuZ3RoRGVzYy52YWx1ZT09PSdudW1iZXInfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9uIGxlbmd0aCBtdXN0IGJlIGEgbnVtYmVyLCBpbiAke2NhbmRpZGF0ZX1gKSYmKFxudG9TdHJpbmdUYWdEZXNjPT09dW5kZWZpbmVkfHxcbih0eXBlb2YgdG9TdHJpbmdUYWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgc3RyaW5nLCBpbiAke2NhbmRpZGF0ZX1gKSYmXG5jaGVja0lmYWNlKHRvU3RyaW5nVGFnRGVzYy52YWx1ZSxjaGVjaykpJiYoXG5yZXN0S2V5cy5sZW5ndGg9PT0wfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9ucyB1bmV4cGVjdGVkIHByb3BlcnRpZXMgYmVzaWRlcyAubmFtZSBhbmQgLmxlbmd0aCAke3Jlc3RLZXlzfWApKTtcblxuIH1cbnJldHVybiEhY2hlY2smJkNYKGNoZWNrKSBgdW5yZWNvZ25pemVkIHR5cGVvZiAke2NhbmRpZGF0ZX1gO1xuIH0sXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUpPT5jaGVja1JlbW90YWJsZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlciksXG5cbmV2ZXJ5OihfcGFzc2FibGUsX2ZuKT0+dHJ1ZX0pOyRozY9fb25jZS5SZW1vdGFibGVIZWxwZXIoUmVtb3RhYmxlSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydElmYWNlIjpbImFzc2VydElmYWNlIl0sImdldEludGVyZmFjZU9mIjpbImdldEludGVyZmFjZU9mIl0sIlJlbW90YWJsZUhlbHBlciI6WyJSZW1vdGFibGVIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxRgAzIYMAACGDAAAKwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9zYWZlLXByb21pc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0U2FmZVByb21pc2UiLCJpc1NhZmVQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxxLGFzc2VydENoZWNrZXIsaGFzT3duUHJvcGVydHlPZixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7aXNGcm96ZW4sZ2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWd9PVN5bWJvbDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tQcm9taXNlT3duS2V5cz0ocHIsY2hlY2spPT57XG5jb25zdCBrZXlzPW93bktleXMocHIpO1xuXG5pZihrZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgdW5rbm93bktleXM9a2V5cy5maWx0ZXIoXG4oa2V5KT0+dHlwZW9mIGtleSE9PSdzeW1ib2wnfHwhaGFzT3duUHJvcGVydHlPZihQcm9taXNlLnByb3RvdHlwZSxrZXkpKTtcblxuXG5pZih1bmtub3duS2V5cy5sZW5ndGghPT0wKXtcbnJldHVybiBDWChcbmNoZWNrKVxuIGAke3ByfSAtIE11c3Qgbm90IGhhdmUgYW55IG93biBwcm9wZXJ0aWVzOiAke3EodW5rbm93bktleXMpfWA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tTYWZlT3duS2V5PShrZXkpPT57XG5pZihrZXk9PT10b1N0cmluZ1RhZyl7XG4vL1xuLy9cbmNvbnN0IHRhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByLHRvU3RyaW5nVGFnKTtcbmFzc2VydCh0YWdEZXNjIT09dW5kZWZpbmVkKTtcbnJldHVybihcbihoYXNPd25Qcm9wZXJ0eU9mKHRhZ0Rlc2MsJ3ZhbHVlJyl8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHksIG5vdCBhbiBhY2Nlc3NvcjogJHtxKHRhZ0Rlc2MpfWApJiYoXG50eXBlb2YgdGFnRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbkNYKFxuY2hlY2spXG4gYE93biBAQHRvU3RyaW5nVGFnIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICR7cSh0YWdEZXNjLnZhbHVlKX1gKSYmKFxuIXRhZ0Rlc2MuZW51bWVyYWJsZXx8XG5DWChjaGVjaykgYE93biBAQHRvU3RyaW5nVGFnIG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7cSh0YWdEZXNjKX1gKSk7XG5cbiB9XG5jb25zdCB2YWw9cHJba2V5XTtcbmlmKHZhbD09PXVuZGVmaW5lZHx8dHlwZW9mIHZhbD09PSdudW1iZXInKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKFxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZcbnZhbCE9PW51bGwmJlxuaXNGcm96ZW4odmFsKSYmXG5nZXRQcm90b3R5cGVPZih2YWwpPT09T2JqZWN0LnByb3RvdHlwZSlcbntcbmNvbnN0IHN1YktleXM9b3duS2V5cyh2YWwpO1xuaWYoc3ViS2V5cy5sZW5ndGg9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cblxuaWYoXG5zdWJLZXlzLmxlbmd0aD09PTEmJlxuc3ViS2V5c1swXT09PSdkZXN0cm95ZWQnJiZcbnZhbC5kZXN0cm95ZWQ9PT1mYWxzZSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBOb2RlIGFzeW5jX2hvb2tzIGFkZGl0aW9ucyB0byBwcm9taXNlOiAke3ByfS4ke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGlzICR7dmFsfWA7XG4gfTtcblxucmV0dXJuIGtleXMuZXZlcnkoY2hlY2tTYWZlT3duS2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tTYWZlUHJvbWlzZT0ocHIsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNGcm96ZW4ocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBmcm96ZW5gKSYmKFxuaXNQcm9taXNlKHByKXx8Q1goY2hlY2spIGAke3ByfSAtIE11c3QgYmUgYSBwcm9taXNlYCkmJihcbmdldFByb3RvdHlwZU9mKHByKT09PVByb21pc2UucHJvdG90eXBlfHxcbkNYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGluaGVyaXQgZnJvbSBQcm9taXNlLnByb3RvdHlwZTogJHtxKFxuZ2V0UHJvdG90eXBlT2YocHIpKVxuIH1gKSYmXG5jaGVja1Byb21pc2VPd25LZXlzKC8qICAgICAgICAgICAgICAgICAgKi9wcixjaGVjaykpO1xuXG4gfTtcbmhhcmRlbihjaGVja1NhZmVQcm9taXNlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLCh4KT0+eCk7JGjNj19vbmNlLmlzU2FmZVByb21pc2UoaXNTYWZlUHJvbWlzZSk7XG5oYXJkZW4oaXNTYWZlUHJvbWlzZSk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRTYWZlUHJvbWlzZShhc3NlcnRTYWZlUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1NhZmVQcm9taXNlIjpbImlzU2FmZVByb21pc2UiXSwiYXNzZXJ0U2FmZVByb21pc2UiOlsiYXNzZXJ0U2FmZVByb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmJdfLLIHAACyBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9zdHJpbmcuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb24sRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjNj19hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vL1xuY29uc3QgaGFzV2VsbEZvcm1lZFN0cmluZ01ldGhvZD0hIVN0cmluZy5wcm90b3R5cGUuaXNXZWxsRm9ybWVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzV2VsbEZvcm1lZFN0cmluZz1oYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kP1xuKHN0cik9PnR5cGVvZiBzdHI9PT0nc3RyaW5nJyYmc3RyLmlzV2VsbEZvcm1lZCgpOlxuKHN0cik9PntcbmlmKHR5cGVvZiBzdHIhPT0nc3RyaW5nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuZm9yKGNvbnN0IGNoIG9mIHN0cil7XG4vL1xuLy9cbi8vXG5jb25zdCBjcD0vKiAgICAgICAgICAgICAgICAgKi9jaC5jb2RlUG9pbnRBdCgwKTtcbmlmKGNwPj0weGQ4MDAmJmNwPD0weGRmZmYpe1xuLy9cbi8vXG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9OyRozY9fb25jZS5pc1dlbGxGb3JtZWRTdHJpbmcoaXNXZWxsRm9ybWVkU3RyaW5nKTtcbmhhcmRlbihpc1dlbGxGb3JtZWRTdHJpbmcpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFdlbGxGb3JtZWRTdHJpbmc9KHN0cik9PntcbmlzV2VsbEZvcm1lZFN0cmluZyhzdHIpfHxGYWlsIGBFeHBlY3RlZCB3ZWxsLWZvcm1lZCB1bmljb2RlIHN0cmluZzogJHtzdHJ9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRXZWxsRm9ybWVkU3RyaW5nKGFzc2VydFdlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGFzc2VydFdlbGxGb3JtZWRTdHJpbmcpO1xuXG5jb25zdCBPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEU9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignT05MWV9XRUxMX0ZPUk1FRF9TVFJJTkdTX1BBU1NBQkxFJywnZGlzYWJsZWQnLFtcbidlbmFibGVkJ10pPT09XG4nZW5hYmxlZCc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZVN0cmluZz0oc3RyKT0+e1xudHlwZW9mIHN0cj09PSdzdHJpbmcnfHxGYWlsIGBFeHBlY3RlZCBzdHJpbmcgJHtzdHJ9YDtcbiFPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEV8fGFzc2VydFdlbGxGb3JtZWRTdHJpbmcoc3RyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRQYXNzYWJsZVN0cmluZyhhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTdHJpbmcpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNXZWxsRm9ybWVkU3RyaW5nIjpbImlzV2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIjpbImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSwiYXNzZXJ0UGFzc2FibGVTdHJpbmciOlsiYXNzZXJ0UGFzc2FibGVTdHJpbmciXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZj9ZlfwJAAD8CQAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9zeW1ib2wuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIiwibmFtZUZvclBhc3NhYmxlU3ltYm9sIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cbiAqL1xuY29uc3Qgd2VsbEtub3duU3ltYm9sTmFtZXM9bmV3IE1hcChcbm93bktleXMoU3ltYm9sKS5cbmZpbHRlcihcbihuYW1lKT0+dHlwZW9mIG5hbWU9PT0nc3RyaW5nJyYmdHlwZW9mIFN5bWJvbFtuYW1lXT09PSdzeW1ib2wnKS5cblxuZmlsdGVyKChuYW1lKT0+e1xuLy9cbiFuYW1lLnN0YXJ0c1dpdGgoJ0BAJyl8fFxuRmFpbCBgRGlkIG5vdCBleHBlY3QgU3ltYm9sIHRvIGhhdmUgYSBzeW1ib2wtdmFsdWVkIHByb3BlcnR5IG5hbWUgc3RhcnRpbmcgd2l0aCBcIkBAXCIgJHtxKFxubmFtZSlcbiB9YDtcbnJldHVybiB0cnVlO1xuIH0pXG4vL1xuLm1hcCgobmFtZSk9PltTeW1ib2xbbmFtZV0sIGBAQCR7bmFtZX1gXSkpO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlU3ltYm9sPShzeW0pPT5cbnR5cGVvZiBzeW09PT0nc3ltYm9sJyYmKFxudHlwZW9mIFN5bWJvbC5rZXlGb3Ioc3ltKT09PSdzdHJpbmcnfHx3ZWxsS25vd25TeW1ib2xOYW1lcy5oYXMoc3ltKSk7JGjNj19vbmNlLmlzUGFzc2FibGVTeW1ib2woaXNQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oaXNQYXNzYWJsZVN5bWJvbCk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZVN5bWJvbD0oc3ltKT0+XG5pc1Bhc3NhYmxlU3ltYm9sKHN5bSl8fFxuRmFpbCBgT25seSByZWdpc3RlcmVkIHN5bWJvbHMgb3Igd2VsbC1rbm93biBzeW1ib2xzIGFyZSBwYXNzYWJsZTogJHtxKHN5bSl9YDskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGVTeW1ib2woYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlU3ltYm9sKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbmFtZUZvclBhc3NhYmxlU3ltYm9sPShzeW0pPT57XG5jb25zdCBuYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKG5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIHdlbGxLbm93blN5bWJvbE5hbWVzLmdldChzeW0pO1xuIH1cbmlmKG5hbWUuc3RhcnRzV2l0aCgnQEAnKSl7XG5yZXR1cm4gYEBAJHtuYW1lfWA7XG4gfVxucmV0dXJuIG5hbWU7XG4gfTskaM2PX29uY2UubmFtZUZvclBhc3NhYmxlU3ltYm9sKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4obmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgQXRBdFByZWZpeFBhdHRlcm49L15AQCguKikkLztcbmhhcmRlbihBdEF0UHJlZml4UGF0dGVybik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFzc2FibGVTeW1ib2xGb3JOYW1lPShuYW1lKT0+e1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5pZihtYXRjaCl7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5pZihzdWZmaXguc3RhcnRzV2l0aCgnQEAnKSl7XG5yZXR1cm4gU3ltYm9sLmZvcihzdWZmaXgpO1xuIH1lbHNle1xuY29uc3Qgc3ltPVN5bWJvbFtzdWZmaXhdO1xuaWYodHlwZW9mIHN5bT09PSdzeW1ib2wnKXtcbnJldHVybiBzeW07XG4gfVxuRmFpbCBgUmVzZXJ2ZWQgZm9yIHdlbGwga25vd24gc3ltYm9sICR7cShzdWZmaXgpfTogJHtxKG5hbWUpfWA7XG4gfVxuIH1cbnJldHVybiBTeW1ib2wuZm9yKG5hbWUpO1xuIH07JGjNj19vbmNlLnBhc3NhYmxlU3ltYm9sRm9yTmFtZShwYXNzYWJsZVN5bWJvbEZvck5hbWUpO1xuaGFyZGVuKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlU3ltYm9sIjpbImlzUGFzc2FibGVTeW1ib2wiXSwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSwibmFtZUZvclBhc3NhYmxlU3ltYm9sIjpbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiOlsicGFzc2FibGVTeW1ib2xGb3JOYW1lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGDVY54UBwAAFAcAACUAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdGFnZ2VkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJUYWdnZWRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxhc3NlcnRDaGVja2VyLGNoZWNrVGFnUmVjb3JkLFBBU1NfU1RZTEUsZ2V0T3duRGF0YURlc2NyaXB0b3IsY2hlY2tQYXNzU3R5bGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja1RhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiY2hlY2tQYXNzU3R5bGVcIiwgWyRozY9fYSA9PiAoY2hlY2tQYXNzU3R5bGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRhZ2dlZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOid0YWdnZWQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5jaGVja1Bhc3NTdHlsZShjYW5kaWRhdGUsY2FuZGlkYXRlW1BBU1NfU1RZTEVdLCd0YWdnZWQnLGNoZWNrKSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tUYWdSZWNvcmQoY2FuZGlkYXRlLCd0YWdnZWQnLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOl9sYWJlbERlc2MsXG5wYXlsb2FkOl9wYXlsb2FkRGVzYywvL1xuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbm93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbkZhaWwgYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiB0YWdnZWQgcmVjb3JkICR7b3duS2V5cyhyZXN0RGVzY3MpfWA7XG5cbi8vXG4vL1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwncGF5bG9hZCcsdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9fSk7JGjNj19vbmNlLlRhZ2dlZEhlbHBlcihUYWdnZWRIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGFnZ2VkSGVscGVyIjpbIlRhZ2dlZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAOvwkt/ggAAP4IAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbImFzc2VydENvcHlBcnJheSIsImFzc2VydFJlY29yZCIsImFzc2VydFJlbW90YWJsZSIsImlzQ29weUFycmF5IiwiaXNSZWNvcmQiLCJpc1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEscGFzc1N0eWxlT2Y7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzQ29weUFycmF5PShhcnIpPT5wYXNzU3R5bGVPZihhcnIpPT09J2NvcHlBcnJheSc7JGjNj19vbmNlLmlzQ29weUFycmF5KGlzQ29weUFycmF5KTtcbmhhcmRlbihpc0NvcHlBcnJheSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpc1JlY29yZD0ocmVjb3JkKT0+cGFzc1N0eWxlT2YocmVjb3JkKT09PSdjb3B5UmVjb3JkJzskaM2PX29uY2UuaXNSZWNvcmQoaXNSZWNvcmQpO1xuaGFyZGVuKGlzUmVjb3JkKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc1JlbW90YWJsZT0ocmVtb3RhYmxlKT0+cGFzc1N0eWxlT2YocmVtb3RhYmxlKT09PSdyZW1vdGFibGUnOyRozY9fb25jZS5pc1JlbW90YWJsZShpc1JlbW90YWJsZSk7XG5oYXJkZW4oaXNSZW1vdGFibGUpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRDb3B5QXJyYXk9KGFycmF5LG9wdE5hbWVPZkFycmF5PSdBbGxlZ2VkIGFycmF5Jyk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihhcnJheSk7XG5wYXNzU3R5bGU9PT0nY29weUFycmF5J3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mQXJyYXkpfSAke2FycmF5fSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IGFycmF5LCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlBcnJheShhc3NlcnRDb3B5QXJyYXkpO1xuaGFyZGVuKGFzc2VydENvcHlBcnJheSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlY29yZD0ocmVjb3JkLG9wdE5hbWVPZlJlY29yZD0nQWxsZWdlZCByZWNvcmQnKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlY29yZCk7XG5wYXNzU3R5bGU9PT0nY29weVJlY29yZCd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZlJlY29yZCl9ICR7cmVjb3JkfSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IHJlY29yZCwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRSZWNvcmQoYXNzZXJ0UmVjb3JkKTtcbmhhcmRlbihhc3NlcnRSZWNvcmQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRSZW1vdGFibGU9KFxucmVtb3RhYmxlLFxub3B0TmFtZU9mUmVtb3RhYmxlPSdBbGxlZ2VkIHJlbW90YWJsZScpPT5cbntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihyZW1vdGFibGUpO1xucGFzc1N0eWxlPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZlJlbW90YWJsZSl9ICR7cmVtb3RhYmxlfSBtdXN0IGJlIGEgcmVtb3RhYmxlLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlbW90YWJsZShhc3NlcnRSZW1vdGFibGUpO1xuaGFyZGVuKGFzc2VydFJlbW90YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlBcnJheSI6WyJpc0NvcHlBcnJheSJdLCJpc1JlY29yZCI6WyJpc1JlY29yZCJdLCJpc1JlbW90YWJsZSI6WyJpc1JlbW90YWJsZSJdLCJhc3NlcnRDb3B5QXJyYXkiOlsiYXNzZXJ0Q29weUFycmF5Il0sImFzc2VydFJlY29yZCI6WyJhc3NlcnRSZWNvcmQiXSwiYXNzZXJ0UmVtb3RhYmxlIjpbImFzc2VydFJlbW90YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAkAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADSAaLEQgYAAEIGAAAhAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwiLi9zcmMvbWVtby1yYWNlLmpzIiwiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZVByb21pc2VLaXQiLCJyYWNlUHJvbWlzZXMiXSwicmVleHBvcnRzIjpbIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQsbWVtb1JhY2U7JGjNj19pbXBvcnRzKFtbXCIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1wiLCBbW1wibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCA9ICRozY9fYSldXV1dLFtcIi4vc3JjL21lbW8tcmFjZS5qc1wiLCBbW1wibWVtb1JhY2VcIiwgWyRozY9fYSA9PiAobWVtb1JhY2UgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9pcy1wcm9taXNlLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZVByb21pc2VLaXQsICduYW1lJywge3ZhbHVlOiBcIm1ha2VQcm9taXNlS2l0XCJ9KTskaM2PX29uY2UubWFrZVByb21pc2VLaXQobWFrZVByb21pc2VLaXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYWNlUHJvbWlzZXMsICduYW1lJywge3ZhbHVlOiBcInJhY2VQcm9taXNlc1wifSk7JGjNj19vbmNlLnJhY2VQcm9taXNlcyhyYWNlUHJvbWlzZXMpOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZT1nbG9iYWxUaGlzLkhhbmRsZWRQcm9taXNlfHxQcm9taXNlO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVByb21pc2VLaXQoKXtcbmNvbnN0e3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfT1tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQoKTtcblxuY29uc3QgcHJvbWlzZT1uZXcgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZShleGVjdXRvcik7XG5cbnJldHVybiBoYXJkZW4oe3Byb21pc2UscmVzb2x2ZSxyZWplY3R9KTtcbiB9XG5oYXJkZW4obWFrZVByb21pc2VLaXQpO1xuXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICByYWNlUHJvbWlzZXModmFsdWVzKXtcbnJldHVybiBoYXJkZW4obWVtb1JhY2UuY2FsbChCZXN0UGlwZWxpbmFibGVQcm9taXNlLHZhbHVlcykpO1xuIH1cbmhhcmRlbihyYWNlUHJvbWlzZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2VLaXQiOlsibWFrZVByb21pc2VLaXQiXSwicmFjZVByb21pc2VzIjpbInJhY2VQcm9taXNlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACzXVtGVQIAAFUCAAAqAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy9pcy1wcm9taXNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpc1Byb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc1Byb21pc2UsICduYW1lJywge3ZhbHVlOiBcImlzUHJvbWlzZVwifSk7JGjNj19vbmNlLmlzUHJvbWlzZShpc1Byb21pc2UpOyAgIC8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIGlzUHJvbWlzZShtYXliZVByb21pc2Upe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShtYXliZVByb21pc2UpPT09bWF5YmVQcm9taXNlO1xuIH1cbmhhcmRlbihpc1Byb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQcm9taXNlIjpbImlzUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD6ZvCRnAcAAJwHAAApAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy9tZW1vLXJhY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1lbW9SYWNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuKi9cblxuY29uc3QgaXNPYmplY3Q9KHZhbHVlKT0+T2JqZWN0KHZhbHVlKT09PXZhbHVlO1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga25vd25Qcm9taXNlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFya1NldHRsZWQ9KHJlY29yZCk9PntcbmlmKCFyZWNvcmR8fHJlY29yZC5zZXR0bGVkKXtcbnJldHVybiBuZXcgU2V0KCk7XG4gfVxuXG5jb25zdHtkZWZlcnJlZHN9PXJlY29yZDtcbk9iamVjdC5hc3NpZ24ocmVjb3JkLHtcbmRlZmVycmVkczp1bmRlZmluZWQsXG5zZXR0bGVkOnRydWV9KTtcblxuT2JqZWN0LmZyZWV6ZShyZWNvcmQpO1xucmV0dXJuIGRlZmVycmVkcztcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBnZXRNZW1vUmVjb3JkPSh2YWx1ZSk9PntcbmlmKCFpc09iamVjdCh2YWx1ZSkpe1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oe3NldHRsZWQ6dHJ1ZX0pO1xuIH1cblxubGV0IHJlY29yZD1rbm93blByb21pc2VzLmdldCh2YWx1ZSk7XG5cbmlmKCFyZWNvcmQpe1xucmVjb3JkPXtkZWZlcnJlZHM6bmV3IFNldCgpLHNldHRsZWQ6ZmFsc2V9O1xua25vd25Qcm9taXNlcy5zZXQodmFsdWUscmVjb3JkKTtcbi8vXG5Qcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oXG4odmFsKT0+e1xuZm9yKGNvbnN0e3Jlc29sdmV9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZXNvbHZlKHZhbCk7XG4gfVxuIH0sXG4oZXJyKT0+e1xuZm9yKGNvbnN0e3JlamVjdH1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlamVjdChlcnIpO1xuIH1cbiB9KTtcblxuIH1cbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3R7cmFjZX09e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xucmFjZSh2YWx1ZXMpe1xubGV0IGRlZmVycmVkO1xuLyogICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgY2FjaGVkVmFsdWVzPVtdO1xuY29uc3QgQz10aGlzO1xuY29uc3QgcmVzdWx0PW5ldyBDKChyZXNvbHZlLHJlamVjdCk9PntcbmRlZmVycmVkPXtyZXNvbHZlLHJlamVjdH07XG5mb3IoY29uc3QgdmFsdWUgb2YgdmFsdWVzKXtcbmNhY2hlZFZhbHVlcy5wdXNoKHZhbHVlKTtcbmNvbnN0e3NldHRsZWQsZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKHNldHRsZWQpe1xuLy9cbi8vXG5DLnJlc29sdmUodmFsdWUpLnRoZW4ocmVzb2x2ZSxyZWplY3QpO1xuIH1lbHNle1xuZGVmZXJyZWRzLmFkZChkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcblxuLy9cbi8vXG5yZXR1cm4gcmVzdWx0LmZpbmFsbHkoKCk9PntcbmZvcihjb25zdCB2YWx1ZSBvZiBjYWNoZWRWYWx1ZXMpe1xuY29uc3R7ZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKGRlZmVycmVkcyl7XG5kZWZlcnJlZHMuZGVsZXRlKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuIH19OyRozY9fb25jZS5yYWNlKHJhY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWVtb1JhY2UiOlsicmFjZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACcbcSyfAUAAHwFAAA0AAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZXNvbHZlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzb2x2ZT0odmFsdWUpPT57XG5pZihpbnRlcm5hbFJlc29sdmUpe1xuaW50ZXJuYWxSZXNvbHZlKHZhbHVlKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT1udWxsKTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWplY3Q9KHJlYXNvbik9PntcbmlmKGludGVybmFsUmVqZWN0KXtcbmludGVybmFsUmVqZWN0KHJlYXNvbik7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZWplY3Q9PT1udWxsKTtcbiB9XG4gfTtcblxuY29uc3QgZXhlY3V0b3I9KHJlcyxyZWopPT57XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09dW5kZWZpbmVkJiZpbnRlcm5hbFJlamVjdD09PXVuZGVmaW5lZCk7XG5pbnRlcm5hbFJlc29sdmU9cmVzO1xuaW50ZXJuYWxSZWplY3Q9cmVqO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfSk7XG4gfTskaM2PX29uY2UubWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG5oYXJkZW4obWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAJQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwECHgMKAAAAAAAAAAAAQ8vI65pvAACabwAAFAAAAAAAAAAAAAAApIEAAAAAY29tcGFydG1lbnQtbWFwLmpzb25QSwECHgMKAAAAAAAAAAAAOmP5hKMFAACjBQAAPAAAAAAAAAAAAAAApIHMbwAAQGFnb3JpYy92YXRzLXYwLjE1LjEvc3JjL3Byb3Bvc2Fscy91cGdyYWRlLWtyZWFkLXByb3Bvc2FsLmpzUEsBAh4DCgAAAAAAAAAAAMUY5zqUAQAAlAEAACEAAAAAAAAAAAAAAKSByXUAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACSt0d+7A0AAOwNAAArAAAAAAAAAAAAAACkgZx3AABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjcvc3JjL2Vudi1vcHRpb25zLmpzUEsBAh4DCgAAAAAAAAAAAPxwaTHfBwAA3wcAABwAAAAAAAAAAAAAAKSB0YUAAEBlbmRvL2Vycm9ycy12MS4yLjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAfl1VK6UQAAClEAAAIwAAAAAAAAAAAAAApIHqjQAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL0UuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKQAAAAAAAAAAAAAApIHQngAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL2V4cG9ydHMuanNQSwECHgMKAAAAAAAAAAAAECDjrKoMAACqDAAAJwAAAAAAAAAAAAAApIFhoAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL2xvY2FsLmpzUEsBAh4DCgAAAAAAAAAAAAGOcEzpDAAA6QwAADUAAAAAAAAAAAAAAKSBUK0AAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzUEsBAh4DCgAAAAAAAAAAABlsu0UzAwAAMwMAACkAAAAAAAAAAAAAAKSBjLoAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9uby1zaGltLmpzUEsBAh4DCgAAAAAAAAAAAIaopsdfCQAAXwkAAC0AAAAAAAAAAAAAAKSBBr4AAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy90cmFjay10dXJucy5qc1BLAQIeAwoAAAAAAAAAAAA/8Oc6VgIAAFYCAAAjAAAAAAAAAAAAAACkgbDHAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy91dGlscy5qc1BLAQIeAwoAAAAAAAAAAAALSpg4VgIAAFYCAAAdAAAAAAAAAAAAAACkgUfKAABAZW5kby9mYXItdjEuMS44L3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAChKaq8PwoAAD8KAAAgAAAAAAAAAAAAAACkgdjMAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACXqL8lVAYAAFQGAAAoAAAAAAAAAAAAAACkgVXXAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvY29weUFycmF5LmpzUEsBAh4DCgAAAAAAAAAAADLPSrUpCAAAKQgAACkAAAAAAAAAAAAAAKSB790AAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9jb3B5UmVjb3JkLmpzUEsBAh4DCgAAAAAAAAAAAHAi5XpWCgAAVgoAAC4AAAAAAAAAAAAAAKSBX+YAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9kZWVwbHlGdWxmaWxsZWQuanNQSwECHgMKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAAAAAAAAAAAApIEB8QAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2Vycm9yLmpzUEsBAh4DCgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAAAAAAAAAAAAAKSBdwMBAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9pdGVyLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAAAAAAAAAAAApIFPCQEAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL21ha2UtZmFyLmpzUEsBAh4DCgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAAAAAAAAAAAAAKSB1RoBAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9tYWtlVGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAA0ikncUFQAAFBUAADAAAAAAAAAAAAAAAKSBnB8BAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAAAAAAAAAAACkgf40AQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvcGFzc1N0eWxlT2YuanNQSwECHgMKAAAAAAAAAAAAUoR7eqYXAACmFwAAKAAAAAAAAAAAAAAApIH2WQEAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3JlbW90YWJsZS5qc1BLAQIeAwoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAAAAAAAAAAACkgeJxAQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvc2FmZS1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAJiXXyyyBwAAsgcAACUAAAAAAAAAAAAAAKSBsX4BAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9zdHJpbmcuanNQSwECHgMKAAAAAAAAAAAAZj9ZlfwJAAD8CQAAJQAAAAAAAAAAAAAApIGmhgEAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3N5bWJvbC5qc1BLAQIeAwoAAAAAAAAAAABg1WOeFAcAABQHAAAlAAAAAAAAAAAAAACkgeWQAQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAAAAAAAAAAAAAKSBPJgBAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAAAAAAAAAAAAAKSBgaEBAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADSAaLEQgYAAEIGAAAhAAAAAAAAAAAAAACkgQ2jAQBAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAs11bRlUCAABVAgAAKgAAAAAAAAAAAAAApIGOqQEAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy9pcy1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAPpm8JGcBwAAnAcAACkAAAAAAAAAAAAAAKSBK6wBAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9zcmMvbWVtby1yYWNlLmpzUEsBAh4DCgAAAAAAAAAAAJxtxLJ8BQAAfAUAADQAAAAAAAAAAAAAAKSBDrQBAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJQAAAAAAAAAAAAAApIHcuQEAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy90eXBlcy5qc1BLBQYAAAAAIwAjALQLAABpuwEAAAA=", + "endoZipBase64Sha512": "6e51d6d709f732b348d7c1f671e8871808ee75c69c31726c2513d3b2c7a15a56698fb9092f5ed54bcc7b13555637db69dfcf5980b366551310268bc8ea5a6ec7" +} \ No newline at end of file diff --git a/agoric/a3p-integration/proposals/k:kread/upgrade-kread/upgrade-kread-permit.json b/agoric/a3p-integration/proposals/k:kread/upgrade-kread/upgrade-kread-permit.json new file mode 100644 index 000000000..ec39af0ba --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/upgrade-kread/upgrade-kread-permit.json @@ -0,0 +1,18 @@ +{ + "consume": { + "kreadKit": true, + "kreadCommitteeCreatorFacet": true, + "agoricNamesAdmin": "makeCoreProposalBehavior", + "vatAdminSvc": "makeCoreProposalBehavior", + "zoe": "makeCoreProposalBehavior" + }, + "evaluateBundleCap": "makeCoreProposalBehavior", + "installation": { + "produce": "makeCoreProposalBehavior" + }, + "modules": { + "utils": { + "runModuleBehaviors": "makeCoreProposalBehavior" + } + } +} \ No newline at end of file diff --git a/agoric/a3p-integration/proposals/k:kread/upgrade-kread/upgrade-kread-plan.json b/agoric/a3p-integration/proposals/k:kread/upgrade-kread/upgrade-kread-plan.json new file mode 100644 index 000000000..b34ab82f4 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/upgrade-kread/upgrade-kread-plan.json @@ -0,0 +1,12 @@ +{ + "name": "upgrade-kread", + "script": "upgrade-kread.js", + "permit": "upgrade-kread-permit.json", + "bundles": [ + { + "entrypoint": "@agoric/vats/src/proposals/upgrade-kread-proposal.js", + "bundleID": "b1-6e51d6d709f732b348d7c1f671e8871808ee75c69c31726c2513d3b2c7a15a56698fb9092f5ed54bcc7b13555637db69dfcf5980b366551310268bc8ea5a6ec7", + "fileName": "/Users/jorgelopes/.agoric/cache/b1-6e51d6d709f732b348d7c1f671e8871808ee75c69c31726c2513d3b2c7a15a56698fb9092f5ed54bcc7b13555637db69dfcf5980b366551310268bc8ea5a6ec7.json" + } + ] +} diff --git a/agoric/a3p-integration/proposals/k:kread/upgrade-kread/upgrade-kread.js b/agoric/a3p-integration/proposals/k:kread/upgrade-kread/upgrade-kread.js new file mode 100644 index 000000000..76c8364d7 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/upgrade-kread/upgrade-kread.js @@ -0,0 +1,161 @@ +// This is generated by writeCoreEval; please edit! +/* eslint-disable */ + +const manifestBundleRef = {bundleID:"b1-6e51d6d709f732b348d7c1f671e8871808ee75c69c31726c2513d3b2c7a15a56698fb9092f5ed54bcc7b13555637db69dfcf5980b366551310268bc8ea5a6ec7"}; +const getManifestCall = harden([ + "getManifestForUpgradeKread", +]); +const customManifest = { + upgradeKread: { + consume: { + kreadCommitteeCreatorFacet: true, + kreadKit: true, + }, + }, +}; + +// Make a behavior function and "export" it by way of script completion value. +// It is constructed by an anonymous invocation to ensure the absence of a global binding +// for makeCoreProposalBehavior, which may not be necessary but preserves behavior pre-dating +// https://github.com/Agoric/agoric-sdk/pull/8712 . +const behavior = (({ + manifestBundleRef, + getManifestCall: [manifestGetterName, ...manifestGetterArgs], + customManifest, + E, + log = console.info, + customRestoreRef, +}) => { + const { entries, fromEntries } = Object; + + /** + * Given an object whose properties may be promise-valued, return a promise + * for an analogous object in which each such value has been replaced with its + * fulfillment. + * This is a non-recursive form of endo `deeplyFulfilled`. + * + * @template T + * @param {{[K in keyof T]: (T[K] | Promise)}} obj + * @returns {Promise} + */ + const shallowlyFulfilled = async obj => { + if (!obj) { + return obj; + } + const awaitedEntries = await Promise.all( + entries(obj).map(async ([key, valueP]) => { + const value = await valueP; + return [key, value]; + }), + ); + return fromEntries(awaitedEntries); + }; + + const makeRestoreRef = (vatAdminSvc, zoe) => { + /** @type {(ref: import\('./externalTypes.js').ManifestBundleRef) => Promise>} */ + const defaultRestoreRef = async bundleRef => { + // extract-proposal.js creates these records, and bundleName is + // the optional name under which the bundle was installed into + // config.bundles + const bundleIdP = + 'bundleName' in bundleRef + ? E(vatAdminSvc).getBundleIDByName(bundleRef.bundleName) + : bundleRef.bundleID; + const bundleID = await bundleIdP; + const label = bundleID.slice(0, 8); + return E(zoe).installBundleID(bundleID, label); + }; + return defaultRestoreRef; + }; + + /** @param {ChainBootstrapSpace & BootstrapPowers & { evaluateBundleCap: any }} powers */ + const coreProposalBehavior = async powers => { + // NOTE: `powers` is expected to match or be a superset of the above `permits` export, + // which should therefore be kept in sync with this deconstruction code. + // HOWEVER, do note that this function is invoked with at least the *union* of powers + // required by individual moduleBehaviors declared by the manifest getter, which is + // necessary so it can use `runModuleBehaviors` to provide the appropriate subset to + // each one (see ./writeCoreEvalParts.js). + // Handle `powers` with the requisite care. + const { + consume: { vatAdminSvc, zoe, agoricNamesAdmin }, + evaluateBundleCap, + installation: { produce: produceInstallations }, + modules: { + utils: { runModuleBehaviors }, + }, + } = powers; + + // Get the on-chain installation containing the manifest and behaviors. + log('evaluateBundleCap', { + manifestBundleRef, + manifestGetterName, + vatAdminSvc, + }); + let bcapP; + if ('bundleName' in manifestBundleRef) { + bcapP = E(vatAdminSvc).getNamedBundleCap(manifestBundleRef.bundleName); + } else if ('bundleID' in manifestBundleRef) { + bcapP = E(vatAdminSvc).getBundleCap(manifestBundleRef.bundleID); + } else { + const keys = Reflect.ownKeys(manifestBundleRef).map(key => + typeof key === 'string' ? JSON.stringify(key) : String(key), + ); + const keysStr = `[${keys.join(', ')}]`; + throw Error( + `bundleRef must have own bundleName or bundleID, missing in ${keysStr}`, + ); + } + const bundleCap = await bcapP; + + const proposalNS = await evaluateBundleCap(bundleCap); + + // Get the manifest and its metadata. + log('execute', { + manifestGetterName, + bundleExports: Object.keys(proposalNS), + }); + const restoreRef = customRestoreRef || makeRestoreRef(vatAdminSvc, zoe); + const { + manifest, + options: rawOptions, + installations: rawInstallations, + } = await proposalNS[manifestGetterName]( + harden({ restoreRef }), + ...manifestGetterArgs, + ); + + // Await promises in the returned options and installations records. + const [options, installations] = await Promise.all( + [rawOptions, rawInstallations].map(shallowlyFulfilled), + ); + + // Publish the installations for our dependencies. + const installationEntries = entries(installations || {}); + if (installationEntries.length > 0) { + const installAdmin = E(agoricNamesAdmin).lookupAdmin('installation'); + await Promise.all( + installationEntries.map(([key, value]) => { + produceInstallations[key].reset(); + produceInstallations[key].resolve(value); + return E(installAdmin).update(key, value); + }), + ); + } + + // Evaluate the manifest. + return runModuleBehaviors({ + // Remember that `powers` may be arbitrarily broad. + allPowers: powers, + behaviors: proposalNS, + manifest: customManifest || manifest, + makeConfig: (name, _permit) => { + log('coreProposal:', name); + return { options }; + }, + }); + }; + + return coreProposalBehavior; +})({ manifestBundleRef, getManifestCall, customManifest, E }); +behavior; diff --git a/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/b1-09b92c35ba08e8d3625eb04796ab70cd02cf9ef3bfd79e8f256b419afb644e4a9e9e4b06c068abe2ecc2769a53a55024a27851ec7bfeb13e79b3781d0b961597.json b/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/b1-09b92c35ba08e8d3625eb04796ab70cd02cf9ef3bfd79e8f256b419afb644e4a9e9e4b06c068abe2ecc2769a53a55024a27851ec7bfeb13e79b3781d0b961597.json new file mode 100644 index 000000000..c77244f08 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/b1-09b92c35ba08e8d3625eb04796ab70cd02cf9ef3bfd79e8f256b419afb644e4a9e9e4b06c068abe2ecc2769a53a55024a27851ec7bfeb13e79b3781d0b961597.json @@ -0,0 +1,5 @@ +{ + "moduleFormat": "endoZipBase64", + "endoZipBase64": "UEsDBAoAAAAAAAAAAACNxhnflG8AAJRvAAAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgIm1vZHVsZSI6ICIuL3NyYy9wcm9wb3NhbHMvdXBncmFkZS16b2UtcHJvcG9zYWwuanMiCiAgfSwKICAiY29tcGFydG1lbnRzIjogewogICAgIkBhZ29yaWMvdmF0cy12MC4xNS4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3ZhdHMiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Fnb3JpYy8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9iYW5rL3YxYmV0YTEvcXVlcnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL2JhbmsvdjFiZXRhMS9xdWVyeS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvYmFuay92MWJldGExL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9iYW5rL3YxYmV0YTEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL2Rpc3RyaWJ1dGlvbi92MWJldGExL3F1ZXJ5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9kaXN0cmlidXRpb24vdjFiZXRhMS9xdWVyeS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvZGlzdHJpYnV0aW9uL3YxYmV0YTEvdHguanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL2Rpc3RyaWJ1dGlvbi92MWJldGExL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9zdGFraW5nL3YxYmV0YTEvcXVlcnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL3N0YWtpbmcvdjFiZXRhMS9xdWVyeS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3Mvc3Rha2luZy92MWJldGExL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9zdGFraW5nL3YxYmV0YTEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL3R4L3YxYmV0YTEvdHguanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL3R4L3YxYmV0YTEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vZ29vZ2xlLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vZ29vZ2xlLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vZ29vZ2xlL3Byb3RvYnVmL2FueS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9nb29nbGUvcHJvdG9idWYvYW55LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy9hcHBsaWNhdGlvbnMvaW50ZXJjaGFpbl9hY2NvdW50cy92MS9wYWNrZXQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjL2FwcGxpY2F0aW9ucy9pbnRlcmNoYWluX2FjY291bnRzL3YxL3BhY2tldC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvYXBwbGljYXRpb25zL3RyYW5zZmVyL3YxL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9hcHBsaWNhdGlvbnMvdHJhbnNmZXIvdjEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjL2NvcmUvY2hhbm5lbC92MS9jaGFubmVsLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9jb3JlL2NoYW5uZWwvdjEvY2hhbm5lbC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvY29yZS9jb25uZWN0aW9uL3YxL2Nvbm5lY3Rpb24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjL2NvcmUvY29ubmVjdGlvbi92MS9jb25uZWN0aW9uLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2ljcS8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2ljcS92MS8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2ljcS92MS9wYWNrZXQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWNxL3YxL3BhY2tldC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vc3dpbmdzZXQvbXNncy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvc3dpbmdzZXQvbXNncy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9zd2luZ3NldC9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvc3dpbmdzZXQvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vc3dpbmdzZXQvc3dpbmdzZXQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljL3N3aW5nc2V0L3N3aW5nc2V0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3RlbmRlcm1pbnQvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi90ZW5kZXJtaW50LyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vdGVuZGVybWludC9hYmNpL3R5cGVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL3RlbmRlcm1pbnQvYWJjaS90eXBlcy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by92c3RvcmFnZS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvdnN0b3JhZ2UvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9nb3Zlcm5hbmNlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbmV0d29yayI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25ldHdvcmstdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvZXhwb3J0ZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zd2luZ3NldC12YXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zd2luZ3NldC12YXQtdjAuMzIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdGltZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3RpbWUtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXRzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0cy12MC4xNS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZvdyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3Zvdy12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvem9lU2VydmljZS96b2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kdXJhYmxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL3ZpcnR1YWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3NvdXJjZS1tYXAtbm9kZS1wb3dlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NvdXJjZS1tYXAtbm9kZS1wb3dlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9zb3VyY2UtbWFwLW5vZGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NvdXJjZS1tYXAtbm9kZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgImltcG9ydC1tZXRhLXJlc29sdmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiaW1wb3J0LW1ldGEtcmVzb2x2ZS12Mi4yLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgImplc3NpZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbWFpbi5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcm9wb3NhbHMvdXBncmFkZS16b2UtcHJvcG9zYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Byb3Bvc2Fscy91cGdyYWRlLXpvZS1wcm9wb3NhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ2YmRlMWZiOGVlMmMwYmMxOTNkM2FmYzU3MWZhZTA4MmM2NjIxM2E2YzBkYmIxY2JlOTg4NmVhY2IzOTg2ODVmZjk0NzU4MTMyZmU3Zjg3NGFhODViZTViZDg4MThjNGQ2YTcyZmRmNzRlYjc1MTQ4YTZkMjQzYzBkZmEwN2ViIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vudi1vcHRpb25zIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQxNzc2ZWViMjFiMWM1NTFkYTNmOWI4ZGNkZjVhYmQ4OGJjYmY1ZjhlMzhjYjA0ZWRhYmM4Y2I5NjRiYjk3NTE4ZmY0Y2FjYjc0M2U4YWJiYWFjMjI4NjE2ODE1ZmJlNDBlODZiZTJkN2Q0MjgxNTc4OTUyZjhhYTg2NmExYjk3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vudi1vcHRpb25zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbnYtb3B0aW9ucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFkYjE1ZDRiNjY5MzMyNWQzNDUyMzgwY2E2MmRkOTdhN2FlNGQwMzNiZjY3NTNhYmY0MTc1YmY4ZjJhNDA1ZGNjOTNkODc3ZGRkZWMxMGE3YmU1YjRmYzMyMzY3ZDcyZTNlNzY4MDBmN2Y0OGM2MDhkYTQ1M2MzZDJkMTE0NDg1IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9lcnJvcnMtdjEuMi43IjogewogICAgICAibmFtZSI6ICJAZW5kby9lcnJvcnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2Fzc2VydC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Fzc2VydC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb21wYXJ0bWVudC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbXBhcnRtZW50LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbnNvbGUtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb25zb2xlLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93bi1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xvY2tkb3duLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAic2VzL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MWY4ZjRmNTdmNGY2ZTJjOGI1ZDI5NjczNjdmZmU0ZDA3YzljYjE3NjFhN2M1Yzg4NDg2ZjRiMjdhNGUzZmU1N2QyOTg0YTU5MDgzY2Y1Mjk3MTkxOGZmOTllYmZhNmI4MmE4YzBkOWM1ZDM0ZWM1ZDk0OGIxNWM5OWQyZWIxMyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjlkM2U5MTA0YjZlMjViMDJhNzM0OTc5YWQ0ZjE5Nzg2YmE4NzE2OWU4MGY4YjBkOGE1MTE2NzgxZDkxNmNhMWNhYTBjY2FhZDllY2IzYTQ1YWYxMjAxNTYyZjAwNWVhOGEwYTJlMGFkMjYyMmMwN2E5NThlYzg3ZmU0NTgxMDliIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sb2NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbG9jYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhOTVkZjRjYTMyODIwOTY4ZjEyMDNhYjVlYTI3MmI5NjFhZTMxMTYzNDA3MGNmMTUyMGU4YWFhNjJjYThlYTIyMjk3MDQ0YWM0ZTg4OTI2NzRmYmI5MWEzNDNhNzY1MGRjYmFmNTNiN2M3NDUyMWFkNWU1NTZiOGYzM2EzM2E0ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjkxMTE0NmM4ZTA0NTIyNzAwZTIzYzkzOGU2YmE1NzBhYzdlYTFlOTE1ZDllN2M0ZGNiYzUzZmMwZjdhYjhhY2I4ZGQ3Y2ZjMDdjNTJlMDJmMmM2NTc0MDRlZTg5ZWY3MzExYTMyNzk0YTg3MTFhYTdhYjQzYTU0MjBiMzJjODgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm8tc2hpbS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm8tc2hpbS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5MjA1MWY2OTQ0MmRiMTNmOWUyYjZjMTlkZGQxODljNTFhYjIxYTg0MDQyMTAzMDFmOGQyNjFiM2IzMTk0OGJkNTBjYjZmODUyM2UwMzVjNGYzZGY3NjMxMTU4MjhmYzJlYWRjOWMyYjEyNzE3ZmEzOTM4ZmQ0ZjFkNzg0YjEwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYWNrLXR1cm5zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFjay10dXJucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgwY2JhNzU3OThiZGEzOTIwZDc1ZDY4NWRmMzgzYTZiYmEwNzE1ZTEzMjY0ODRjNjNhZjgxZWJkZTdlODRiMzg1ZjA3YTczNzdmYzUyZmMzYzgwZTgwMzFiYTdmOTFiNWJkMjVjODdjNDk5NDY5ZWExZDEzNzA3Nzc3OWFiMWU4IgogICAgICAgIH0sCiAgICAgICAgIi4vdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmZWEwNDExYjIxNmM3MTQxNTE0Mzk2NjY0ZjhmODIxM2FjZDExMmU5MzBjMGY0ZmFjMDM0MjdmNTczN2Q3MzdkMGU5NDZiNmNjNGM2MDg4NGQwNDA1N2I3N2Y4ODA4YTM5NjczNjg1OTU1ODg3MjQzNWVhZWVlZDJmMTMyNjQ3ZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZmFyLXYxLjEuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZmFyIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwNDM1M2MxZTI4MmM3ZjA4YTQ5ZDE2YWMyZWVhMDY5YTFjMzI1MzQwNWJlNjNkODU1YTgzOWIwOGI4MGQ5YmQzYzI3NDQ1YWUxZGEyYmMzMWJmNDYyMTNkNWIyZDQxNDM5MTE3Y2YxZWMwZjExYWYwMjQ3ZDk1NWE3NjE3NzU2IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGFzcy1zdHlsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZmFzdC1jaGVjay9hdmEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGZhc3QtY2hlY2svYXZhLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGliL2VzbS9hdmEtZmFzdC1jaGVjay5qcyIKICAgICAgICB9LAogICAgICAgICJAZmFzdC1jaGVjay9hdmEvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBmYXN0LWNoZWNrL2F2YS12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjk5MzJkNTRmNWI0MWFjN2IyNDFiMDQ0N2RlYmI1Zjc5MzU5YTRjYWM1MmQ3Y2I2ODQ1NTRkMjUxNTE5OWI5OWE0NWYwMWZlYzkyYWNhNDdhYTViNzE1OWU0ZWRiOTRhYzdjYzRiMWJhODYxNWIyMzk0NDI4ODFlZDg5MGZlMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29weUFycmF5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5QXJyYXkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZjA3YWI5ZDE3M2M1MDM4MzhlYzVhYzkzMDYxYjk3YmMxZTAyNzljNmJlM2M0ZDdiYTQ2YzFlOWFjZjQxYzBjOTgwMGRhZGI5YTI1YmI5ZTc5YmE3MjJhMGQ0MzQ0YmNjZmI5MGIyMGViNjdmMWNmOTA4NTg4NGYyYzcyZmJhYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5UmVjb3JkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5UmVjb3JkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjFjNDljYzZkNTc3YWFiMmJlYTc4ZDQ0M2NlOGRlNzEzOGE0OGFkZDAxOGEyMjE1NjRmYTE0NDRiMTVlYWE2OWI2MjIxNjExODA4NWVlMjY1NTUyZWU0OGM2ZWRmNmVhNTlhMDAzOGU4Mzc1ZTU0MTQ5ODJlMjEyYTg5MWZlMjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWVwbHlGdWxmaWxsZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4M2MwYmMwYmVjMTk0ZmQ5MTFiNDljODc5Mzk5ODg2ZGY2ZDY2ZGI3OWY3NTBkMjQzZDY2NWQ5YmFmYTFjY2M0NDcyZjg0MzM4NjQxYjBlMTg0Y2FjMzljNTc3ZGZhMTE1ZThiM2RiYmY2OTI3ZjliNzdiMGQ3MjgzNzRjNzA2ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZWNkMGUzZGVhNjRhOTE5MmM1NzhkMDc4YmFmZGE2OGQxNWYzYmY4YzVmN2Y3MmRlYTUzYmY2MDQyZWRlMjY2MmExYTMwZTVkNWRhNGYxNjI3NjRlNDExMTFkYjA2ZGE5YjRiMjVjNDNhOTE3OWRhMjYxMmFiMDZkOGE1ZTgzZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2l0ZXItaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFhOGQ3Y2UwNTFiZWM4NzU2NGU3YzRmNmFkMTIwMzYyNjk4MmY0MWEzMjM4YTUxMDI1ZmFhNTMxMDFkNjI3YTUzMDBjYmI0MDY2MWIzOGU4ZGIxMjAwMDMyMmQ3YWRmOTU5MmNmMGE1YmE3Y2Q2MzE2OWMyMTdiNDBiYzQ4YzMwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2UtZmFyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLWZhci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhlZGFiNTk2OGI2OTFhMjlhMmZkODU0Y2EzMzFiZDQ3NWUwZjQ3ZjU1NGJmMWY5ZGQ2N2NjMTdjZjI3YTEyYzlkNzY1NDZhZDZmYjZlMjllYjk5NjE1ZjQ0Y2I1ZjAxNTUxNDI4NmE5YWIyM2Y0NDhiYmM0NWIwODQxYzFkYWY5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2VUYWdnZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2VUYWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMDFmODJmOWI0MDY0M2Y1OWFkYzIwMmRhNzFhMDFhNTdhZjYwNDRmYTVkZTlmOWJmODkzYjkzMjc5Y2ExYTE1Y2JhMTBiZmQ1NmMwYWQ5MzAwNjM3YWUyZDYyZDA4ZWI4M2JhNzA2M2JhODA1ZGZkMWJlYWYxMjRiYzJmZWEyMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZTU1NjA0N2VmMDMxZGI0MzZjODRmYTMyOGIzNzNmYjQ4YmE5ZTQ2NmVjMjQyZDQwZjFmZjJmZmIyZTZmZTBkMjkwY2JjY2QwOTA1ZDFmMjgxMDk2ZGRkNTM3YjgwY2ZhZDAxNjdjYTI2MTk1MzU5OTdhMjMyODhiMzY4OGNjMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlT2YuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDJhOWVmYmIyODU2ZTZmZmMwZjM4OWM4NWRmZGRhODRlNjExYzNiZjQ3YmE0NzgwZjIwNzgxYjk2MzdiNjAyMjFiZTE0ODAzOGE4MDlmMmQ2ZmI3NmUyZGU2NDY5ZmRhZTYzYzAwNTI1NmJhNTRlNDk2ZTc0ZmJlZDUzOTdhZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yZW1vdGFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JlbW90YWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM5MTAwOTM4NzQ3NWNiOTczN2JjOGFkNTBmOThhNDg4YzhhNTExMTAzMzI2YjUzYjQyOTQ5MTdhZDY4Njg4M2EwYTRiYWQ2ZGIwNmE5NGMwNTA2YmVmMTRhY2JhZGYzMDg1MjhiOTFkYTI0YjJhNTBlOTU4MWEzZWNhOTIwNzU3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3NhZmUtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2FmZS1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWQ2Y2JmYjNjM2Y5ZTE4YTAwNTY4N2M1OTdmMWVmYjc3OTVkYjNhYzM2OTc0NDdjYWEyYjI4MjRjYzFiYWIxNGNiMWI4YTFhNzA2YWRhMTI5ZDc5OGIwYTkyZDA5YTkxM2YwODNiZmM3YjYzNjc2ZTcxMzhmNWZiZmU5YzBjODUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RyaW5nLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdHJpbmcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzOWIyMTAxNzFkZmYyOTZmMzhiNDU3NzA2YWIwMjFlYWJiNzU2MGUyNThkOTNmZmY2OGI1NmU5NmM2YzJhNmMyYzlkOTcxNmI5NjYwZWE5OGNlZDlmZjRhYjZkZjAyYWEwMWI4ZjgxODZiNzA2ZTVmNzBiYTI3ZGZlOTVlZDg5ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zeW1ib2wuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N5bWJvbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY4NWM0ZWFjYTc5ZTgxY2U3MzBjNWNjYWM0MTIwZjkyYmY0OGIzMTdmMzRkODM1YWQyMTM5ZWM3MTExNTU5M2NlNGU5ZjlhYzY4ZDc3YjlkZDZiNmIzOTc1YmYxNjZiZjQxZGUzODI0ZWVjZmU1YmIxNjllNTcxYjMzYmFmZWMyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdGFnZ2VkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2RkMGNlOTJlZThiNWU2ZDAwOTdhNTc4ODI0MmE4NzllNzI2YzY3YzU0ZmZiMGUzYmE0ZWFlMzk5NjQxZGM0ZDFhYzVlNTYxOWY1ZjU2NmU2YTNlZGQ4NDZjZjg3M2I1YzFjNTk3ODViMjUxZmQyMDRlOTA4OWIxN2FjMDE0OTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMyOWZjMTU0MDUzNzcxNWRmODU0YTM4YTVlNDVhZTZkMjI4NmU5ZmIxNTFjNTI4NTZjOWI5ZGZjMWUyMmNkNjMwOWVkMzIyMjMwZTZmZWNjNmEyNDhhNmIzNDUwYTNmZjE2NGE2NzRlZWZmODI4YzkxNWVjNDgyMDNiZGM2NjQ3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hc3NlcnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29tcGFydG1lbnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb21wYXJ0bWVudC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb25zb2xlLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29uc29sZS1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24tc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sb2NrZG93bi1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODM3NjUwNWY2OGJkYzNjYjk0ZTY1NzY0ZTJmZTMyZWNlOTAyNmExMzc3ZTcwNDFlZWFkYzc1MDE4MGE5N2U5ODJmN2M0YWI4ZjczMTg4ODQ4NDJkZDIyNTg1MjlkYjQyNTQ0ZjU4YmQwOTkwOTM5NDhiMGM1YzM0MGI4NmVlOWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdjNjJiNTgwNWM0MjU1NzZiZDExYmEzODcxMDZlNzJhZDY5NWE3NDIyM2Y1OGQ2Zjg5MWNiZjE4YTY2Y2U0MjY4MTFiMTJmMzhkYjEzODQ4NzcwYzkyZmU5YTgzNDczYjQyZjE3MGRmNDZjYjg2ZDI1NDg4YjdmNWZkMWQ5ZWE0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lbW8tcmFjZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWVtby1yYWNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDYyMjVmMWI1M2RmMWIyOGIzOWUzNzcyN2JhMGRmNDkxNThjMTI3MmJmYzExNTFlM2VkOTc4ZGU1ZTgwYmI1MzU4MGY5MDVhMzcyNTg2MjJiYWMzZmM4ZjgzZTA5MDQxZWJmNzQxZDgwNTZhZmZiNjFkMmI2MWQyZGI0YzNlYjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2E4YzUyMzQ3NWVlMDVkZTI4MDFiZDM2ZDk3NjdkNjgyNWFhNjBkZGEwNGQ0N2U0NDA0OWVjNGY0OTA4NjM2MWEzOWUzZmIxOThmYWM4NDhjMzU2MGZmNWY1NWM3NzM1MjI1NTM1ZWNhNTYzZWVhMjc2NzViMThhNGY5NDc2ZjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9UEsDBAoAAAAAAAAAAADOO96XzAQAAMwEAAA6AAAAQGFnb3JpYy92YXRzLXYwLjE1LjEvc3JjL3Byb3Bvc2Fscy91cGdyYWRlLXpvZS1wcm9wb3NhbC5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiXSwiZXhwb3J0cyI6WyJnZXRNYW5pZmVzdEZvclVwZ3JhZGluZ1pvZSIsInVwZ3JhZGVab2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1cGdyYWRlWm9lPWFzeW5jKFxue2NvbnN1bWU6e3ZhdEFkbWluU3ZjLHZhdFN0b3JlfX0sXG5vcHRpb25zKT0+XG57XG5jb25zdHt6b2VSZWZ9PW9wdGlvbnMub3B0aW9ucztcblxuYXNzZXJ0KHpvZVJlZi5idW5kbGVJRCk7XG5jb25zdCB6b2VCdW5kbGVDYXA9YXdhaXQgRSh2YXRBZG1pblN2YykuZ2V0QnVuZGxlQ2FwKHpvZVJlZi5idW5kbGVJRCk7XG5jb25zb2xlLmxvZyggYFpPRSBCVU5ETEUgSUQ6IGAsem9lUmVmLmJ1bmRsZUlEKTtcblxuY29uc3R7YWRtaW5Ob2RlfT1hd2FpdCBFKHZhdFN0b3JlKS5nZXQoJ3pvZScpO1xuXG5hd2FpdCBFKGFkbWluTm9kZSkudXBncmFkZSh6b2VCdW5kbGVDYXAse30pO1xuIH07JGjNj19vbmNlLnVwZ3JhZGVab2UodXBncmFkZVpvZSk7XG5cbmNvbnN0ICAgICAgICBnZXRNYW5pZmVzdEZvclVwZ3JhZGluZ1pvZT0oX3Bvd2Vycyx7em9lUmVmfSk9Pih7XG5tYW5pZmVzdDp7XG5bdXBncmFkZVpvZS5uYW1lXTp7XG5jb25zdW1lOntcbnZhdEFkbWluU3ZjOid2YXRBZG1pblN2YycsXG52YXRTdG9yZTondmF0U3RvcmUnfSxcblxucHJvZHVjZTp7fX19LFxuXG5cbm9wdGlvbnM6e3pvZVJlZn19KTskaM2PX29uY2UuZ2V0TWFuaWZlc3RGb3JVcGdyYWRpbmdab2UoZ2V0TWFuaWZlc3RGb3JVcGdyYWRpbmdab2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidXBncmFkZVpvZSI6WyJ1cGdyYWRlWm9lIl0sImdldE1hbmlmZXN0Rm9yVXBncmFkaW5nWm9lIjpbImdldE1hbmlmZXN0Rm9yVXBncmFkaW5nWm9lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMUY5zqUAQAAlAEAACEAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjcvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9lbnYtb3B0aW9ucy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW52LW9wdGlvbnMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkrdHfuwNAADsDQAAKwAAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNy9zcmMvZW52LW9wdGlvbnMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiLCJnZXRFbnZpcm9ubWVudE9wdGlvbiIsImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiLCJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuXG5jb25zdHtmcmVlemV9PU9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuXG4vL1xuLy9cbmNvbnN0IHVuY3VycnlUaGlzPVxuKGZuKT0+XG4ocmVjZWl2ZXIsLi4uYXJncyk9PlxuYXBwbHkoZm4scmVjZWl2ZXIsYXJncyk7XG5jb25zdCBhcnJheVB1c2g9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuY29uc3QgYXJyYXlJbmNsdWRlcz11bmN1cnJ5VGhpcyhBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xuY29uc3Qgc3RyaW5nU3BsaXQ9dW5jdXJyeVRoaXMoU3RyaW5nLnByb3RvdHlwZS5zcGxpdCk7XG5cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbmNvbnN0IEZhaWw9KGxpdGVyYWxzLC4uLmFyZ3MpPT57XG5sZXQgbXNnPWxpdGVyYWxzWzBdO1xuZm9yKGxldCBpPTA7aTxhcmdzLmxlbmd0aDtpKz0xKXtcbm1zZz0gYCR7bXNnfSR7YXJnc1tpXX0ke2xpdGVyYWxzW2krMV19YDtcbiB9XG50aHJvdyBFcnJvcihtc2cpO1xuIH07XG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW52aXJvbm1lbnRDYXB0b3I9KGFHbG9iYWwsZHJvcE5hbWVzPWZhbHNlKT0+e1xuY29uc3QgY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPVtdO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBnZXRFbnZpcm9ubWVudE9wdGlvbj0oXG5vcHRpb25OYW1lLFxuZGVmYXVsdFNldHRpbmcsXG5vcHRPdGhlclZhbHVlcz11bmRlZmluZWQpPT5cbntcbnR5cGVvZiBvcHRpb25OYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWUgJHtxKG9wdGlvbk5hbWUpfSBtdXN0IGJlIGEgc3RyaW5nLmA7XG50eXBlb2YgZGVmYXVsdFNldHRpbmc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gZGVmYXVsdCBzZXR0aW5nICR7cShcbmRlZmF1bHRTZXR0aW5nKVxuIH0gbXVzdCBiZSBhIHN0cmluZy5gO1xuXG4vKiAgICAgICAgICAgICAgICAgKi9cbmxldCBzZXR0aW5nPWRlZmF1bHRTZXR0aW5nO1xuY29uc3QgZ2xvYmFsUHJvY2Vzcz1hR2xvYmFsLnByb2Nlc3N8fHVuZGVmaW5lZDtcbmNvbnN0IGdsb2JhbEVudj1cbnR5cGVvZiBnbG9iYWxQcm9jZXNzPT09J29iamVjdCcmJmdsb2JhbFByb2Nlc3MuZW52fHx1bmRlZmluZWQ7XG5pZih0eXBlb2YgZ2xvYmFsRW52PT09J29iamVjdCcpe1xuaWYob3B0aW9uTmFtZSBpbiBnbG9iYWxFbnYpe1xuaWYoIWRyb3BOYW1lcyl7XG5hcnJheVB1c2goY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzLG9wdGlvbk5hbWUpO1xuIH1cbmNvbnN0IG9wdGlvblZhbHVlPWdsb2JhbEVudltvcHRpb25OYW1lXTtcbi8vXG50eXBlb2Ygb3B0aW9uVmFsdWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gbmFtZWQgJHtxKFxub3B0aW9uTmFtZSlcbiB9LCBpZiBwcmVzZW50LCBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIHN0cmluZyB2YWx1ZSwgZ290ICR7cShcbm9wdGlvblZhbHVlKVxuIH1gO1xuc2V0dGluZz1vcHRpb25WYWx1ZTtcbiB9XG4gfVxub3B0T3RoZXJWYWx1ZXM9PT11bmRlZmluZWR8fFxuc2V0dGluZz09PWRlZmF1bHRTZXR0aW5nfHxcbmFycmF5SW5jbHVkZXMob3B0T3RoZXJWYWx1ZXMsc2V0dGluZyl8fFxuRmFpbCBgVW5yZWNvZ25pemVkICR7cShvcHRpb25OYW1lKX0gdmFsdWUgJHtxKFxuc2V0dGluZylcbiB9LiBFeHBlY3RlZCBvbmUgb2YgJHtxKFtkZWZhdWx0U2V0dGluZywuLi5vcHRPdGhlclZhbHVlc10pfWA7XG5yZXR1cm4gc2V0dGluZztcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdD0ob3B0aW9uTmFtZSk9PntcbmNvbnN0IG9wdGlvbj1nZXRFbnZpcm9ubWVudE9wdGlvbihvcHRpb25OYW1lLCcnKTtcbnJldHVybiBmcmVlemUob3B0aW9uPT09Jyc/W106c3RyaW5nU3BsaXQob3B0aW9uLCcsJykpO1xuIH07XG5mcmVlemUoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCk7XG5cbmNvbnN0IGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXM9KG9wdGlvbk5hbWUsZWxlbWVudCk9PlxuYXJyYXlJbmNsdWRlcyhnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KG9wdGlvbk5hbWUpLGVsZW1lbnQpO1xuXG5jb25zdCBnZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXM9KCk9PntcbnJldHVybiBmcmVlemUoWy4uLmNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc10pO1xuIH07XG5mcmVlemUoZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzKTtcblxucmV0dXJuIGZyZWV6ZSh7XG5nZXRFbnZpcm9ubWVudE9wdGlvbixcbmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QsXG5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzLFxuZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRW52aXJvbm1lbnRDYXB0b3IobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcbmZyZWV6ZShtYWtlRW52aXJvbm1lbnRDYXB0b3IpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAge1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc309XG5tYWtlRW52aXJvbm1lbnRDYXB0b3IoZ2xvYmFsVGhpcyx0cnVlKTskaM2PX29uY2UuZ2V0RW52aXJvbm1lbnRPcHRpb24oZ2V0RW52aXJvbm1lbnRPcHRpb24pOyRozY9fb25jZS5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpOyRozY9fb25jZS5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVudmlyb25tZW50Q2FwdG9yIjpbIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbiI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbiJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IjpbImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiXSwiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPxwaTHfBwAA3wcAABwAAABAZW5kby9lcnJvcnMtdjEuMi43L2luZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJGYWlsIiwiWCIsImFubm90YXRlRXJyb3IiLCJhc3NlcnQiLCJiIiwiYmFyZSIsIm1ha2VFcnJvciIsIm5vdGUiLCJxIiwicXVvdGUiLCJyZWRhY3RlZCIsInRocm93UmVkYWN0ZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG5cbmNvbnN0IGdsb2JhbEFzc2VydD1nbG9iYWxUaGlzLmFzc2VydDtcblxuaWYoZ2xvYmFsQXNzZXJ0PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQsIGltcG9ydCAnc2VzJyBiZWZvcmUgJ0BlbmRvL2Vycm9ycydgKTtcblxuIH1cblxuY29uc3QgbWlzc2luZz0vKiAgICAgICAgICAgICAgICAqL1tcbid0eXBlb2YnLFxuJ2Vycm9yJyxcbidmYWlsJyxcbidlcXVhbCcsXG4nc3RyaW5nJyxcbidub3RlJyxcbidkZXRhaWxzJyxcbidGYWlsJyxcbidxdW90ZScsXG4vL1xuLy9cbi8vXG4vL1xuJ21ha2VBc3NlcnQnXS5cbmZpbHRlcigobmFtZSk9Pmdsb2JhbEFzc2VydFtuYW1lXT09PXVuZGVmaW5lZCk7XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQgbWV0aG9kcyAke21pc3Npbmcuam9pbihcbicsICcpXG4gfWApO1xuXG4gfVxuXG4vL1xuLy9cbi8vXG5jb25zdHtcbmJhcmUsXG5kZXRhaWxzOnJlZGFjdGVkLFxuZXJyb3I6bWFrZUVycm9yLFxuRmFpbDp0aHJvd1JlZGFjdGVkLFxubWFrZUFzc2VydDpfb21pdHRlZE1ha2VBc3NlcnQsXG5ub3RlLFxucXVvdGUsXG4uLi5hc3NlcnRpb25zfT1cbmdsb2JhbEFzc2VydDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbiRozY9fb25jZS5yZWRhY3RlZChyZWRhY3RlZCk7JGjNj19vbmNlLm1ha2VFcnJvcihtYWtlRXJyb3IpOyRozY9fb25jZS50aHJvd1JlZGFjdGVkKHRocm93UmVkYWN0ZWQpOyRozY9fb25jZS5ub3RlKG5vdGUpOyRozY9fb25jZS5xdW90ZShxdW90ZSk7Y29uc3QgYXNzZXJ0PSh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk9PlxuZ2xvYmFsQXNzZXJ0KHZhbHVlLG9wdERldGFpbHMsZXJyQ29udHJ1Y3RvcixvcHRpb25zKTskaM2PX29uY2UuYXNzZXJ0KGFzc2VydCk7XG5PYmplY3QuYXNzaWduKGFzc2VydCxhc3NlcnRpb25zKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgYmFyZU9yUXVvdGU9YmFyZXx8cXVvdGU7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYmFyZU9yUXVvdGUoYmFyZU9yUXVvdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVkYWN0ZWQiOlsicmVkYWN0ZWQiXSwiWCI6WyJyZWRhY3RlZCJdLCJtYWtlRXJyb3IiOlsibWFrZUVycm9yIl0sInRocm93UmVkYWN0ZWQiOlsidGhyb3dSZWRhY3RlZCJdLCJGYWlsIjpbInRocm93UmVkYWN0ZWQiXSwibm90ZSI6WyJub3RlIl0sImFubm90YXRlRXJyb3IiOlsibm90ZSJdLCJxdW90ZSI6WyJxdW90ZSJdLCJxIjpbInF1b3RlIl0sImFzc2VydCI6WyJhc3NlcnQiXSwiYmFyZSI6WyJiYXJlT3JRdW90ZSJdLCJiIjpbImJhcmVPclF1b3RlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAH5dVSulEAAApRAAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvRS5qc3siaW1wb3J0cyI6WyIuL3RyYWNrLXR1cm5zLmpzIiwiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCB0cmFja1R1cm5zLG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcjskaM2PX2ltcG9ydHMoW1tcIi4vdHJhY2stdHVybnMuanNcIiwgW1tcInRyYWNrVHVybnNcIiwgWyRozY9fYSA9PiAodHJhY2tUdXJucyA9ICRozY9fYSldXV1dLFtcIi4vbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbW1wibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyXCIsIFskaM2PX2EgPT4gKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuY29uc3R7ZGV0YWlsczpYLHF1b3RlOnEsRmFpbCxlcnJvcjptYWtlRXJyb3J9PWFzc2VydDtcbmNvbnN0e2Fzc2lnbixjcmVhdGV9PU9iamVjdDtcblxuLypcblxuICovXG5cbmNvbnN0IG9uU2VuZD1tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIoJ0VORE9fU0VORF9CUkVBS1BPSU5UUycpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcj17XG5zZXQoX3RhcmdldCxfcHJvcCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5pc0V4dGVuc2libGUoX3RhcmdldCl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbnNldFByb3RvdHlwZU9mKF90YXJnZXQsX3ZhbHVlKXtcbnJldHVybiBmYWxzZTtcbiB9LFxuZGVsZXRlUHJvcGVydHkoX3RhcmdldCxfcHJvcCl7XG5yZXR1cm4gZmFsc2U7XG4gfX07XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVByb3h5SGFuZGxlcj0ocmVjaXBpZW50LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmdldDooX3RhcmdldCxwcm9wZXJ0eUtleSxyZWNlaXZlcik9PntcbnJldHVybiBoYXJkZW4oXG57XG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuaWYodGhpcyE9PXJlY2VpdmVyKXtcbi8vXG5yZXR1cm4gSGFuZGxlZFByb21pc2UucmVqZWN0KFxubWFrZUVycm9yKFxuWCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EocHJvcGVydHlLZXkpfVwiIG1ldGhvZCBvZiBFKCR7cShcbnJlY2lwaWVudClcbiB9KWApKTtcblxuXG4gfVxuXG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5hcHBseU1ldGhvZChyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG4gfVxuLy9cbn1bcHJvcGVydHlLZXldKTtcblxuIH0sXG5hcHBseTooX3RhcmdldCxfdGhpc0FyZyxhcmdBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ0FycmF5KTtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW3Byb3BlcnR5S2V5XSguLi5hcmdzKXtcbi8vXG50aGlzPT09cmVjZWl2ZXJ8fFxuRmFpbCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EoXG5wcm9wZXJ0eUtleSlcbiB9XCIgbWV0aG9kIG9mIEUuc2VuZE9ubHkoJHtxKHJlY2lwaWVudCl9KWA7XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbkhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kU2VuZE9ubHkocmVjaXBpZW50LHByb3BlcnR5S2V5LGFyZ3MpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ3NBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvblNlbmRPbmx5KHJlY2lwaWVudCxhcmdzQXJyYXkpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRUdldFByb3h5SGFuZGxlcj0oeCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5oYXM6KF90YXJnZXQsX3Byb3ApPT50cnVlLFxuZ2V0OihfdGFyZ2V0LHByb3ApPT5IYW5kbGVkUHJvbWlzZS5nZXQoeCxwcm9wKX0pO1xuXG5cbi8qXG5cbiAqL1xuY29uc3QgbWFrZUU9KEhhbmRsZWRQcm9taXNlKT0+e1xucmV0dXJuIGhhcmRlbihcbmFzc2lnbihcbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuLy9cbih4KT0+aGFyZGVuKG5ldyBQcm94eSgoKT0+eyB9LG1ha2VFUHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldDooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eShjcmVhdGUobnVsbCksbWFrZUVHZXRQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xucmVzb2x2ZTpIYW5kbGVkUHJvbWlzZS5yZXNvbHZlLFxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuc2VuZE9ubHk6KHgpPT5cbi8vXG5oYXJkZW4oXG5uZXcgUHJveHkoKCk9PnsgfSxtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbndoZW46KHgsb25mdWxmaWxsZWQsb25yZWplY3RlZCk9PlxuSGFuZGxlZFByb21pc2UucmVzb2x2ZSh4KS50aGVuKFxuLi4udHJhY2tUdXJucyhbb25mdWxmaWxsZWQsb25yZWplY3RlZF0pKX0pKTtcblxuXG5cblxuIH07XG5cbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDptYWtlRX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAECDjrKoMAACqDAAAJwAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9sb2NhbC5qc3siaW1wb3J0cyI6WyIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6WyJnZXRNZXRob2ROYW1lcyIsImxvY2FsQXBwbHlGdW5jdGlvbiIsImxvY2FsQXBwbHlNZXRob2QiLCJsb2NhbEdldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsZ2V0UHJvdG90eXBlT2YsZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuXG5jb25zdCBudHlwZW9mPShzcGVjaW1lbik9PnNwZWNpbWVuPT09bnVsbD8nbnVsbCc6dHlwZW9mIHNwZWNpbWVuO1xuXG5jb25zdCBvbkRlbGl2ZXJ5PW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19ERUxJVkVSWV9CUkVBS1BPSU5UUycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzT2JqZWN0PSh2YWwpPT5PYmplY3QodmFsKT09PXZhbDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoZGVzY3MpKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTtcbi8vXG4vL1xuJGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtmcmVlemUoZ2V0TWV0aG9kTmFtZXMpO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseUZ1bmN0aW9uPShyZWNpcGllbnQsYXJncyk9PntcbnR5cGVvZiByZWNpcGllbnQ9PT0nZnVuY3Rpb24nfHxcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGludm9rZSB0YXJnZXQgYXMgYSBmdW5jdGlvbjsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShyZWNpcGllbnQsdW5kZWZpbmVkLGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5RnVuY3Rpb24obG9jYWxBcHBseUZ1bmN0aW9uKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlNZXRob2Q9KHJlY2lwaWVudCxtZXRob2ROYW1lLGFyZ3MpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGxvY2FsQXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJncyk7XG4gfVxuaWYocmVjaXBpZW50PT09dW5kZWZpbmVkfHxyZWNpcGllbnQ9PT1udWxsKXtcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGRlbGl2ZXIgJHtxKG1ldGhvZE5hbWUpfSB0byB0YXJnZXQ7IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZuPXJlY2lwaWVudFttZXRob2ROYW1lXTtcbmlmKGZuPT09dW5kZWZpbmVkKXtcbmFzc2VydC5mYWlsKFxuWCBgdGFyZ2V0IGhhcyBubyBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSwgaGFzICR7cShcbmdldE1ldGhvZE5hbWVzKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZnR5cGU9bnR5cGVvZihmbik7XG50eXBlb2YgZm49PT0nZnVuY3Rpb24nfHxcbkZhaWwgYGludm9rZWQgbWV0aG9kICR7cShtZXRob2ROYW1lKX0gaXMgbm90IGEgZnVuY3Rpb247IGl0IGlzIGEgJHtxKFxuZnR5cGUpXG4gfWA7XG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LG1ldGhvZE5hbWUpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkoZm4scmVjaXBpZW50LGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5TWV0aG9kKGxvY2FsQXBwbHlNZXRob2QpO1xuXG5jb25zdCAgICAgICAgbG9jYWxHZXQ9KHQsa2V5KT0+dFtrZXldOyRozY9fb25jZS5sb2NhbEdldChsb2NhbEdldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJsb2NhbEFwcGx5RnVuY3Rpb24iOlsibG9jYWxBcHBseUZ1bmN0aW9uIl0sImxvY2FsQXBwbHlNZXRob2QiOlsibG9jYWxBcHBseU1ldGhvZCJdLCJsb2NhbEdldCI6WyJsb2NhbEdldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAABjnBM6QwAAOkMAAA1AAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRozY9fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtxdW90ZTpxLEZhaWx9PWFzc2VydDtcblxuY29uc3R7aGFzT3duLGZyZWV6ZSxlbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuICovXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0IGlzSlNPTlJlY29yZD0odmFsKT0+XG50eXBlb2YgdmFsPT09J29iamVjdCcmJnZhbCE9PW51bGwmJiFBcnJheS5pc0FycmF5KHZhbCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNpbXBsaWZ5VGFnPSh0YWcpPT57XG5mb3IoY29uc3QgcHJlZml4IG9mWydBbGxlZ2VkOiAnLCdEZWJ1Z05hbWU6ICddKXtcbmlmKHRhZy5zdGFydHNXaXRoKHByZWZpeCkpe1xucmV0dXJuIHRhZy5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiB9XG4gfVxucmV0dXJuIHRhZztcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcj0ob3B0aW9uTmFtZSk9PntcbmxldCBicmVha3BvaW50cz1KU09OLnBhcnNlKGdldEVudmlyb25tZW50T3B0aW9uKG9wdGlvbk5hbWUsJ251bGwnKSk7XG5cbmlmKGJyZWFrcG9pbnRzPT09bnVsbCl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgYnJlYWtwb2ludHNUYWJsZTtcblxuY29uc3QgZ2V0QnJlYWtwb2ludHM9KCk9PmJyZWFrcG9pbnRzO1xuZnJlZXplKGdldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2V0QnJlYWtwb2ludHM9KG5ld0JyZWFrcG9pbnRzPWJyZWFrcG9pbnRzKT0+e1xuaXNKU09OUmVjb3JkKG5ld0JyZWFrcG9pbnRzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbiB0byBiZSBhIEpTT04gYnJlYWtwb2ludHMgcmVjb3JkYDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgbmV3QnJlYWtwb2ludHNUYWJsZT17X19wcm90b19fOm51bGx9O1xuXG5mb3IoY29uc3RbdGFnLG1ldGhvZEJQc11vZiBlbnRyaWVzKG5ld0JyZWFrcG9pbnRzKSl7XG50YWc9PT1zaW1wbGlmeVRhZyh0YWcpfHxcbkZhaWwgYEp1c3QgdXNlIHNpbXBsZSB0YWcgJHtxKHNpbXBsaWZ5VGFnKHRhZykpfSByYXRoZXIgdGhhbiAke3EodGFnKX1gO1xuaXNKU09OUmVjb3JkKG1ldGhvZEJQcyl8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24ncyAke3EoXG50YWcpXG4gfSB0byBiZSBhIEpTT04gbWV0aG9kcyBicmVha3BvaW50cyByZWNvcmRgO1xuZm9yKGNvbnN0W21ldGhvZE5hbWUsY291bnRdb2YgZW50cmllcyhtZXRob2RCUHMpKXtcbmNvdW50PT09JyonfHxcbnR5cGVvZiBjb3VudD09PSdudW1iZXInJiZcbk51bWJlci5pc1NhZmVJbnRlZ2VyKGNvdW50KSYmXG5jb3VudD49MHx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cSh0YWcpfS4ke3EoXG5tZXRob2ROYW1lKVxuIH0gdG8gYmUgXCIqXCIgb3IgYSBub24tbmVnYXRpdmUgaW50ZWdlcmA7XG5cbmNvbnN0IGNsYXNzQlBzPWhhc093bihuZXdCcmVha3BvaW50c1RhYmxlLG1ldGhvZE5hbWUpP1xubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXTpcbm5ld0JyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV09e1xuLy9cbl9fcHJvdG9fXzpudWxsfTtcblxuY2xhc3NCUHNbdGFnXT1jb3VudDtcbiB9XG4gfVxuYnJlYWtwb2ludHM9bmV3QnJlYWtwb2ludHM7XG5icmVha3BvaW50c1RhYmxlPW5ld0JyZWFrcG9pbnRzVGFibGU7XG4gfTtcbmZyZWV6ZShzZXRCcmVha3BvaW50cyk7XG5cbmNvbnN0IHNob3VsZEJyZWFrcG9pbnQ9KHJlY2lwaWVudCxtZXRob2ROYW1lKT0+e1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8bWV0aG9kTmFtZT09PW51bGwpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBjbGFzc0JQcz1icmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdfHxicmVha3BvaW50c1RhYmxlWycqJ107XG5pZihjbGFzc0JQcz09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxubGV0IHRhZz1zaW1wbGlmeVRhZyhyZWNpcGllbnRbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG5sZXQgY291bnQ9Y2xhc3NCUHNbdGFnXTtcbmlmKGNvdW50PT09dW5kZWZpbmVkKXtcbnRhZz0nKic7XG5jb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5pZihjb3VudD09PScqJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjb3VudD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuYXNzZXJ0KHR5cGVvZiBjb3VudD09PSdudW1iZXInJiZjb3VudD49MSk7XG5jbGFzc0JQc1t0YWddPWNvdW50LTE7XG5yZXR1cm4gZmFsc2U7XG4gfTtcbmZyZWV6ZShzaG91bGRCcmVha3BvaW50KTtcblxuY29uc3QgYnJlYWtwb2ludFRlc3Rlcj1mcmVlemUoe1xuZ2V0QnJlYWtwb2ludHMsXG5zZXRCcmVha3BvaW50cyxcbnNob3VsZEJyZWFrcG9pbnR9KTtcblxuYnJlYWtwb2ludFRlc3Rlci5zZXRCcmVha3BvaW50cygpO1xucmV0dXJuIGJyZWFrcG9pbnRUZXN0ZXI7XG4gfTskaM2PX29uY2UubWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcik7XG5mcmVlemUobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGWy7RTMDAAAzAwAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9uby1zaGltLmpzeyJpbXBvcnRzIjpbIi4vRS5qcyIsIi4vZXhwb3J0cy5qcyJdLCJleHBvcnRzIjpbIkUiLCJIYW5kbGVkUHJvbWlzZSJdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VFOyRozY9faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKG1ha2VFID0gJGjNj19hKV1dXV0sW1wiLi9leHBvcnRzLmpzXCIsIFtdXV0pOyAgIFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgaHA9SGFuZGxlZFByb21pc2U7JGjNj19vbmNlLmhwKGhwKTtcbmNvbnN0ICAgICAgICBFPW1ha2VFKGhwKTskaM2PX29uY2UuRShFKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkhhbmRsZWRQcm9taXNlIjpbImhwIl0sIkUiOlsiRSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACGqKbHXwkAAF8JAAAtAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL3RyYWNrLXR1cm5zLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vudi1vcHRpb25zIl0sImV4cG9ydHMiOlsidHJhY2tUdXJucyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dLFtcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxubGV0IGhpZGRlblByaW9yRXJyb3I7XG5sZXQgaGlkZGVuQ3VycmVudFR1cm49MDtcbmxldCBoaWRkZW5DdXJyZW50RXZlbnQ9MDtcblxuLy9cbmNvbnN0IFZFUkJPU0U9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCd0cmFjay10dXJucycpO1xuXG4vL1xuLy9cbmNvbnN0IEVOQUJMRUQ9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignVFJBQ0tfVFVSTlMnLCdkaXNhYmxlZCcsWydlbmFibGVkJ10pPT09J2VuYWJsZWQnO1xuXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBhZGRSZWplY3Rpb25Ob3RlPShkZXRhaWxzTm90ZSk9PihyZWFzb24pPT57XG5pZihyZWFzb24gaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKHJlYXNvbixkZXRhaWxzTm90ZSk7XG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnUkVKRUNURUQgYXQgdG9wIG9mIGV2ZW50IGxvb3AnLHJlYXNvbik7XG4gfVxuIH07XG5cbmNvbnN0IHdyYXBGdW5jdGlvbj1cbihmdW5jLHNlbmRpbmdFcnJvcixYKT0+XG4oLi4uYXJncyk9PntcbmhpZGRlblByaW9yRXJyb3I9c2VuZGluZ0Vycm9yO1xuaGlkZGVuQ3VycmVudFR1cm4rPTE7XG5oaWRkZW5DdXJyZW50RXZlbnQ9MDtcbnRyeXtcbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbmlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUoXG5lcnIsXG5YIGBUaHJvd24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1RIUk9XTiB0byB0b3Agb2YgZXZlbnQgbG9vcCcsZXJyKTtcbiB9XG50aHJvdyBlcnI7XG4gfVxuLy9cbmNvbnN0IGRldGFpbHNOb3RlPVggYFJlamVjdGlvbiBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWA7XG5Qcm9taXNlLnJlc29sdmUocmVzdWx0KS5jYXRjaChhZGRSZWplY3Rpb25Ob3RlKGRldGFpbHNOb3RlKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH1maW5hbGx5e1xuaGlkZGVuUHJpb3JFcnJvcj11bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRyYWNrVHVybnM9KGZ1bmNzKT0+e1xuaWYoIUVOQUJMRUR8fHR5cGVvZiBnbG9iYWxUaGlzPT09J3VuZGVmaW5lZCd8fCFnbG9iYWxUaGlzLmFzc2VydCl7XG5yZXR1cm4gZnVuY3M7XG4gfVxuY29uc3R7ZGV0YWlsczpYLG5vdGU6YW5ub3RhdGVFcnJvcn09Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmhpZGRlbkN1cnJlbnRFdmVudCs9MTtcbmNvbnN0IHNlbmRpbmdFcnJvcj1FcnJvcihcbiBgRXZlbnQ6ICR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG5pZihoaWRkZW5QcmlvckVycm9yIT09dW5kZWZpbmVkKXtcbmFubm90YXRlRXJyb3Ioc2VuZGluZ0Vycm9yLFggYENhdXNlZCBieTogJHtoaWRkZW5QcmlvckVycm9yfWApO1xuIH1cblxucmV0dXJuICgvKiAgICAgICAgICAgICovXG5mdW5jcy5tYXAoKGZ1bmMpPT5mdW5jJiZ3cmFwRnVuY3Rpb24oZnVuYyxzZW5kaW5nRXJyb3IsWCkpKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS50cmFja1R1cm5zKHRyYWNrVHVybnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJhY2tUdXJucyI6WyJ0cmFja1R1cm5zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAD/w5zpWAgAAVgIAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy91dGlscy5qc3siaW1wb3J0cyI6WyIuL3NyYy9sb2NhbC5qcyIsIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9sb2NhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2xvY2FsLmpzIjpbWyJnZXRNZXRob2ROYW1lcyIsImdldE1ldGhvZE5hbWVzIl1dLCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjpbWyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiLCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAtKmDhWAgAAVgIAAB0AAABAZW5kby9mYXItdjEuMS44L3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBlbmRvL2V2ZW50dWFsLXNlbmQiOltbIkUiLCJFIl1dLCJAZW5kby9wYXNzLXN0eWxlIjpbWyJGYXIiLCJGYXIiXSxbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXSxbInBhc3NTdHlsZU9mIiwicGFzc1N0eWxlT2YiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKEpqrw/CgAAPwoAACAAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiLCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vc3JjL2Vycm9yLmpzIiwiLi9zcmMvcmVtb3RhYmxlLmpzIiwiLi9zcmMvc3ltYm9sLmpzIiwiLi9zcmMvc3RyaW5nLmpzIiwiLi9zcmMvcGFzc1N0eWxlT2YuanMiLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIiwiLi9zcmMvbWFrZS1mYXIuanMiLCIuL3NyYy90eXBlR3VhcmRzLmpzIiwiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJGYXIiLCJGYXIiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiLCJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIiwiaXNPYmplY3QiLCJpc09iamVjdCIsImlzUGFzc2FibGUiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvaXRlci1oZWxwZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvZXJyb3IuanNcIiwgW11dLFtcIi4vc3JjL3JlbW90YWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvc3ltYm9sLmpzXCIsIFtdXSxbXCIuL3NyYy9zdHJpbmcuanNcIiwgW11dLFtcIi4vc3JjL3Bhc3NTdHlsZU9mLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlVGFnZ2VkLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlLWZhci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2l0ZXItaGVscGVycy5qcyI6W1sibWFwSXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLFsiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSJdXSwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOltbIlBBU1NfU1RZTEUiLCJQQVNTX1NUWUxFIl0sWyJpc09iamVjdCIsImlzT2JqZWN0Il0sWyJhc3NlcnRDaGVja2VyIiwiYXNzZXJ0Q2hlY2tlciJdLFsiZ2V0VGFnIiwiZ2V0VGFnIl0sWyJoYXNPd25Qcm9wZXJ0eU9mIiwiaGFzT3duUHJvcGVydHlPZiJdXSwiLi9zcmMvZXJyb3IuanMiOltbImdldEVycm9yQ29uc3RydWN0b3IiLCJnZXRFcnJvckNvbnN0cnVjdG9yIl0sWyJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIl1dLCIuL3NyYy9yZW1vdGFibGUuanMiOltbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXV0sIi4vc3JjL3N5bWJvbC5qcyI6W1siYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLFsiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiXSxbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCIsIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLFsicGFzc2FibGVTeW1ib2xGb3JOYW1lIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl1dLCIuL3NyYy9zdHJpbmcuanMiOltbImlzV2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLFsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0UGFzc2FibGVTdHJpbmciXV0sIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjpbWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl0sWyJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSJdLFsiYXNzZXJ0UGFzc2FibGUiLCJhc3NlcnRQYXNzYWJsZSJdLFsidG9QYXNzYWJsZUVycm9yIiwidG9QYXNzYWJsZUVycm9yIl0sWyJ0b1Rocm93YWJsZSIsInRvVGhyb3dhYmxlIl1dLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIjpbWyJtYWtlVGFnZ2VkIiwibWFrZVRhZ2dlZCJdXSwiLi9zcmMvbWFrZS1mYXIuanMiOltbIlJlbW90YWJsZSIsIlJlbW90YWJsZSJdLFsiRmFyIiwiRmFyIl0sWyJUb0ZhckZ1bmN0aW9uIiwiVG9GYXJGdW5jdGlvbiJdLFsiR0VUX01FVEhPRF9OQU1FUyIsIkdFVF9NRVRIT0RfTkFNRVMiXV0sIi4vc3JjL3R5cGVHdWFyZHMuanMiOltbImFzc2VydFJlY29yZCIsImFzc2VydFJlY29yZCJdLFsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5Il0sWyJhc3NlcnRSZW1vdGFibGUiLCJhc3NlcnRSZW1vdGFibGUiXSxbImlzUmVtb3RhYmxlIiwiaXNSZW1vdGFibGUiXSxbImlzUmVjb3JkIiwiaXNSZWNvcmQiXSxbImlzQ29weUFycmF5IiwiaXNDb3B5QXJyYXkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJeovyVUBgAAVAYAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvY29weUFycmF5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5QXJyYXlIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxhc3NlcnRDaGVja2VyLGdldE93bkRhdGFEZXNjcmlwdG9yOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHtnZXRQcm90b3R5cGVPZn09T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXkscHJvdG90eXBlOmFycmF5UHJvdG90eXBlfT1BcnJheTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2FuQmVWYWxpZD0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PlxuaXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJmNoZWNrKGZhbHNlLFggYEFycmF5IGV4cGVjdGVkOiAke2NhbmRpZGF0ZX1gKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5QXJyYXlIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonY29weUFycmF5JyxcblxuY2FuQmVWYWxpZCxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09YXJyYXlQcm90b3R5cGV8fFxuYXNzZXJ0LmZhaWwoWCBgTWFsZm9ybWVkIGFycmF5OiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4vL1xuLy9cbmNvbnN0IGxlbj0vKiAgICAgICAgICAgICAgICAgKi9cbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwnbGVuZ3RoJyxmYWxzZSxhc3NlcnRDaGVja2VyKS52YWx1ZTtcblxuLy9cbi8vXG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbnBhc3NTdHlsZU9mUmVjdXIoXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsaSx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH1cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkubGVuZ3RoPT09bGVuKzF8fFxuYXNzZXJ0LmZhaWwoWCBgQXJyYXlzIG11c3Qgbm90IGhhdmUgbm9uLWluZGV4ZXM6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbiB9fSk7JGjNj19vbmNlLkNvcHlBcnJheUhlbHBlcihDb3B5QXJyYXlIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ29weUFycmF5SGVscGVyIjpbIkNvcHlBcnJheUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAyz0q1KQgAACkIAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2NvcHlSZWNvcmQuanN7ImltcG9ydHMiOlsiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkNvcHlSZWNvcmRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixjYW5CZU1ldGhvZCxnZXRPd25EYXRhRGVzY3JpcHRvcixDWDskaM2PX2ltcG9ydHMoW1tcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRQcm90b3R5cGVPZixwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBjaGVja09iamVjdFByb3RvdHlwZT0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk9PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlY29yZHMgbXVzdCBpbmhlcml0IGZyb20gT2JqZWN0LnByb3RvdHlwZTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJvcGVydHlDYW5CZVZhbGlkPShjYW5kaWRhdGUsa2V5LHZhbHVlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbih0eXBlb2Yga2V5PT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbiBvbmx5IGhhdmUgc3RyaW5nLW5hbWVkIHByb3BlcnRpZXM6ICR7Y2FuZGlkYXRlfWApJiYoXG4hY2FuQmVNZXRob2QodmFsdWUpfHxcbiEhY2hlY2smJlxuLy9cbkNYKFxuY2hlY2spXG4gYFJlY29yZHMgY2Fubm90IGNvbnRhaW4gbm9uLWZhciBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IG1heSBiZSBtZXRob2RzIG9mIGFuIGltcGxpY2l0IFJlbW90YWJsZTogJHtjYW5kaWRhdGV9YCkpO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5UmVjb3JkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2NvcHlSZWNvcmQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xucmV0dXJuKFxuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGNoZWNrKSYmXG4vL1xuLy9cbm93bktleXMoY2FuZGlkYXRlKS5ldmVyeSgoa2V5KT0+XG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsa2V5LGNhbmRpZGF0ZVtrZXldLGNoZWNrKSkpO1xuXG5cbiB9LFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja09iamVjdFByb3RvdHlwZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG4vL1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duS2V5cyhjYW5kaWRhdGUpKXtcbmNvbnN0e3ZhbHVlfT1nZXRPd25EYXRhRGVzY3JpcHRvcihcbmNhbmRpZGF0ZSxcbm5hbWUsXG50cnVlLFxuYXNzZXJ0Q2hlY2tlcik7XG5cbmNoZWNrUHJvcGVydHlDYW5CZVZhbGlkKGNhbmRpZGF0ZSxuYW1lLHZhbHVlLGFzc2VydENoZWNrZXIpO1xucGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSk7XG4gfVxuIH19KTskaM2PX29uY2UuQ29weVJlY29yZEhlbHBlcihDb3B5UmVjb3JkSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlSZWNvcmRIZWxwZXIiOlsiQ29weVJlY29yZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABwIuV6VgoAAFYKAAAuAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyIsIi4vbWFrZVRhZ2dlZC5qcyJdLCJleHBvcnRzIjpbImRlZXBseUZ1bGZpbGxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRSxpc1Byb21pc2UsZ2V0VGFnLGlzT2JqZWN0LHBhc3NTdHlsZU9mLG1ha2VUYWdnZWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIi4vbWFrZVRhZ2dlZC5qc1wiLCBbW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkPWFzeW5jKHZhbCk9Pntcbi8vXG4vL1xuLy9cblxuaWYoIWlzT2JqZWN0KHZhbCkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsKTtcbiB9XG5pZihpc1Byb21pc2UodmFsKSl7XG5yZXR1cm4gRS53aGVuKHZhbCwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCBuYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMocmVjKTtcbmNvbnN0IHZhbFBzPW5hbWVzLm1hcCgobmFtZSk9PmRlZXBseUZ1bGZpbGxlZChyZWNbbmFtZV0pKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PlxuaGFyZGVuKGZyb21FbnRyaWVzKHZhbHMubWFwKChjLGkpPT5bbmFtZXNbaV0sY10pKSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGFycj0vKiAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB2YWxQcz1hcnIubWFwKChwKT0+ZGVlcGx5RnVsZmlsbGVkKHApKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PmhhcmRlbih2YWxzKSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnZD0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdGFnPWdldFRhZyh0Z2QpO1xuLy9cbnJldHVybiBFLndoZW4oZGVlcGx5RnVsZmlsbGVkKHRnZC5wYXlsb2FkKSwocGF5bG9hZCk9PlxubWFrZVRhZ2dlZCh0YWcscGF5bG9hZCkpO1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlbT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIHJlbTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlcnI9LyogICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIGVycjtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHByb209LyogICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdmFsO1xucmV0dXJuIEUud2hlbihwcm9tLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTskaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkKGRlZXBseUZ1bGZpbGxlZCk7XG5oYXJkZW4oZGVlcGx5RnVsZmlsbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZCI6WyJkZWVwbHlGdWxmaWxsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiRXJyb3JIZWxwZXIiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciIsImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciIsImlzRXJyb3JMaWtlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsYXNzZXJ0Q2hlY2tlcixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGhhc093bixlbnRyaWVzfT1PYmplY3Q7XG5cbi8vXG4vL1xuY29uc3QgZXJyb3JDb25zdHJ1Y3RvcnM9bmV3IE1hcChcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bXG5bJ0Vycm9yJyxFcnJvcl0sXG5bJ0V2YWxFcnJvcicsRXZhbEVycm9yXSxcblsnUmFuZ2VFcnJvcicsUmFuZ2VFcnJvcl0sXG5bJ1JlZmVyZW5jZUVycm9yJyxSZWZlcmVuY2VFcnJvcl0sXG5bJ1N5bnRheEVycm9yJyxTeW50YXhFcnJvcl0sXG5bJ1R5cGVFcnJvcicsVHlwZUVycm9yXSxcblsnVVJJRXJyb3InLFVSSUVycm9yXVxuXG4vL1xuLy9cbi8vXG4vL1xuXSk7XG5cblxuaWYodHlwZW9mIEFnZ3JlZ2F0ZUVycm9yIT09J3VuZGVmaW5lZCcpe1xuLy9cbmVycm9yQ29uc3RydWN0b3JzLnNldCgnQWdncmVnYXRlRXJyb3InLEFnZ3JlZ2F0ZUVycm9yKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0RXJyb3JDb25zdHJ1Y3Rvcj0obmFtZSk9PmVycm9yQ29uc3RydWN0b3JzLmdldChuYW1lKTskaM2PX29uY2UuZ2V0RXJyb3JDb25zdHJ1Y3RvcihnZXRFcnJvckNvbnN0cnVjdG9yKTtcbmhhcmRlbihnZXRFcnJvckNvbnN0cnVjdG9yKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tFcnJvckxpa2U9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuKFxuY2FuZGlkYXRlIGluc3RhbmNlb2YgRXJyb3J8fFxuISFjaGVjayYmQ1goY2hlY2spIGBFcnJvciBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrRXJyb3JMaWtlKTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzRXJyb3JMaWtlPShjYW5kaWRhdGUpPT5jaGVja0Vycm9yTGlrZShjYW5kaWRhdGUpOyRozY9fb25jZS5pc0Vycm9yTGlrZShpc0Vycm9yTGlrZSk7XG5oYXJkZW4oaXNFcnJvckxpa2UpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjPShcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaz11bmRlZmluZWQpPT5cbntcbmlmKGRlc2MuZW51bWVyYWJsZSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtkZXNjfWApO1xuXG4gfVxuaWYoIWhhc093bihkZXNjLCd2YWx1ZScpKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eTogJHtkZXNjfWApO1xuXG4gfVxuY29uc3R7dmFsdWV9PWRlc2M7XG5zd2l0Y2gocHJvcE5hbWUpe1xuY2FzZSdtZXNzYWdlJzpcbmNhc2Unc3RhY2snOntcbnJldHVybihcbnR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nOiAke3ZhbHVlfWApO1xuXG4gfVxuY2FzZSdjYXVzZSc6e1xuLy9cbnJldHVybiBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcih2YWx1ZSxwYXNzU3R5bGVPZlJlY3VyLGNoZWNrKTtcbiB9XG5jYXNlJ2Vycm9ycyc6e1xuaWYoIUFycmF5LmlzQXJyYXkodmFsdWUpfHxwYXNzU3R5bGVPZlJlY3VyKHZhbHVlKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgY29weUFycmF5OiAke3ZhbHVlfWApO1xuXG4gfVxucmV0dXJuIHZhbHVlLmV2ZXJ5KChlcnIpPT5cbi8vXG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2ZSZWN1cixjaGVjaykpO1xuXG4gfVxuZGVmYXVsdDp7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgaGFzIGV4dHJhIHVucGFzc2VkIHByb3BlcnR5ICR7cShwcm9wTmFtZSl9YCk7XG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcj0oXG5jYW5kaWRhdGUsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZighY2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKTtcbmNvbnN0e25hbWV9PXByb3RvO1xuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihuYW1lKTtcbmlmKGVyckNvbnN0cnVjdG9yPT09dW5kZWZpbmVkfHxlcnJDb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1wcm90byl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaW5oZXJpdCBmcm9tIGFuIGVycm9yIGNsYXNzIC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYoISgnbWVzc2FnZSdpbiBkZXNjcykpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGhhdmUgYW4gb3duIFwibWVzc2FnZVwiIHN0cmluZyBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5cbnJldHVybiBlbnRyaWVzKGRlc2NzKS5ldmVyeSgoW3Byb3BOYW1lLGRlc2NdKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaykpO1xuXG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcik7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBFcnJvckhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidlcnJvcicsXG5cbmNhbkJlVmFsaWQ6Y2hlY2tFcnJvckxpa2UsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIsYXNzZXJ0Q2hlY2tlcil9KTskaM2PX29uY2UuRXJyb3JIZWxwZXIoRXJyb3JIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0RXJyb3JDb25zdHJ1Y3RvciI6WyJnZXRFcnJvckNvbnN0cnVjdG9yIl0sImlzRXJyb3JMaWtlIjpbImlzRXJyb3JMaWtlIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIl0sIkVycm9ySGVscGVyIjpbIkVycm9ySGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvaXRlci1oZWxwZXJzLmpzeyJpbXBvcnRzIjpbIi4vbWFrZS1mYXIuanMiXSwiZXhwb3J0cyI6WyJmaWx0ZXJJdGVyYWJsZSIsIm1hcEl0ZXJhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaM2PX2ltcG9ydHMoW1tcIi4vbWFrZS1mYXIuanNcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFwSXRlcmFibGU9KGJhc2VJdGVyYWJsZSxmdW5jKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdtYXBwZWQgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBiYXNlSXRlcmF0b3I9YmFzZUl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBGYXIoJ21hcHBlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuY29uc3R7dmFsdWU6YmFzZVZhbHVlLGRvbmV9PWJhc2VJdGVyYXRvci5uZXh0KCk7XG5jb25zdCB2YWx1ZT1kb25lP2Jhc2VWYWx1ZTpmdW5jKGJhc2VWYWx1ZSk7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSxkb25lfSk7XG4gfX0pO1xuXG4gfX0pOyRozY9fb25jZS5tYXBJdGVyYWJsZShtYXBJdGVyYWJsZSk7XG5cbmhhcmRlbihtYXBJdGVyYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmaWx0ZXJJdGVyYWJsZT0oYmFzZUl0ZXJhYmxlLHByZWQpPT5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5GYXIoJ2ZpbHRlcmVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdmaWx0ZXJlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuZm9yKDs7KXtcbmNvbnN0IHJlc3VsdD1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3R7dmFsdWUsZG9uZX09cmVzdWx0O1xuaWYoZG9uZXx8cHJlZCh2YWx1ZSkpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuIH19KTtcblxuIH19KTskaM2PX29uY2UuZmlsdGVySXRlcmFibGUoZmlsdGVySXRlcmFibGUpO1xuXG5oYXJkZW4oZmlsdGVySXRlcmFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFwSXRlcmFibGUiOlsibWFwSXRlcmFibGUiXSwiZmlsdGVySXRlcmFibGUiOlsiZmlsdGVySXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9tYWtlLWZhci5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcmVtb3RhYmxlLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiR0VUX01FVEhPRF9OQU1FUyIsIlJlbW90YWJsZSIsIlRvRmFyRnVuY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMscSxGYWlsLGFzc2VydENoZWNrZXIsUEFTU19TVFlMRSxhc3NlcnRJZmFjZSxnZXRJbnRlcmZhY2VPZixSZW1vdGFibGVIZWxwZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3JlbW90YWJsZS5qc1wiLCBbW1wiYXNzZXJ0SWZhY2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0SWZhY2UgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaM2PX2EgPT4gKFJlbW90YWJsZUhlbHBlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbnNldFByb3RvdHlwZU9mLFxuY3JlYXRlLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlUmVtb3RhYmxlUHJvdG89KHJlbW90YWJsZSxpZmFjZSk9PntcbmxldCBvbGRQcm90bz1nZXRQcm90b3R5cGVPZihyZW1vdGFibGUpO1xuaWYodHlwZW9mIHJlbW90YWJsZT09PSdvYmplY3QnKXtcbmlmKG9sZFByb3RvPT09bnVsbCl7XG5vbGRQcm90bz1vYmplY3RQcm90b3R5cGU7XG4gfVxub2xkUHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuRmFpbCBgRm9yIG5vdywgcmVtb3RhYmxlcyBjYW5ub3QgaW5oZXJpdCBmcm9tIGFueXRoaW5nIHVudXN1YWwsIGluICR7cmVtb3RhYmxlfWA7XG4gfWVsc2UgaWYodHlwZW9mIHJlbW90YWJsZT09PSdmdW5jdGlvbicpe1xub2xkUHJvdG8hPT1udWxsfHxcbkZhaWwgYE9yaWdpbmFsIGZ1bmN0aW9uIG11c3Qgbm90IGluaGVyaXQgZnJvbSBudWxsOiAke3JlbW90YWJsZX1gO1xub2xkUHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5nZXRQcm90b3R5cGVPZihvbGRQcm90byk9PT1mdW5jdGlvblByb3RvdHlwZXx8XG5GYWlsIGBGYXIgZnVuY3Rpb25zIG11c3Qgb3JpZ2luYWxseSBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNle1xuRmFpbCBgdW5yZWNvZ25pemVkIHR5cGVvZiAke3JlbW90YWJsZX1gO1xuIH1cbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2xkUHJvdG8se1xuW1BBU1NfU1RZTEVdOnt2YWx1ZToncmVtb3RhYmxlJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6aWZhY2V9fSkpO1xuXG5cbiB9O1xuXG5jb25zdCBhc3NlcnRDYW5CZVJlbW90YWJsZT0oY2FuZGlkYXRlKT0+XG5SZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBSZW1vdGFibGU9KFxuLy9cbmlmYWNlPSdSZW1vdGFibGUnLFxucHJvcHM9dW5kZWZpbmVkLFxucmVtb3RhYmxlPS8qICAgICAgICAgICAgKi97fSk9Plxue1xuYXNzZXJ0SWZhY2UoaWZhY2UpO1xuYXNzZXJ0KGlmYWNlKTtcbi8vXG4vL1xucHJvcHM9PT11bmRlZmluZWR8fEZhaWwgYFJlbW90YWJsZSBwcm9wcyBub3QgeWV0IGltcGxlbWVudGVkICR7cHJvcHN9YDtcblxuLy9cbmFzc2VydENhbkJlUmVtb3RhYmxlKHJlbW90YWJsZSk7XG5cbi8vXG4hKFBBU1NfU1RZTEUgaW4gcmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgbWFya2VkIGFzIGEgJHtxKFxucmVtb3RhYmxlW1BBU1NfU1RZTEVdKVxuIH1gO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4uaXNGYWtlfHxcbi8vXG4haXNGcm96ZW4ocmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgZnJvemVuYDtcbmNvbnN0IHJlbW90YWJsZVByb3RvPW1ha2VSZW1vdGFibGVQcm90byhyZW1vdGFibGUsaWZhY2UpO1xuXG4vL1xuLy9cbmNvbnN0IG11dGF0ZUhhcmRlbkFuZENoZWNrPSh0YXJnZXQpPT57XG4vL1xuc2V0UHJvdG90eXBlT2YodGFyZ2V0LHJlbW90YWJsZVByb3RvKTtcbmhhcmRlbih0YXJnZXQpO1xuYXNzZXJ0Q2FuQmVSZW1vdGFibGUodGFyZ2V0KTtcbiB9O1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2soe30pO1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2socmVtb3RhYmxlKTtcblxuLy9cbi8vXG5hc3NlcnQoaWZhY2UhPT11bmRlZmluZWQpOy8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAqL3JlbW90YWJsZSk7XG4gfTskaM2PX29uY2UuUmVtb3RhYmxlKFJlbW90YWJsZSk7XG5oYXJkZW4oUmVtb3RhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9NRVRIT0RfTkFNRVM9J19fZ2V0TWV0aG9kTmFtZXNfXyc7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5HRVRfTUVUSE9EX05BTUVTKEdFVF9NRVRIT0RfTkFNRVMpO1xuY29uc3QgZ2V0TWV0aG9kTmFtZXNNZXRob2Q9aGFyZGVuKHtcbltHRVRfTUVUSE9EX05BTUVTXSgpe1xucmV0dXJuIGdldE1ldGhvZE5hbWVzKHRoaXMpO1xuIH19KVtcbkdFVF9NRVRIT0RfTkFNRVNdO1xuXG5jb25zdCBnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3I9aGFyZGVuKHtcbnZhbHVlOmdldE1ldGhvZE5hbWVzTWV0aG9kLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZSxcbndyaXRhYmxlOmZhbHNlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEZhcj0oZmFyTmFtZSxyZW1vdGFibGU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgcj1yZW1vdGFibGU9PT11bmRlZmluZWQ/LyogICAgICAgICAgICAqL3t9OnJlbW90YWJsZTtcbmlmKHR5cGVvZiByPT09J29iamVjdCcmJiEoR0VUX01FVEhPRF9OQU1FUyBpbiByKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsR0VUX01FVEhPRF9OQU1FUyxnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3IpO1xuIH1cbnJldHVybiBSZW1vdGFibGUoIGBBbGxlZ2VkOiAke2Zhck5hbWV9YCx1bmRlZmluZWQscik7XG4gfTskaM2PX29uY2UuRmFyKEZhcik7XG5oYXJkZW4oRmFyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRvRmFyRnVuY3Rpb249KGZhck5hbWUsZnVuYyk9PntcbmlmKGdldEludGVyZmFjZU9mKGZ1bmMpIT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gZnVuYztcbiB9XG4vL1xucmV0dXJuIEZhcihmYXJOYW1lLCguLi5hcmdzKT0+ZnVuYyguLi5hcmdzKSk7XG4gfTskaM2PX29uY2UuVG9GYXJGdW5jdGlvbihUb0ZhckZ1bmN0aW9uKTtcbmhhcmRlbihUb0ZhckZ1bmN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlJlbW90YWJsZSI6WyJSZW1vdGFibGUiXSwiR0VUX01FVEhPRF9OQU1FUyI6WyJHRVRfTUVUSE9EX05BTUVTIl0sIkZhciI6WyJGYXIiXSwiVG9GYXJGdW5jdGlvbiI6WyJUb0ZhckZ1bmN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvbWFrZVRhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbIm1ha2VUYWdnZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxQQVNTX1NUWUxFLGFzc2VydFBhc3NhYmxlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuY29uc3R7Y3JlYXRlLHByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVGFnZ2VkPSh0YWcscGF5bG9hZCk9PntcbnR5cGVvZiB0YWc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBUaGUgdGFnIG9mIGEgdGFnZ2VkIHJlY29yZCBtdXN0IGJlIGEgc3RyaW5nOiAke3RhZ31gO1xuYXNzZXJ0UGFzc2FibGUoaGFyZGVuKHBheWxvYWQpKTtcbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2JqZWN0UHJvdG90eXBlLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3RhZ2dlZCd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOnRhZ30sXG5wYXlsb2FkOnt2YWx1ZTpwYXlsb2FkLGVudW1lcmFibGU6dHJ1ZX19KSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VUYWdnZWQobWFrZVRhZ2dlZCk7XG5oYXJkZW4obWFrZVRhZ2dlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlVGFnZ2VkIjpbIm1ha2VUYWdnZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAADSKSdxQVAAAUFQAAMAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJDWCIsIlBBU1NfU1RZTEUiLCJhc3NlcnRDaGVja2VyIiwiY2FuQmVNZXRob2QiLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIiwiY2hlY2tQYXNzU3R5bGUiLCJjaGVja1RhZ1JlY29yZCIsImdldE93bkRhdGFEZXNjcmlwdG9yIiwiZ2V0VGFnIiwiaGFzT3duUHJvcGVydHlPZiIsImlzT2JqZWN0IiwiaXNUeXBlZEFycmF5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e3Byb3RvdHlwZTpmdW5jdGlvblByb3RvdHlwZX09RnVuY3Rpb247XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbmdldFByb3RvdHlwZU9mLFxuaGFzT3duUHJvcGVydHk6b2JqZWN0SGFzT3duUHJvcGVydHksXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PVxuT2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZzp0b1N0cmluZ1RhZ1N5bWJvbH09U3ltYm9sO1xuXG5jb25zdCB0eXBlZEFycmF5UHJvdG90eXBlPWdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkucHJvdG90eXBlKTtcbmNvbnN0IHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxudHlwZWRBcnJheVByb3RvdHlwZSxcbnRvU3RyaW5nVGFnU3ltYm9sKTtcblxuYXNzZXJ0KHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MpO1xuY29uc3QgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPXR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MuZ2V0O1xuYXNzZXJ0KHR5cGVvZiBnZXRUeXBlZEFycmF5VG9TdHJpbmdUYWc9PT0nZnVuY3Rpb24nKTtcblxuY29uc3QgICAgICAgIGhhc093blByb3BlcnR5T2Y9KG9iaixwcm9wKT0+XG5hcHBseShvYmplY3RIYXNPd25Qcm9wZXJ0eSxvYmosW3Byb3BdKTskaM2PX29uY2UuaGFzT3duUHJvcGVydHlPZihoYXNPd25Qcm9wZXJ0eU9mKTtcbmhhcmRlbihoYXNPd25Qcm9wZXJ0eU9mKTtcblxuLy9cbmNvbnN0ICAgICAgICBpc09iamVjdD0odmFsKT0+T2JqZWN0KHZhbCk9PT12YWw7JGjNj19vbmNlLmlzT2JqZWN0KGlzT2JqZWN0KTtcbmhhcmRlbihpc09iamVjdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1R5cGVkQXJyYXk9KG9iamVjdCk9Pntcbi8vXG5jb25zdCB0YWc9YXBwbHkoZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLG9iamVjdCxbXSk7XG5yZXR1cm4gdGFnIT09dW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmlzVHlwZWRBcnJheShpc1R5cGVkQXJyYXkpO1xuaGFyZGVuKGlzVHlwZWRBcnJheSk7XG5cbmNvbnN0ICAgICAgICBQQVNTX1NUWUxFPVN5bWJvbC5mb3IoJ3Bhc3NTdHlsZScpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5QQVNTX1NUWUxFKFBBU1NfU1RZTEUpO1xuY29uc3QgICAgICAgIGNhbkJlTWV0aG9kPShmdW5jKT0+XG50eXBlb2YgZnVuYz09PSdmdW5jdGlvbicmJiEoUEFTU19TVFlMRSBpbiBmdW5jKTskaM2PX29uY2UuY2FuQmVNZXRob2QoY2FuQmVNZXRob2QpO1xuaGFyZGVuKGNhbkJlTWV0aG9kKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydENoZWNrZXI9KGNvbmQsZGV0YWlscyk9PntcbmFzc2VydChjb25kLGRldGFpbHMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q2hlY2tlcihhc3NlcnRDaGVja2VyKTtcbmhhcmRlbihhc3NlcnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQ1g9KGNoZWNrKT0+e1xuY29uc3QgcmVqZWN0PShULC4uLnN1YnMpPT5jaGVjayhmYWxzZSxYKFQsLi4uc3VicykpO1xucmV0dXJuIHJlamVjdDtcbiB9OyRozY9fb25jZS5DWChDWCk7XG5oYXJkZW4oQ1gpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE93bkRhdGFEZXNjcmlwdG9yPShcbmNhbmRpZGF0ZSxcbnByb3BOYW1lLFxuc2hvdWxkQmVFbnVtZXJhYmxlLFxuY2hlY2spPT5cbntcbmNvbnN0IGRlc2M9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY2FuZGlkYXRlLHByb3BOYW1lKTtcblxucmV0dXJuKGRlc2MhPT11bmRlZmluZWR8fFxuISFjaGVjayYmQ1goY2hlY2spIGAke3EocHJvcE5hbWUpfSBwcm9wZXJ0eSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCkmJihcbmhhc093blByb3BlcnR5T2YoZGVzYywndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGFjY2Vzc29yIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKSYmKFxuc2hvdWxkQmVFbnVtZXJhYmxlP1xuZGVzYy5lbnVtZXJhYmxlfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgJHtxKHByb3BOYW1lKX0gbXVzdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gOlxuIWRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGVudW1lcmFibGUgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApP1xuZGVzYzpcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmdldE93bkRhdGFEZXNjcmlwdG9yKGdldE93bkRhdGFEZXNjcmlwdG9yKTtcbmhhcmRlbihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRUYWc9KHRhZ1JlY29yZCk9PnRhZ1JlY29yZFtTeW1ib2wudG9TdHJpbmdUYWddOyRozY9fb25jZS5nZXRUYWcoZ2V0VGFnKTtcbmhhcmRlbihnZXRUYWcpO1xuXG5jb25zdCAgICAgICAgY2hlY2tQYXNzU3R5bGU9KG9iaixwYXNzU3R5bGUsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG5wYXNzU3R5bGU9PT1leHBlY3RlZFBhc3NTdHlsZXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRXhwZWN0ZWQgJHtxKGV4cGVjdGVkUGFzc1N0eWxlKX0sIG5vdCAke3EocGFzc1N0eWxlKX06ICR7b2JqfWApO1xuXG4gfTskaM2PX29uY2UuY2hlY2tQYXNzU3R5bGUoY2hlY2tQYXNzU3R5bGUpO1xuaGFyZGVuKGNoZWNrUGFzc1N0eWxlKTtcblxuY29uc3QgbWFrZUNoZWNrVGFnUmVjb3JkPShjaGVja1Byb3RvKT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnUmVjb3JkPSh0YWdSZWNvcmQsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNPYmplY3QodGFnUmVjb3JkKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgQSBub24tb2JqZWN0IGNhbm5vdCBiZSBhIHRhZ1JlY29yZDogJHt0YWdSZWNvcmR9YCkmJihcbmlzRnJvemVuKHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBIHRhZ1JlY29yZCBtdXN0IGJlIGZyb3plbjogJHt0YWdSZWNvcmR9YCkmJihcbiFpc0FycmF5KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBbiBhcnJheSBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUGFzc1N0eWxlKFxudGFnUmVjb3JkLFxuZ2V0T3duRGF0YURlc2NyaXB0b3IodGFnUmVjb3JkLFBBU1NfU1RZTEUsZmFsc2UsY2hlY2spLnZhbHVlLFxuZXhwZWN0ZWRQYXNzU3R5bGUsXG5jaGVjaykmJihcblxudHlwZW9mIGdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxTeW1ib2wudG9TdHJpbmdUYWcsZmFsc2UsY2hlY2spLlxudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEEgW1N5bWJvbC50b1N0cmluZ1RhZ10tbmFtZWQgcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt0YWdSZWNvcmR9YCkmJlxuY2hlY2tQcm90byh0YWdSZWNvcmQsZ2V0UHJvdG90eXBlT2YodGFnUmVjb3JkKSxjaGVjaykpO1xuXG4gfTtcbnJldHVybiBoYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuIH07XG5cbmNvbnN0ICAgICAgICBjaGVja1RhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG4hIWNoZWNrJiZcbmNoZWNrKGZhbHNlLFggYEEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7dmFsfWApKTskaM2PX29uY2UuY2hlY2tUYWdSZWNvcmQoY2hlY2tUYWdSZWNvcmQpO1xuXG5oYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuXG5jb25zdCAgICAgICAgY2hlY2tGdW5jdGlvblRhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbnByb3RvIT09bnVsbCYmZ2V0UHJvdG90eXBlT2YocHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhcbmZhbHNlLFxuWCBgRm9yIGZ1bmN0aW9ucywgYSB0YWdSZWNvcmQgbXVzdCBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrRnVuY3Rpb25UYWdSZWNvcmQoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCk7XG5cblxuaGFyZGVuKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaGFzT3duUHJvcGVydHlPZiI6WyJoYXNPd25Qcm9wZXJ0eU9mIl0sImlzT2JqZWN0IjpbImlzT2JqZWN0Il0sImlzVHlwZWRBcnJheSI6WyJpc1R5cGVkQXJyYXkiXSwiUEFTU19TVFlMRSI6WyJQQVNTX1NUWUxFIl0sImNhbkJlTWV0aG9kIjpbImNhbkJlTWV0aG9kIl0sImFzc2VydENoZWNrZXIiOlsiYXNzZXJ0Q2hlY2tlciJdLCJDWCI6WyJDWCJdLCJnZXRPd25EYXRhRGVzY3JpcHRvciI6WyJnZXRPd25EYXRhRGVzY3JpcHRvciJdLCJnZXRUYWciOlsiZ2V0VGFnIl0sImNoZWNrUGFzc1N0eWxlIjpbImNoZWNrUGFzc1N0eWxlIl0sImNoZWNrVGFnUmVjb3JkIjpbImNoZWNrVGFnUmVjb3JkIl0sImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiOlsiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3Bhc3NTdHlsZU9mLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vY29weUFycmF5LmpzIiwiLi9jb3B5UmVjb3JkLmpzIiwiLi90YWdnZWQuanMiLCIuL2Vycm9yLmpzIiwiLi9yZW1vdGFibGUuanMiLCIuL3N5bWJvbC5qcyIsIi4vc2FmZS1wcm9taXNlLmpzIiwiLi9zdHJpbmcuanMiXSwiZXhwb3J0cyI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCIsImFzc2VydFBhc3NhYmxlIiwiaXNQYXNzYWJsZSIsInBhc3NTdHlsZU9mIiwidG9QYXNzYWJsZUVycm9yIiwidG9UaHJvd2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLFgsRmFpbCxxLGFubm90YXRlRXJyb3IsbWFrZUVycm9yLGlzT2JqZWN0LGlzVHlwZWRBcnJheSxQQVNTX1NUWUxFLENvcHlBcnJheUhlbHBlcixDb3B5UmVjb3JkSGVscGVyLFRhZ2dlZEhlbHBlcixFcnJvckhlbHBlcixjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyxjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcixnZXRFcnJvckNvbnN0cnVjdG9yLGlzRXJyb3JMaWtlLFJlbW90YWJsZUhlbHBlcixhc3NlcnRQYXNzYWJsZVN5bWJvbCxhc3NlcnRTYWZlUHJvbWlzZSxhc3NlcnRQYXNzYWJsZVN0cmluZzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzVHlwZWRBcnJheVwiLCBbJGjNj19hID0+IChpc1R5cGVkQXJyYXkgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5QXJyYXkuanNcIiwgW1tcIkNvcHlBcnJheUhlbHBlclwiLCBbJGjNj19hID0+IChDb3B5QXJyYXlIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlSZWNvcmQuanNcIiwgW1tcIkNvcHlSZWNvcmRIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weVJlY29yZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vdGFnZ2VkLmpzXCIsIFtbXCJUYWdnZWRIZWxwZXJcIiwgWyRozY9fYSA9PiAoVGFnZ2VkSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9lcnJvci5qc1wiLCBbW1wiRXJyb3JIZWxwZXJcIiwgWyRozY9fYSA9PiAoRXJyb3JIZWxwZXIgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2NcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N5bWJvbC5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCIuL3NhZmUtcHJvbWlzZS5qc1wiLCBbW1wiYXNzZXJ0U2FmZVByb21pc2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2FmZVByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3N0cmluZy5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTdHJpbmdcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTdHJpbmcgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0Zyb3plbixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLHZhbHVlc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBtYWtlSGVscGVyVGFibGU9KHBhc3NTdHlsZUhlbHBlcnMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEhlbHBlclRhYmxlPXtcbl9fcHJvdG9fXzpudWxsLFxuY29weUFycmF5OnVuZGVmaW5lZCxcbmNvcHlSZWNvcmQ6dW5kZWZpbmVkLFxudGFnZ2VkOnVuZGVmaW5lZCxcbmVycm9yOnVuZGVmaW5lZCxcbnJlbW90YWJsZTp1bmRlZmluZWR9O1xuXG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuY29uc3R7c3R5bGVOYW1lfT1oZWxwZXI7XG5zdHlsZU5hbWUgaW4gSGVscGVyVGFibGV8fEZhaWwgYFVucmVjb2duaXplZCBoZWxwZXI6ICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPT09dW5kZWZpbmVkfHxcbkZhaWwgYGNvbmZsaWN0aW5nIGhlbHBlcnMgZm9yICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPWhlbHBlcjtcbiB9XG5mb3IoY29uc3Qgc3R5bGVOYW1lIG9mIG93bktleXMoSGVscGVyVGFibGUpKXtcbkhlbHBlclRhYmxlW3N0eWxlTmFtZV0hPT11bmRlZmluZWR8fFxuRmFpbCBgbWlzc2luZyBoZWxwZXIgZm9yICR7cShzdHlsZU5hbWUpfWA7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKEhlbHBlclRhYmxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVBhc3NTdHlsZU9mPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuY29uc3QgSGVscGVyVGFibGU9bWFrZUhlbHBlclRhYmxlKHBhc3NTdHlsZUhlbHBlcnMpO1xuY29uc3QgcmVtb3RhYmxlSGVscGVyPUhlbHBlclRhYmxlLnJlbW90YWJsZTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcGFzc1N0eWxlTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gICAqL1xuLy9cbmNvbnN0IHBhc3NTdHlsZU9mPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGluUHJvZ3Jlc3M9bmV3IFNldCgpO1xuXG5jb25zdCBwYXNzU3R5bGVPZlJlY3VyPShpbm5lcik9PntcbmNvbnN0IGlubmVySXNPYmplY3Q9aXNPYmplY3QoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5jb25zdCBpbm5lclN0eWxlPXBhc3NTdHlsZU1lbW8uZ2V0KGlubmVyKTtcbmlmKGlubmVyU3R5bGUpe1xucmV0dXJuIGlubmVyU3R5bGU7XG4gfVxuIWluUHJvZ3Jlc3MuaGFzKGlubmVyKXx8XG5GYWlsIGBQYXNzLWJ5LWNvcHkgZGF0YSBjYW5ub3QgYmUgY3ljbGljICR7aW5uZXJ9YDtcbmluUHJvZ3Jlc3MuYWRkKGlubmVyKTtcbiB9XG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mSW50ZXJuYWwoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5wYXNzU3R5bGVNZW1vLnNldChpbm5lcixwYXNzU3R5bGUpO1xuaW5Qcm9ncmVzcy5kZWxldGUoaW5uZXIpO1xuIH1cbnJldHVybiBwYXNzU3R5bGU7XG4gfTtcblxuY29uc3QgcGFzc1N0eWxlT2ZJbnRlcm5hbD0oaW5uZXIpPT57XG5jb25zdCB0eXBlc3RyPXR5cGVvZiBpbm5lcjtcbnN3aXRjaCh0eXBlc3RyKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6e1xucmV0dXJuIHR5cGVzdHI7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmFzc2VydFBhc3NhYmxlU3RyaW5nKGlubmVyKTtcbnJldHVybidzdHJpbmcnO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChpbm5lcik7XG5yZXR1cm4nc3ltYm9sJztcbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoaW5uZXI9PT1udWxsKXtcbnJldHVybidudWxsJztcbiB9XG5pZighaXNGcm96ZW4oaW5uZXIpKXtcbmFzc2VydC5mYWlsKFxuLy9cbi8vXG5pc1R5cGVkQXJyYXkoaW5uZXIpP1xuWCBgQ2Fubm90IHBhc3MgbXV0YWJsZSB0eXBlZCBhcnJheXMgbGlrZSAke2lubmVyfS5gOlxuWCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWApO1xuXG4gfVxuaWYoaXNQcm9taXNlKGlubmVyKSl7XG5hc3NlcnRTYWZlUHJvbWlzZShpbm5lcik7XG5yZXR1cm4ncHJvbWlzZSc7XG4gfVxudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5jb25zdCBwYXNzU3R5bGVUYWc9aW5uZXJbUEFTU19TVFlMRV07XG5pZihwYXNzU3R5bGVUYWchPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihwYXNzU3R5bGVUYWcsJ3N0cmluZycpO1xuY29uc3QgaGVscGVyPUhlbHBlclRhYmxlW3Bhc3NTdHlsZVRhZ107XG5oZWxwZXIhPT11bmRlZmluZWR8fFxuRmFpbCBgVW5yZWNvZ25pemVkIFBhc3NTdHlsZTogJHtxKHBhc3NTdHlsZVRhZyl9YDtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICovcGFzc1N0eWxlVGFnKTtcbiB9XG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuaWYoaGVscGVyLmNhbkJlVmFsaWQoaW5uZXIpKXtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiBoZWxwZXIuc3R5bGVOYW1lO1xuIH1cbiB9XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5jYXNlJ2Z1bmN0aW9uJzp7XG5pc0Zyb3plbihpbm5lcil8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWA7XG50eXBlb2YgaW5uZXIudGhlbiE9PSdmdW5jdGlvbid8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLXByb21pc2UgdGhlbmFibGVzYDtcbnJlbW90YWJsZUhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybidyZW1vdGFibGUnO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoWCBgVW5yZWNvZ25pemVkIHR5cGVvZiAke3EodHlwZXN0cil9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9O1xuXG5yZXR1cm4gcGFzc1N0eWxlT2ZSZWN1cihwYXNzYWJsZSk7XG4gfTtcbnJldHVybiBoYXJkZW4ocGFzc1N0eWxlT2YpO1xuIH07XG5cbmNvbnN0ICAgICAgICBQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbD1TeW1ib2wuZm9yKCdAZW5kbyBwYXNzU3R5bGVPZicpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2woUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wpO1xuY29uc3QgICAgICAgIHBhc3NTdHlsZU9mPVxuZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpc1tQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbF18fFxubWFrZVBhc3NTdHlsZU9mKFtcbkNvcHlBcnJheUhlbHBlcixcbkNvcHlSZWNvcmRIZWxwZXIsXG5UYWdnZWRIZWxwZXIsXG5FcnJvckhlbHBlcixcblJlbW90YWJsZUhlbHBlcl0pOyRozY9fb25jZS5wYXNzU3R5bGVPZihwYXNzU3R5bGVPZik7XG5cblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlPSh2YWwpPT57XG5wYXNzU3R5bGVPZih2YWwpOy8vXG4gfTskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGUoYXNzZXJ0UGFzc2FibGUpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlPShzcGVjaW1lbik9PntcbnRyeXtcbi8vXG4vL1xucmV0dXJuIHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PXVuZGVmaW5lZDtcbiB9Y2F0Y2goXyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH07JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG5oYXJkZW4oaXNQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0obmFtZSxkZXNjKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhuYW1lLGRlc2MscGFzc1N0eWxlT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvUGFzc2FibGVFcnJvcj0oZXJyKT0+e1xuaGFyZGVuKGVycik7XG5pZihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2YpKXtcbnJldHVybiBlcnI7XG4gfVxuY29uc3R7bmFtZSxtZXNzYWdlfT1lcnI7XG5jb25zdHtjYXVzZTpjYXVzZURlc2MsZXJyb3JzOmVycm9yc0Rlc2N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlcnIpO1xubGV0IGNhdXNlO1xubGV0IGVycm9ycztcbmlmKGNhdXNlRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdjYXVzZScsY2F1c2VEZXNjKSl7XG5jYXVzZT1jYXVzZURlc2MudmFsdWU7XG4gfVxuaWYoZXJyb3JzRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdlcnJvcnMnLGVycm9yc0Rlc2MpKXtcbmVycm9ycz1lcnJvcnNEZXNjLnZhbHVlO1xuIH1cblxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvciggYCR7bmFtZX1gKXx8RXJyb3I7XG5jb25zdCBuZXdFcnJvcj1tYWtlRXJyb3IoIGAke21lc3NhZ2V9YCxlcnJDb25zdHJ1Y3Rvcix7XG4vL1xuY2F1c2UsXG5lcnJvcnN9KTtcblxuLy9cbmhhcmRlbihuZXdFcnJvcik7XG4vL1xuLy9cbi8vXG5hbm5vdGF0ZUVycm9yKG5ld0Vycm9yLFggYGNvcGllZCBmcm9tIGVycm9yICR7ZXJyfWApO1xucGFzc1N0eWxlT2YobmV3RXJyb3IpPT09J2Vycm9yJ3x8XG5GYWlsIGBFeHBlY3RlZCAke25ld0Vycm9yfSB0byBiZSBhIHBhc3NhYmxlIGVycm9yYDtcbnJldHVybiBuZXdFcnJvcjtcbiB9OyRozY9fb25jZS50b1Bhc3NhYmxlRXJyb3IodG9QYXNzYWJsZUVycm9yKTtcbmhhcmRlbih0b1Bhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9UaHJvd2FibGU9KHNwZWNpbWVuKT0+e1xuaGFyZGVuKHNwZWNpbWVuKTtcbmlmKGlzRXJyb3JMaWtlKHNwZWNpbWVuKSl7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKC8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihpc09iamVjdChzcGVjaW1lbikpe1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgZWxlbWVudHM9LyogICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyl7XG5lbGVtZW50PT09dG9UaHJvd2FibGUoZWxlbWVudCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7ZWxlbWVudH1gO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmZvcihjb25zdCB2YWwgb2YgdmFsdWVzKHJlYykpe1xudmFsPT09dG9UaHJvd2FibGUodmFsKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHt2YWx9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGc9LyogICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuY29uc3R7cGF5bG9hZH09dGc7XG5wYXlsb2FkPT09dG9UaHJvd2FibGUocGF5bG9hZCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7cGF5bG9hZH1gO1xuYnJlYWs7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXI9LyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmVyPT09dG9UaHJvd2FibGUoZXIpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VyfWA7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYEEgJHtxKHBhc3NTdHlsZSl9IGlzIG5vdCB0aHJvd2FibGU6ICR7c3BlY2ltZW59YDtcbiB9fVxuXG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbik7XG4gfTskaM2PX29uY2UudG9UaHJvd2FibGUodG9UaHJvd2FibGUpO1xuaGFyZGVuKHRvVGhyb3dhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIjpbIlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIl0sInBhc3NTdHlsZU9mIjpbInBhc3NTdHlsZU9mIl0sImFzc2VydFBhc3NhYmxlIjpbImFzc2VydFBhc3NhYmxlIl0sImlzUGFzc2FibGUiOlsiaXNQYXNzYWJsZSJdLCJ0b1Bhc3NhYmxlRXJyb3IiOlsidG9QYXNzYWJsZUVycm9yIl0sInRvVGhyb3dhYmxlIjpbInRvVGhyb3dhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFKEe3qmFwAAphcAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvcmVtb3RhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJSZW1vdGFibGVIZWxwZXIiLCJhc3NlcnRJZmFjZSIsImdldEludGVyZmFjZU9mIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxhc3NlcnRDaGVja2VyLGNhbkJlTWV0aG9kLGhhc093blByb3BlcnR5T2YsUEFTU19TVFlMRSxjaGVja1RhZ1JlY29yZCxjaGVja0Z1bmN0aW9uVGFnUmVjb3JkLGlzT2JqZWN0LGdldFRhZyxDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcImNoZWNrRnVuY3Rpb25UYWdSZWNvcmRcIiwgWyRozY9fYSA9PiAoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZSxcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tJZmFjZT0oaWZhY2UsY2hlY2spPT57XG5yZXR1cm4oXG4vL1xuKHR5cGVvZiBpZmFjZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRm9yIG5vdywgaW50ZXJmYWNlICR7aWZhY2V9IG11c3QgYmUgYSBzdHJpbmc7IHVuaW1wbGVtZW50ZWRgKSYmKFxuaWZhY2U9PT0nUmVtb3RhYmxlJ3x8XG5pZmFjZS5zdGFydHNXaXRoKCdBbGxlZ2VkOiAnKXx8XG5pZmFjZS5zdGFydHNXaXRoKCdEZWJ1Z05hbWU6ICcpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBGb3Igbm93LCBpZmFjZSAke3EoXG5pZmFjZSlcbiB9IG11c3QgYmUgXCJSZW1vdGFibGVcIiBvciBiZWdpbiB3aXRoIFwiQWxsZWdlZDogXCIgb3IgXCJEZWJ1Z05hbWU6IFwiOyB1bmltcGxlbWVudGVkYCkpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRJZmFjZT0oaWZhY2UpPT5jaGVja0lmYWNlKGlmYWNlLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRJZmFjZShhc3NlcnRJZmFjZSk7XG5oYXJkZW4oYXNzZXJ0SWZhY2UpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZVByb3RvT2Y9KG9yaWdpbmFsLGNoZWNrKT0+e1xuaXNPYmplY3Qob3JpZ2luYWwpfHxcbkZhaWwgYFJlbW90YWJsZXMgbXVzdCBiZSBvYmplY3RzIG9yIGZ1bmN0aW9uczogJHtvcmlnaW5hbH1gO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKG9yaWdpbmFsKTtcbmlmKFxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxucHJvdG89PT1udWxsfHxcbnByb3RvPT09RnVuY3Rpb24ucHJvdG90eXBlKVxue1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlbW90YWJsZXMgbXVzdCBiZSBleHBsaWNpdGx5IGRlY2xhcmVkOiAke3Eob3JpZ2luYWwpfWApO1xuXG4gfVxuXG5pZih0eXBlb2Ygb3JpZ2luYWw9PT0nb2JqZWN0Jyl7XG5jb25zdCBwcm90b1Byb3RvPWdldFByb3RvdHlwZU9mKHByb3RvKTtcbmlmKHByb3RvUHJvdG8hPT1vYmplY3RQcm90b3R5cGUmJnByb3RvUHJvdG8hPT1udWxsKXtcbi8vXG5yZXR1cm4gY2hlY2tSZW1vdGFibGUocHJvdG8sY2hlY2spO1xuIH1cbmlmKCFjaGVja1RhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9ZWxzZSBpZih0eXBlb2Ygb3JpZ2luYWw9PT0nZnVuY3Rpb24nKXtcbmlmKCFjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cblxuLy9cbmNvbnN0IHBhc3NTdHlsZUtleT0vKiAgICAgICAgICAgICAgICAgICovUEFTU19TVFlMRTtcbmNvbnN0IHRhZ0tleT0vKiAgICAgICAgICAgICAgICAgICovU3ltYm9sLnRvU3RyaW5nVGFnO1xuY29uc3R7XG4vL1xuWy8qICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZUtleV06X3Bhc3NTdHlsZURlc2MsXG5bLyogICAgICAgICAgICAgICAgICovdGFnS2V5XTp7dmFsdWU6aWZhY2V9LFxuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pO1xuXG5yZXR1cm4oXG4ob3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIHByb3BlcnRpZXMgb24gUmVtb3RhYmxlIFByb3RvICR7b3duS2V5cyhyZXN0RGVzY3MpfWApJiZcbmNoZWNrSWZhY2UoaWZhY2UsY2hlY2spKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29uZmlybWVkUmVtb3RhYmxlcz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZT0odmFsLGNoZWNrKT0+e1xuaWYoY29uZmlybWVkUmVtb3RhYmxlcy5oYXModmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighaXNGcm96ZW4odmFsKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZDWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHt2YWx9YCk7XG5cbiB9XG4vL1xuaWYoIVJlbW90YWJsZUhlbHBlci5jYW5CZVZhbGlkKHZhbCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHJlc3VsdD1jaGVja1JlbW90YWJsZVByb3RvT2YodmFsLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb25maXJtZWRSZW1vdGFibGVzLmFkZCh2YWwpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlT2Y9KHZhbCk9PntcbmlmKFxuIWlzT2JqZWN0KHZhbCl8fFxudmFsW1BBU1NfU1RZTEVdIT09J3JlbW90YWJsZSd8fFxuIWNoZWNrUmVtb3RhYmxlKHZhbCkpXG57XG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xucmV0dXJuIGdldFRhZyh2YWwpO1xuIH07JGjNj19vbmNlLmdldEludGVyZmFjZU9mKGdldEludGVyZmFjZU9mKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VPZik7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3JlbW90YWJsZScsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5jb25zdCB2YWxpZFR5cGU9XG4oaXNPYmplY3QoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tb2JqZWN0cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCkmJihcbiFpc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgYXJyYXlzIGFzIFJlbW90YWJsZSAke2NhbmRpZGF0ZX1gKTtcbmlmKCF2YWxpZFR5cGUpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYodHlwZW9mIGNhbmRpZGF0ZT09PSdvYmplY3QnKXtcbi8vXG4vL1xucmV0dXJuIG93bktleXMoZGVzY3MpLmV2ZXJ5KChrZXkpPT57XG5yZXR1cm4oXG4vL1xuKGhhc093blByb3BlcnR5T2YoZGVzY3NbLyogICAgICAgICAgICAgICAgICova2V5XSwndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggYWNjZXNzb3JzIGxpa2UgJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpbiAke2NhbmRpZGF0ZX1gKSYmKFxua2V5PT09U3ltYm9sLnRvU3RyaW5nVGFnJiZjaGVja0lmYWNlKGNhbmRpZGF0ZVtrZXldLGNoZWNrKXx8XG4oY2FuQmVNZXRob2QoY2FuZGlkYXRlW2tleV0pfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIFJlbW90YWJsZXMgd2l0aCBub24tbWV0aG9kcyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleSE9PVBBU1NfU1RZTEV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgcGFzcy1ieS1yZW1vdGUgY2Fubm90IHNoYWRvdyAke3EoUEFTU19TVFlMRSl9YCkpKTtcblxuIH0pO1xuIH1lbHNlIGlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nZnVuY3Rpb24nKXtcbi8vXG4vL1xuY29uc3R7XG5uYW1lOm5hbWVEZXNjLFxubGVuZ3RoOmxlbmd0aERlc2MsXG4vL1xuW1N5bWJvbC50b1N0cmluZ1RhZ106dG9TdHJpbmdUYWdEZXNjLFxuLi4ucmVzdERlc2NzfT1cbmRlc2NzO1xuY29uc3QgcmVzdEtleXM9b3duS2V5cyhyZXN0RGVzY3MpO1xucmV0dXJuKFxuKG5hbWVEZXNjJiZ0eXBlb2YgbmFtZURlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRmFyIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgaW4gJHtjYW5kaWRhdGV9YCkmJihcbmxlbmd0aERlc2MmJnR5cGVvZiBsZW5ndGhEZXNjLnZhbHVlPT09J251bWJlcid8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gbGVuZ3RoIG11c3QgYmUgYSBudW1iZXIsIGluICR7Y2FuZGlkYXRlfWApJiYoXG50b1N0cmluZ1RhZ0Rlc2M9PT11bmRlZmluZWR8fFxuKHR5cGVvZiB0b1N0cmluZ1RhZ0Rlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbiBAQHRvU3RyaW5nVGFnIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiZcbmNoZWNrSWZhY2UodG9TdHJpbmdUYWdEZXNjLnZhbHVlLGNoZWNrKSkmJihcbnJlc3RLZXlzLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb25zIHVuZXhwZWN0ZWQgcHJvcGVydGllcyBiZXNpZGVzIC5uYW1lIGFuZCAubGVuZ3RoICR7cmVzdEtleXN9YCkpO1xuXG4gfVxucmV0dXJuISFjaGVjayYmQ1goY2hlY2spIGB1bnJlY29nbml6ZWQgdHlwZW9mICR7Y2FuZGlkYXRlfWA7XG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSk9PmNoZWNrUmVtb3RhYmxlKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKSxcblxuZXZlcnk6KF9wYXNzYWJsZSxfZm4pPT50cnVlfSk7JGjNj19vbmNlLlJlbW90YWJsZUhlbHBlcihSZW1vdGFibGVIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0SWZhY2UiOlsiYXNzZXJ0SWZhY2UiXSwiZ2V0SW50ZXJmYWNlT2YiOlsiZ2V0SW50ZXJmYWNlT2YiXSwiUmVtb3RhYmxlSGVscGVyIjpbIlJlbW90YWJsZUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3NhZmUtcHJvbWlzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRTYWZlUHJvbWlzZSIsImlzU2FmZVByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLHEsYXNzZXJ0Q2hlY2tlcixoYXNPd25Qcm9wZXJ0eU9mLENYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtpc0Zyb3plbixnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZ309U3ltYm9sO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb21pc2VPd25LZXlzPShwcixjaGVjayk9PntcbmNvbnN0IGtleXM9b3duS2V5cyhwcik7XG5cbmlmKGtleXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB1bmtub3duS2V5cz1rZXlzLmZpbHRlcihcbihrZXkpPT50eXBlb2Yga2V5IT09J3N5bWJvbCd8fCFoYXNPd25Qcm9wZXJ0eU9mKFByb21pc2UucHJvdG90eXBlLGtleSkpO1xuXG5cbmlmKHVua25vd25LZXlzLmxlbmd0aCE9PTApe1xucmV0dXJuIENYKFxuY2hlY2spXG4gYCR7cHJ9IC0gTXVzdCBub3QgaGF2ZSBhbnkgb3duIHByb3BlcnRpZXM6ICR7cSh1bmtub3duS2V5cyl9YDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1NhZmVPd25LZXk9KGtleSk9PntcbmlmKGtleT09PXRvU3RyaW5nVGFnKXtcbi8vXG4vL1xuY29uc3QgdGFnRGVzYz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHIsdG9TdHJpbmdUYWcpO1xuYXNzZXJ0KHRhZ0Rlc2MhPT11bmRlZmluZWQpO1xucmV0dXJuKFxuKGhhc093blByb3BlcnR5T2YodGFnRGVzYywndmFsdWUnKXx8XG5DWChcbmNoZWNrKVxuIGBPd24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eSwgbm90IGFuIGFjY2Vzc29yOiAke3EodGFnRGVzYyl9YCkmJihcbnR5cGVvZiB0YWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJHtxKHRhZ0Rlc2MudmFsdWUpfWApJiYoXG4hdGFnRGVzYy5lbnVtZXJhYmxlfHxcbkNYKGNoZWNrKSBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtxKHRhZ0Rlc2MpfWApKTtcblxuIH1cbmNvbnN0IHZhbD1wcltrZXldO1xuaWYodmFsPT09dW5kZWZpbmVkfHx0eXBlb2YgdmFsPT09J251bWJlcicpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoXG50eXBlb2YgdmFsPT09J29iamVjdCcmJlxudmFsIT09bnVsbCYmXG5pc0Zyb3plbih2YWwpJiZcbmdldFByb3RvdHlwZU9mKHZhbCk9PT1PYmplY3QucHJvdG90eXBlKVxue1xuY29uc3Qgc3ViS2V5cz1vd25LZXlzKHZhbCk7XG5pZihzdWJLZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG5pZihcbnN1YktleXMubGVuZ3RoPT09MSYmXG5zdWJLZXlzWzBdPT09J2Rlc3Ryb3llZCcmJlxudmFsLmRlc3Ryb3llZD09PWZhbHNlKVxue1xucmV0dXJuIHRydWU7XG4gfVxuIH1cbnJldHVybiBDWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIE5vZGUgYXN5bmNfaG9va3MgYWRkaXRpb25zIHRvIHByb21pc2U6ICR7cHJ9LiR7cShcblN0cmluZyhrZXkpKVxuIH0gaXMgJHt2YWx9YDtcbiB9O1xuXG5yZXR1cm4ga2V5cy5ldmVyeShjaGVja1NhZmVPd25LZXkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja1NhZmVQcm9taXNlPShwcixjaGVjayk9PntcbnJldHVybihcbihpc0Zyb3plbihwcil8fENYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGJlIGZyb3plbmApJiYoXG5pc1Byb21pc2UocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBhIHByb21pc2VgKSYmKFxuZ2V0UHJvdG90eXBlT2YocHIpPT09UHJvbWlzZS5wcm90b3R5cGV8fFxuQ1goY2hlY2spIGAke3ByfSAtIE11c3QgaW5oZXJpdCBmcm9tIFByb21pc2UucHJvdG90eXBlOiAke3EoXG5nZXRQcm90b3R5cGVPZihwcikpXG4gfWApJiZcbmNoZWNrUHJvbWlzZU93bktleXMoLyogICAgICAgICAgICAgICAgICAqL3ByLGNoZWNrKSk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrU2FmZVByb21pc2UpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1NhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsKHgpPT54KTskaM2PX29uY2UuaXNTYWZlUHJvbWlzZShpc1NhZmVQcm9taXNlKTtcbmhhcmRlbihpc1NhZmVQcm9taXNlKTtcblxuY29uc3QgICAgICAgIGFzc2VydFNhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsYXNzZXJ0Q2hlY2tlcik7JGjNj19vbmNlLmFzc2VydFNhZmVQcm9taXNlKGFzc2VydFNhZmVQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzU2FmZVByb21pc2UiOlsiaXNTYWZlUHJvbWlzZSJdLCJhc3NlcnRTYWZlUHJvbWlzZSI6WyJhc3NlcnRTYWZlUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACYl18ssgcAALIHAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3N0cmluZy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8vXG5jb25zdCBoYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kPSEhU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXZWxsRm9ybWVkU3RyaW5nPWhhc1dlbGxGb3JtZWRTdHJpbmdNZXRob2Q/XG4oc3RyKT0+dHlwZW9mIHN0cj09PSdzdHJpbmcnJiZzdHIuaXNXZWxsRm9ybWVkKCk6XG4oc3RyKT0+e1xuaWYodHlwZW9mIHN0ciE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IoY29uc3QgY2ggb2Ygc3RyKXtcbi8vXG4vL1xuLy9cbmNvbnN0IGNwPS8qICAgICAgICAgICAgICAgICAqL2NoLmNvZGVQb2ludEF0KDApO1xuaWYoY3A+PTB4ZDgwMCYmY3A8PTB4ZGZmZil7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzV2VsbEZvcm1lZFN0cmluZyhpc1dlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGlzV2VsbEZvcm1lZFN0cmluZyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0V2VsbEZvcm1lZFN0cmluZz0oc3RyKT0+e1xuaXNXZWxsRm9ybWVkU3RyaW5nKHN0cil8fEZhaWwgYEV4cGVjdGVkIHdlbGwtZm9ybWVkIHVuaWNvZGUgc3RyaW5nOiAke3N0cn1gO1xuIH07JGjNj19vbmNlLmFzc2VydFdlbGxGb3JtZWRTdHJpbmcoYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5cbmNvbnN0IE9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRT1cbmdldEVudmlyb25tZW50T3B0aW9uKCdPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEUnLCdkaXNhYmxlZCcsW1xuJ2VuYWJsZWQnXSk9PT1cbidlbmFibGVkJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3RyaW5nPShzdHIpPT57XG50eXBlb2Ygc3RyPT09J3N0cmluZyd8fEZhaWwgYEV4cGVjdGVkIHN0cmluZyAke3N0cn1gO1xuIU9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRXx8YXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhzdHIpO1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlU3RyaW5nKGFzc2VydFBhc3NhYmxlU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1dlbGxGb3JtZWRTdHJpbmciOlsiaXNXZWxsRm9ybWVkU3RyaW5nIl0sImFzc2VydFdlbGxGb3JtZWRTdHJpbmciOlsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRQYXNzYWJsZVN0cmluZyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABmP1mV/AkAAPwJAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3N5bWJvbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCB3ZWxsS25vd25TeW1ib2xOYW1lcz1uZXcgTWFwKFxub3duS2V5cyhTeW1ib2wpLlxuZmlsdGVyKFxuKG5hbWUpPT50eXBlb2YgbmFtZT09PSdzdHJpbmcnJiZ0eXBlb2YgU3ltYm9sW25hbWVdPT09J3N5bWJvbCcpLlxuXG5maWx0ZXIoKG5hbWUpPT57XG4vL1xuIW5hbWUuc3RhcnRzV2l0aCgnQEAnKXx8XG5GYWlsIGBEaWQgbm90IGV4cGVjdCBTeW1ib2wgdG8gaGF2ZSBhIHN5bWJvbC12YWx1ZWQgcHJvcGVydHkgbmFtZSBzdGFydGluZyB3aXRoIFwiQEBcIiAke3EoXG5uYW1lKVxuIH1gO1xucmV0dXJuIHRydWU7XG4gfSlcbi8vXG4ubWFwKChuYW1lKT0+W1N5bWJvbFtuYW1lXSwgYEBAJHtuYW1lfWBdKSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGVTeW1ib2w9KHN5bSk9PlxudHlwZW9mIHN5bT09PSdzeW1ib2wnJiYoXG50eXBlb2YgU3ltYm9sLmtleUZvcihzeW0pPT09J3N0cmluZyd8fHdlbGxLbm93blN5bWJvbE5hbWVzLmhhcyhzeW0pKTskaM2PX29uY2UuaXNQYXNzYWJsZVN5bWJvbChpc1Bhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihpc1Bhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3ltYm9sPShzeW0pPT5cbmlzUGFzc2FibGVTeW1ib2woc3ltKXx8XG5GYWlsIGBPbmx5IHJlZ2lzdGVyZWQgc3ltYm9scyBvciB3ZWxsLWtub3duIHN5bWJvbHMgYXJlIHBhc3NhYmxlOiAke3Eoc3ltKX1gOyRozY9fb25jZS5hc3NlcnRQYXNzYWJsZVN5bWJvbChhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBuYW1lRm9yUGFzc2FibGVTeW1ib2w9KHN5bSk9PntcbmNvbnN0IG5hbWU9U3ltYm9sLmtleUZvcihzeW0pO1xuaWYobmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gd2VsbEtub3duU3ltYm9sTmFtZXMuZ2V0KHN5bSk7XG4gfVxuaWYobmFtZS5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBgQEAke25hbWV9YDtcbiB9XG5yZXR1cm4gbmFtZTtcbiB9OyRozY9fb25jZS5uYW1lRm9yUGFzc2FibGVTeW1ib2wobmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihuYW1lRm9yUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXNzYWJsZVN5bWJvbEZvck5hbWU9KG5hbWUpPT57XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY29uc3QgbWF0Y2g9QXRBdFByZWZpeFBhdHRlcm4uZXhlYyhuYW1lKTtcbmlmKG1hdGNoKXtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmlmKHN1ZmZpeC5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBTeW1ib2wuZm9yKHN1ZmZpeCk7XG4gfWVsc2V7XG5jb25zdCBzeW09U3ltYm9sW3N1ZmZpeF07XG5pZih0eXBlb2Ygc3ltPT09J3N5bWJvbCcpe1xucmV0dXJuIHN5bTtcbiB9XG5GYWlsIGBSZXNlcnZlZCBmb3Igd2VsbCBrbm93biBzeW1ib2wgJHtxKHN1ZmZpeCl9OiAke3EobmFtZSl9YDtcbiB9XG4gfVxucmV0dXJuIFN5bWJvbC5mb3IobmFtZSk7XG4gfTskaM2PX29uY2UucGFzc2FibGVTeW1ib2xGb3JOYW1lKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG5oYXJkZW4ocGFzc2FibGVTeW1ib2xGb3JOYW1lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUGFzc2FibGVTeW1ib2wiOlsiaXNQYXNzYWJsZVN5bWJvbCJdLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiOlsibmFtZUZvclBhc3NhYmxlU3ltYm9sIl0sInBhc3NhYmxlU3ltYm9sRm9yTmFtZSI6WyJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAYNVjnhQHAAAUBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy90YWdnZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIlRhZ2dlZEhlbHBlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLGFzc2VydENoZWNrZXIsY2hlY2tUYWdSZWNvcmQsUEFTU19TVFlMRSxnZXRPd25EYXRhRGVzY3JpcHRvcixjaGVja1Bhc3NTdHlsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJjaGVja1Bhc3NTdHlsZVwiLCBbJGjNj19hID0+IChjaGVja1Bhc3NTdHlsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgVGFnZ2VkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3RhZ2dlZCcsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmNoZWNrUGFzc1N0eWxlKGNhbmRpZGF0ZSxjYW5kaWRhdGVbUEFTU19TVFlMRV0sJ3RhZ2dlZCcsY2hlY2spLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja1RhZ1JlY29yZChjYW5kaWRhdGUsJ3RhZ2dlZCcsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06X2xhYmVsRGVzYyxcbnBheWxvYWQ6X3BheWxvYWREZXNjLC8vXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xub3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuRmFpbCBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIHRhZ2dlZCByZWNvcmQgJHtvd25LZXlzKHJlc3REZXNjcyl9YDtcblxuLy9cbi8vXG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdwYXlsb2FkJyx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH19KTskaM2PX29uY2UuVGFnZ2VkSGVscGVyKFRhZ2dlZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUYWdnZWRIZWxwZXIiOlsiVGFnZ2VkSGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZU9mLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0UmVjb3JkIiwiYXNzZXJ0UmVtb3RhYmxlIiwiaXNDb3B5QXJyYXkiLCJpc1JlY29yZCIsImlzUmVtb3RhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxwYXNzU3R5bGVPZjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNDb3B5QXJyYXk9KGFycik9PnBhc3NTdHlsZU9mKGFycik9PT0nY29weUFycmF5JzskaM2PX29uY2UuaXNDb3B5QXJyYXkoaXNDb3B5QXJyYXkpO1xuaGFyZGVuKGlzQ29weUFycmF5KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVjb3JkPShyZWNvcmQpPT5wYXNzU3R5bGVPZihyZWNvcmQpPT09J2NvcHlSZWNvcmQnOyRozY9fb25jZS5pc1JlY29yZChpc1JlY29yZCk7XG5oYXJkZW4oaXNSZWNvcmQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVtb3RhYmxlPShyZW1vdGFibGUpPT5wYXNzU3R5bGVPZihyZW1vdGFibGUpPT09J3JlbW90YWJsZSc7JGjNj19vbmNlLmlzUmVtb3RhYmxlKGlzUmVtb3RhYmxlKTtcbmhhcmRlbihpc1JlbW90YWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvcHlBcnJheT0oYXJyYXksb3B0TmFtZU9mQXJyYXk9J0FsbGVnZWQgYXJyYXknKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKGFycmF5KTtcbnBhc3NTdHlsZT09PSdjb3B5QXJyYXknfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZBcnJheSl9ICR7YXJyYXl9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weUFycmF5KGFzc2VydENvcHlBcnJheSk7XG5oYXJkZW4oYXNzZXJ0Q29weUFycmF5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UmVjb3JkPShyZWNvcmQsb3B0TmFtZU9mUmVjb3JkPSdBbGxlZ2VkIHJlY29yZCcpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmVjb3JkKTtcbnBhc3NTdHlsZT09PSdjb3B5UmVjb3JkJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVjb3JkKX0gJHtyZWNvcmR9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgcmVjb3JkLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlY29yZChhc3NlcnRSZWNvcmQpO1xuaGFyZGVuKGFzc2VydFJlY29yZCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlbW90YWJsZT0oXG5yZW1vdGFibGUsXG5vcHROYW1lT2ZSZW1vdGFibGU9J0FsbGVnZWQgcmVtb3RhYmxlJyk9Plxue1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlbW90YWJsZSk7XG5wYXNzU3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVtb3RhYmxlKX0gJHtyZW1vdGFibGV9IG11c3QgYmUgYSByZW1vdGFibGUsIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UmVtb3RhYmxlKGFzc2VydFJlbW90YWJsZSk7XG5oYXJkZW4oYXNzZXJ0UmVtb3RhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weUFycmF5IjpbImlzQ29weUFycmF5Il0sImlzUmVjb3JkIjpbImlzUmVjb3JkIl0sImlzUmVtb3RhYmxlIjpbImlzUmVtb3RhYmxlIl0sImFzc2VydENvcHlBcnJheSI6WyJhc3NlcnRDb3B5QXJyYXkiXSwiYXNzZXJ0UmVjb3JkIjpbImFzc2VydFJlY29yZCJdLCJhc3NlcnRSZW1vdGFibGUiOlsiYXNzZXJ0UmVtb3RhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANIBosRCBgAAQgYAACEAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLCIuL3NyYy9tZW1vLXJhY2UuanMiLCIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlUHJvbWlzZUtpdCIsInJhY2VQcm9taXNlcyJdLCJyZWV4cG9ydHMiOlsiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCxtZW1vUmFjZTskaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzXCIsIFtbXCJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvbWVtby1yYWNlLmpzXCIsIFtbXCJtZW1vUmFjZVwiLCBbJGjNj19hID0+IChtZW1vUmFjZSA9ICRozY9fYSldXV1dLFtcIi4vc3JjL2lzLXByb21pc2UuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlUHJvbWlzZUtpdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVByb21pc2VLaXRcIn0pOyRozY9fb25jZS5tYWtlUHJvbWlzZUtpdChtYWtlUHJvbWlzZUtpdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJhY2VQcm9taXNlcywgJ25hbWUnLCB7dmFsdWU6IFwicmFjZVByb21pc2VzXCJ9KTskaM2PX29uY2UucmFjZVByb21pc2VzKHJhY2VQcm9taXNlcyk7ICAgXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBCZXN0UGlwZWxpbmFibGVQcm9taXNlPWdsb2JhbFRoaXMuSGFuZGxlZFByb21pc2V8fFByb21pc2U7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlUHJvbWlzZUtpdCgpe1xuY29uc3R7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9PW1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCgpO1xuXG5jb25zdCBwcm9taXNlPW5ldyBCZXN0UGlwZWxpbmFibGVQcm9taXNlKGV4ZWN1dG9yKTtcblxucmV0dXJuIGhhcmRlbih7cHJvbWlzZSxyZXNvbHZlLHJlamVjdH0pO1xuIH1cbmhhcmRlbihtYWtlUHJvbWlzZUtpdCk7XG5cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHJhY2VQcm9taXNlcyh2YWx1ZXMpe1xucmV0dXJuIGhhcmRlbihtZW1vUmFjZS5jYWxsKEJlc3RQaXBlbGluYWJsZVByb21pc2UsdmFsdWVzKSk7XG4gfVxuaGFyZGVuKHJhY2VQcm9taXNlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZUtpdCI6WyJtYWtlUHJvbWlzZUtpdCJdLCJyYWNlUHJvbWlzZXMiOlsicmFjZVByb21pc2VzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALNdW0ZVAgAAVQIAACoAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL2lzLXByb21pc2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImlzUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaM2PX29uY2UuaXNQcm9taXNlKGlzUHJvbWlzZSk7ICAgLypcblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgaXNQcm9taXNlKG1heWJlUHJvbWlzZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZSk9PT1tYXliZVByb21pc2U7XG4gfVxuaGFyZGVuKGlzUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Byb21pc2UiOlsiaXNQcm9taXNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPpm8JGcBwAAnAcAACkAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL21lbW8tcmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWVtb1JhY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4qL1xuXG5jb25zdCBpc09iamVjdD0odmFsdWUpPT5PYmplY3QodmFsdWUpPT09dmFsdWU7XG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBrbm93blByb21pc2VzPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYXJrU2V0dGxlZD0ocmVjb3JkKT0+e1xuaWYoIXJlY29yZHx8cmVjb3JkLnNldHRsZWQpe1xucmV0dXJuIG5ldyBTZXQoKTtcbiB9XG5cbmNvbnN0e2RlZmVycmVkc309cmVjb3JkO1xuT2JqZWN0LmFzc2lnbihyZWNvcmQse1xuZGVmZXJyZWRzOnVuZGVmaW5lZCxcbnNldHRsZWQ6dHJ1ZX0pO1xuXG5PYmplY3QuZnJlZXplKHJlY29yZCk7XG5yZXR1cm4gZGVmZXJyZWRzO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGdldE1lbW9SZWNvcmQ9KHZhbHVlKT0+e1xuaWYoIWlzT2JqZWN0KHZhbHVlKSl7XG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7c2V0dGxlZDp0cnVlfSk7XG4gfVxuXG5sZXQgcmVjb3JkPWtub3duUHJvbWlzZXMuZ2V0KHZhbHVlKTtcblxuaWYoIXJlY29yZCl7XG5yZWNvcmQ9e2RlZmVycmVkczpuZXcgU2V0KCksc2V0dGxlZDpmYWxzZX07XG5rbm93blByb21pc2VzLnNldCh2YWx1ZSxyZWNvcmQpO1xuLy9cblByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihcbih2YWwpPT57XG5mb3IoY29uc3R7cmVzb2x2ZX1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlc29sdmUodmFsKTtcbiB9XG4gfSxcbihlcnIpPT57XG5mb3IoY29uc3R7cmVqZWN0fW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVqZWN0KGVycik7XG4gfVxuIH0pO1xuXG4gfVxucmV0dXJuIHJlY29yZDtcbiB9O1xuXG5jb25zdHtyYWNlfT17XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5yYWNlKHZhbHVlcyl7XG5sZXQgZGVmZXJyZWQ7XG4vKiAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBjYWNoZWRWYWx1ZXM9W107XG5jb25zdCBDPXRoaXM7XG5jb25zdCByZXN1bHQ9bmV3IEMoKHJlc29sdmUscmVqZWN0KT0+e1xuZGVmZXJyZWQ9e3Jlc29sdmUscmVqZWN0fTtcbmZvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe1xuY2FjaGVkVmFsdWVzLnB1c2godmFsdWUpO1xuY29uc3R7c2V0dGxlZCxkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoc2V0dGxlZCl7XG4vL1xuLy9cbkMucmVzb2x2ZSh2YWx1ZSkudGhlbihyZXNvbHZlLHJlamVjdCk7XG4gfWVsc2V7XG5kZWZlcnJlZHMuYWRkKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuXG4vL1xuLy9cbnJldHVybiByZXN1bHQuZmluYWxseSgoKT0+e1xuZm9yKGNvbnN0IHZhbHVlIG9mIGNhY2hlZFZhbHVlcyl7XG5jb25zdHtkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoZGVmZXJyZWRzKXtcbmRlZmVycmVkcy5kZWxldGUoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG4gfX07JGjNj19vbmNlLnJhY2UocmFjZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtZW1vUmFjZSI6WyJyYWNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJxtxLJ8BQAAfAUAADQAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlc29sdmU7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZWplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlPSh2YWx1ZSk9PntcbmlmKGludGVybmFsUmVzb2x2ZSl7XG5pbnRlcm5hbFJlc29sdmUodmFsdWUpO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PW51bGwpO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlamVjdD0ocmVhc29uKT0+e1xuaWYoaW50ZXJuYWxSZWplY3Qpe1xuaW50ZXJuYWxSZWplY3QocmVhc29uKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlamVjdD09PW51bGwpO1xuIH1cbiB9O1xuXG5jb25zdCBleGVjdXRvcj0ocmVzLHJlaik9PntcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT11bmRlZmluZWQmJmludGVybmFsUmVqZWN0PT09dW5kZWZpbmVkKTtcbmludGVybmFsUmVzb2x2ZT1yZXM7XG5pbnRlcm5hbFJlamVjdD1yZWo7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9KTtcbiB9OyRozY9fb25jZS5tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbmhhcmRlbihtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0IjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAlAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAQIeAwoAAAAAAAAAAACNxhnflG8AAJRvAAAUAAAAAAAAAAAAAACkgQAAAABjb21wYXJ0bWVudC1tYXAuanNvblBLAQIeAwoAAAAAAAAAAADOO96XzAQAAMwEAAA6AAAAAAAAAAAAAACkgcZvAABAYWdvcmljL3ZhdHMtdjAuMTUuMS9zcmMvcHJvcG9zYWxzL3VwZ3JhZGUtem9lLXByb3Bvc2FsLmpzUEsBAh4DCgAAAAAAAAAAAMUY5zqUAQAAlAEAACEAAAAAAAAAAAAAAKSB6nQAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACSt0d+7A0AAOwNAAArAAAAAAAAAAAAAACkgb12AABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjcvc3JjL2Vudi1vcHRpb25zLmpzUEsBAh4DCgAAAAAAAAAAAPxwaTHfBwAA3wcAABwAAAAAAAAAAAAAAKSB8oQAAEBlbmRvL2Vycm9ycy12MS4yLjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAfl1VK6UQAAClEAAAIwAAAAAAAAAAAAAApIELjQAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL0UuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKQAAAAAAAAAAAAAApIHxnQAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL2V4cG9ydHMuanNQSwECHgMKAAAAAAAAAAAAECDjrKoMAACqDAAAJwAAAAAAAAAAAAAApIGCnwAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL2xvY2FsLmpzUEsBAh4DCgAAAAAAAAAAAAGOcEzpDAAA6QwAADUAAAAAAAAAAAAAAKSBcawAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzUEsBAh4DCgAAAAAAAAAAABlsu0UzAwAAMwMAACkAAAAAAAAAAAAAAKSBrbkAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9uby1zaGltLmpzUEsBAh4DCgAAAAAAAAAAAIaopsdfCQAAXwkAAC0AAAAAAAAAAAAAAKSBJ70AAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy90cmFjay10dXJucy5qc1BLAQIeAwoAAAAAAAAAAAA/8Oc6VgIAAFYCAAAjAAAAAAAAAAAAAACkgdHGAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy91dGlscy5qc1BLAQIeAwoAAAAAAAAAAAALSpg4VgIAAFYCAAAdAAAAAAAAAAAAAACkgWjJAABAZW5kby9mYXItdjEuMS44L3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAChKaq8PwoAAD8KAAAgAAAAAAAAAAAAAACkgfnLAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACXqL8lVAYAAFQGAAAoAAAAAAAAAAAAAACkgXbWAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvY29weUFycmF5LmpzUEsBAh4DCgAAAAAAAAAAADLPSrUpCAAAKQgAACkAAAAAAAAAAAAAAKSBEN0AAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9jb3B5UmVjb3JkLmpzUEsBAh4DCgAAAAAAAAAAAHAi5XpWCgAAVgoAAC4AAAAAAAAAAAAAAKSBgOUAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9kZWVwbHlGdWxmaWxsZWQuanNQSwECHgMKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAAAAAAAAAAAApIEi8AAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2Vycm9yLmpzUEsBAh4DCgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAAAAAAAAAAAAAKSBmAIBAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9pdGVyLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAAAAAAAAAAAApIFwCAEAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL21ha2UtZmFyLmpzUEsBAh4DCgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAAAAAAAAAAAAAKSB9hkBAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9tYWtlVGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAA0ikncUFQAAFBUAADAAAAAAAAAAAAAAAKSBvR4BAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAAAAAAAAAAACkgR80AQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvcGFzc1N0eWxlT2YuanNQSwECHgMKAAAAAAAAAAAAUoR7eqYXAACmFwAAKAAAAAAAAAAAAAAApIEXWQEAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3JlbW90YWJsZS5qc1BLAQIeAwoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAAAAAAAAAAACkgQNxAQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvc2FmZS1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAJiXXyyyBwAAsgcAACUAAAAAAAAAAAAAAKSB0n0BAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9zdHJpbmcuanNQSwECHgMKAAAAAAAAAAAAZj9ZlfwJAAD8CQAAJQAAAAAAAAAAAAAApIHHhQEAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3N5bWJvbC5qc1BLAQIeAwoAAAAAAAAAAABg1WOeFAcAABQHAAAlAAAAAAAAAAAAAACkgQaQAQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAAAAAAAAAAAAAKSBXZcBAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAAAAAAAAAAAAAKSBoqABAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADSAaLEQgYAAEIGAAAhAAAAAAAAAAAAAACkgS6iAQBAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAs11bRlUCAABVAgAAKgAAAAAAAAAAAAAApIGvqAEAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy9pcy1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAPpm8JGcBwAAnAcAACkAAAAAAAAAAAAAAKSBTKsBAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9zcmMvbWVtby1yYWNlLmpzUEsBAh4DCgAAAAAAAAAAAJxtxLJ8BQAAfAUAADQAAAAAAAAAAAAAAKSBL7MBAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJQAAAAAAAAAAAAAApIH9uAEAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy90eXBlcy5qc1BLBQYAAAAAIwAjALILAACKugEAAAA=", + "endoZipBase64Sha512": "09b92c35ba08e8d3625eb04796ab70cd02cf9ef3bfd79e8f256b419afb644e4a9e9e4b06c068abe2ecc2769a53a55024a27851ec7bfeb13e79b3781d0b961597" +} \ No newline at end of file diff --git a/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/b1-a6e125677dde1b87dbe7e533d30381d5ae7fc49d2df323923ac0e9912fd01149ee885b9f8be7d76451325ca9c6de8518def0eae366118788b68313e61aa7a1f0.json b/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/b1-a6e125677dde1b87dbe7e533d30381d5ae7fc49d2df323923ac0e9912fd01149ee885b9f8be7d76451325ca9c6de8518def0eae366118788b68313e61aa7a1f0.json new file mode 100644 index 000000000..e5395dd57 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/b1-a6e125677dde1b87dbe7e533d30381d5ae7fc49d2df323923ac0e9912fd01149ee885b9f8be7d76451325ca9c6de8518def0eae366118788b68313e61aa7a1f0.json @@ -0,0 +1,5 @@ +{ + "moduleFormat": "endoZipBase64", + "endoZipBase64": "UEsDBAoAAAAAAAAAAAA1CH2q/sgBAP7IAQAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgIm1vZHVsZSI6ICIuL3NyYy92YXQtem9lLmpzIgogIH0sCiAgImNvbXBhcnRtZW50cyI6IHsKICAgICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvYmFzZS16b25lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvdG9vbHMvKiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLyoiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvem9uZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vem9uZS1oZWxwZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vaGVhcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJoZWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2U0ZjMwMDAwMDgzMGIwZDQwYTQ1ZDFkNDUxM2RmODFlMTRiMzUzMWU0YjBiMWMzMzU2N2FkNGQ2YzFjMjI1NDQ0YjYyN2ViYjIzODQ5ZTIwYjgwNzM5ZDYyOTBiYTRmYTVlN2Y4NjgzNDc0Yzc4MGQxZGMzYmE1NDA3MDU2MDQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2hlYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2hlYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhM2ZmMDZjMjY1YjM4NmU3YTBkOTBlMTdkZjQwZDc5OTU0YjFhMTE4N2U5ZDY0OGUxODg4NDdiYWJjNzZkYTM1ZWJkYzkzNjE0MWZlYWUzZTE4ZTNhZTMwYzc4YmQ5MmY3ZTgyMjZmYmNhMTRhZjhkM2Q3ODRlOWJiNjFkYjk2ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkMWJjYmRkYTQ3M2Y3ZmQ0MjVlNDdjMzMxODA5NTZkZjEzYmNjYzRjNWU4ZjhlODk5ZmQ0YjlmNWUyODg3YTcxZTg4ZTcxZGMwM2UwOWRmMTg5MGRiZWM0ODI5ODVkMjVhYjJhOTlhMjhmOWE5OWY0NmQzODU4Y2QyN2RiYjMzOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MWQyYTg1ZjliMjg5MDc3N2E4MTBjY2VhNzQyY2YzNTg4NmVlMDQ3NDdmMDJjZjRkNjM2NzU0MzU3MjRjYWRhMDBkMThmYWE1NjcxNTZiNmMzMWU5YWNkZjQwNzdlNzk1MDYwZjIyNzEzZDVjN2QwMDRiZGZhZWMxOTgxMDMzZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTA1ZTg3NTdjNzE1MDY5NmRjZjk0NTNiY2ZlNmI0MjM4MDk0MTQ0NDAzODQ2OTc2MzU1MjM4NDAxNjVhZDY2YWI2OTA2M2FhYmQ3NmQyNmNlMzc3MjBmNDFhZjE5N2FmNjE3NzgyYWIyMjMzZmIxZmQyMWMzNDhjZTNlNmY1Y2MiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1vbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLW9uY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODM5ZGJmMTg0NjFlYmVlM2NjNzE0NjYzMmE3NDk3ZTYwNGMyMGI5Yjc1OGZhMGE2Zjc5NjZiNmMyNTVjODhmNDI1Y2IyZjIzNjIyNjM2ZDlkOWE2MGExM2E1ZmVmYTc3MjkzZGJiNzY4ODRhZjVkMDk4MDNhNzU3ZmRiOGYxMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy93YXRjaC1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy93YXRjaC1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDVlZDc3Yzc0ZTczYjM4ZjJkODBkYjYzMDIyZmI4NGM0NTVkNzI5YTI1YjI3ZTZjZjg4NWMxMzQwODkzYWU5YzFiNWFlN2U1NmIzYjZhYWZmNDIwMzk5MTAwMTgxMzVlMmQyOTYyOWYxYmRhNmI0ZTdiMGI0MzRlODE4ZTNmYWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvZXJ0cC12MC4xNi4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2VydHAiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvZXhwb3J0ZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2R1cmFibGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZHVyYWJsZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS92aXJ0dWFsLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3ZpcnR1YWwuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEyIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYW1vdW50TWF0aC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYW1vdW50TWF0aC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImMwMjc1MTEzMDc3YTUzYjNjNjVhODZiZTc5NDcyMTVjZmVkOWEwZjY1MjE2Njk1ZDg1ZDU5MTdiNjU0ZGJkMmEzYTUwMDgwNGJmOGJmOWJjYmEzOTcyM2Q4ZTZkNzA0ZGM2MDdiMzk1ZTRjYzUyOGY2ODc3MzA1NDY1MTRlZjRlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Ftb3VudFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hbW91bnRTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI0ZWU5YzY5YTlhZDZlMjgxOTQxYjRlNTY2NWNiNjc2NTkyZGI0OTc5ZDM5YTJkYmIxNzMyY2UwYTJiZjMzY2ZlYTQ4NmM2NGQ5NDZhNjY1ZTI3ZGI4YjExZWQwZDFiNDE1MDNjZDY1ZWNhYjY5OGEzOWZkYzdhODVmMTM5ZTNiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Rpc3BsYXlJbmZvLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kaXNwbGF5SW5mby5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImZjZTZkOGIzODQ1MTNhNTA1MmQyNWM0ZGJiNWIyMWUwZDU3NDJmYWM4YTk0ODk2ODg2NmY3N2JiOTIxN2NhMzcyZjlkYjEzMjI1ZTkxMjkwMjBhZmRkN2JlNjkzMWEzYWVkMTRjMjRhODExNGMyNTVjZDc3OGJkNGFhOTUwOTk4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJiZjQwMGVjZGZhOWEwYWFiOTllYWQ4M2Y0YjJiYzFiZTZiZTBhNTgyODA3NmRmZmRlZDVjMWY3YTA5MGQ5ODJmY2IyOTVkNDM1OGUyM2VjZjAyMmFjNDAzMTQ5Y2E3YjE4MjFmZDA0YzU2NzRjMzQzZTE3NzgyNzhkMjQ3ZjFlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzc3VlcktpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXNzdWVyS2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTEwMWY3MzAwNWEwNTNmNjY5ODRhNzAyMDQyNjM1ZmNjZTI2MTZiODZmZDNjMTEwMWRlMTFlOWU3MDRhNThhMjI1NTQ3Y2MxY2Q1MDY5NzRjMmMzNzBkNDZhZWEwNWYyZTA4OWU1NTA2M2IyNmU0ZTI4ZmY4NDhhYjUxMDFkODkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyZGQwZWQwZmY3ZjEwYmE1NDdhNjE0MTEyNGRkMjlmYTcwMTNjZGZkODg0NjUyZDhkMzVjNGRmODk0OTk3NmIzNjljMzJiYzlkMGZiZjg3NzVkZjNhNWE1NmUwYWM1NjViMjk0OTg1ZDllOWRiYjJhODgwNWM1NDU1ZTBlOWU0MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNjZDQwMWQ1MmY3NGFkNTU0NmM2OWJlZjcxNzk1NzdmZmM3ODRhOTcwYTcwNDJhNmVkNWJhMDA3MzZlMzI4MTVhMWMwNDkyM2QxNmUyNGVkNDc4M2MxMWM4NmVmMTMxNTUwOTM3YWQ3YjUxMTQ4OTQ5MDAxZjA2MzJhMGIyNDk4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIzZTBjMjg3NDJhMjUxNTkwZDcxNGVlMzIwYmM3OGNhZjIyNTc1YTRmYzJiNzBkNzY1N2FjZjAzNjk1Yjk1MWQyYzVhMmJhNWFmYTVkODY4MjRlZmZkNmU1NTMwN2RiZTdjY2Q5ZDk0M2RmODAwN2NkOWQ2MWQyNTkzZTNkYTE1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJmMDBlMWI3YTg5NzNjZTNhMzNjMzUwNWE3OTU5ZjI4NTk2YWI0YmZjNTgwMjk5OTlkYWQ0Y2M2YjlkYWJkMjI4OGJmNjc0YzlmOTUxMDU2MGVkZjc1ZDY2NjY3Mjk0M2VlNGIzMjQyODFlY2M3NmQzY2U3MDJlOGI0OGZmODNlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BheW1lbnQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BheW1lbnQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjNmY2NzQ1ZTcyZDM4NGIyZjk1MjI5ZjJmZjk5YjFhYzNlMTVkNTg4NTcwNTE1NDE0ZTY3OWMwNGE0ZGJjZTAzYmVlYThiZDlkNjY4YTcwNzE5YWFkY2ZiOGUyY2NkYjBjOThmZDYzNWRlNjc0ZDJlZjQ3NmRiZTk2Mjk2YWVhMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXltZW50TGVkZ2VyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXltZW50TGVkZ2VyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTU3OTllMTFlNjVmZjEzNmUyYTJkZGI3MWNlNmQ1ZTEzNmJkZWY4MDY1Y2EyMzc0Y2Q1YmE3MjQ5NjRkNGE5NTBhNmIzMGNiNjY0MDJiYTM2MjYxZjBlOGEwNjJhMjkwYWRjNjZiZmQ3MTJmODBlOGRkYjQ4MmRjZWY3YjlkNTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHVyc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3B1cnNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWNmZTMzYTMyYzUyMTgyYzEwNWVhOWIxZGYxMzIyZGJhODdkOGFlOTZiZTlkNGEwMTE3ZmVlMjY3YjUxNTJiN2IyNjBlMzE1ZjAzMzJlMmRlZTk3NDViYmQ4ZjNhNDBiMWYyZjQzYzQ4NDg4NjdkZTg5NThhOGE1NDNmODAzYjAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHJhbnNpZW50Tm90aWZpZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RyYW5zaWVudE5vdGlmaWVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODk1NDY2ZDQ4NWRlZjEzZTYxMzQ1OWM3MWJiOTBhYjg2YzBhYzUyYzdjZmE5MjBiN2U0YzAwYjk5NGIxMzc3NWYzYmUwNzIwNGM4MTNkOGVkMmJjZmMxZTIxMjc4MjA2NWJhZGQxNTg5ODZmMWEyOGQxNDgxM2ZhMTAxYWZiODMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjE2ZTdmN2UyODVlODg4ZjhhNzhjM2FmNGY1YTU1Njk5NDNlZjU3NTYxMWNiMjY3NDFiNTE1MmEwNDA3MGFlOWE0ZWVlMmMxMGVmZTdlYjM5YzZjNjdhZDFmNTllMWI4MjI0YWZjN2RlZjI4NjRmNjg1MTA1YzNmM2MzOGM3NTAwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLWluZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy1pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9pbnRlcm5hbCIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZS90b29scy8qIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvKiIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZS96b25lLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi96b25lLWhlbHBlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L2RlYnVnLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kZWJ1Zy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L2xlZ2FjeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGVnYWN5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC9wcmUtYnVuZGxlLXNvdXJjZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcHJlLWJ1bmRsZS1zb3VyY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC9wcmUtcmVtb3RpbmcuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3ByZS1yZW1vdGluZy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcHJlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvdW5zYWZlLWZhc3QuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Vuc2FmZS1mYXN0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9zdHJlYW0iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vc3RyZWFtLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vc3RyZWFtL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9zdHJlYW0tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiYW55bG9nZ2VyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImFueWxvZ2dlci12MC4yMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hbnlsb2dnZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiamVzc2llLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NhbGxiYWNrLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jYWxsYmFjay5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEzZDA4Y2M2MjM4YWY4NzM2YTc4YTNhMjZjNDY5YjJiZjMwZmU0MTg4MDRjNTdlODkwY2U2ZjNlYmQ0MjMxZGYyNDdkYzhiMDA1ZTdkZGQyMzdlYWE4Y2I1YzU4OTFkMDk1ZTc4MjQ5ZDNmNmMzY2U1Y2JiYmExNDNmNWJiMzRkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbmZpZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29uZmlnLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTViYjg2OGMyNDVlNTM3ZGM1MjFmYjYyNzgwZjA0YTk2OTMyYWQ1ZGM4Y2NhM2Y0MjIxOTMzYzJmYzZiYWVmZTM5ZjY1MzRlNzk1MWU4NTgzNWY1NjY1NzEzYjkzNmZkMzZlMDRiMWY2ZThlMDgyMmRkMzVkYTZhZTZiZTcwZmQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGVidWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2RlYnVnLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjIyYmFlNWMzNmQ4MzkzMWIzZGY3ZGZmZDljY2IwYTMzYjFmMjFhOTQ1YWE4YjVlYzdjN2ZkYjIyODgxM2QwZjg4NTgyZjJlMjlmYWE5NjU3MTAxOTgwMThkNWU5YWZhOWMyOTMxZTNiMjJjNzE0MTZhZDQxNjgzMjA5N2E3YjAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXJyb3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lcnJvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMzNkOTVmZjkzYmU3YWM0YmI3ZGVmMWQ3M2UxMDlhZjU5MTlmNGQyYWViNWFmMDhmYjA0ZDQwZDZjODc3ZGU4MGEyN2Q1YmIxYTcyMmNkNzEyOTZlNDdkMjY5YmNhYWI4MDU0YmVlY2RmYWYxZmM3MGY1NGYxNWVhYWQ4NWUxNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ZDFmMWM5M2QwMDNjZDQxNDk0ZDM2NDgxZmFjMGI2MzgwM2UwMzA0Mzc5MmNiOWRjZjVhMDQzYTA5ZDZjZGM1YjMwZDA1OWJmOGI1MGVlNzIyNDg2MDk0OTk2NGI3OTgxYmNkOTkzOTQwM2JhYjVhYjc4OTk2ZDI5YzVlNzEyNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9saWItY2hhaW5TdG9yYWdlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODczMWYxYzMwMzY2MDJhZDkwZDU5OWIzNWE2MDZmZmIxMjg2NjhiMGZjZjIwMDNjNTNhOGI0ODA0MTRhZGQ1MWY0ZTdjMTYxMWI2OGQzYzgzZjUxOTUxMTlkZjViNDZkNWYyOWY0NDEyYjdjZDdiNjVmMWZjNTUyZTBkMGFjODIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWV0aG9kLXRvb2xzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXRob2QtdG9vbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MDQ0NTY5ZGM3NGE2MmU0MjBkYzhlMzkxN2I1ZmFmMWY3YWEwZGVkZWEwNjE3MzQ5MzUyYmJhYTdlOWUwNWRmYTkwZjZmZWQwMDU4OTY2YjEyMTEyMWVkYTgzNWM0MTQwNWFjMTYzMDZkYmZiMDYyOTI1MDMyMTk0MDlhZjAwMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlQ2hlY2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVDaGVjay5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjcxZTUyMDUwZmQ4OWZlNzgxNWVmZWM2MjhlYWFlYjIwMGI3ZjdjZGRhODRlZTdjZGJjNmYyMDNjMDNlZGVmMDYxNzFiZjJlYzY3YzIwODEyZjgzMjFhNGUyNTljZDk3ZWQ4NTM3N2NmNTY0NWU3MzExNDFjOWMyM2Y3ZWViNTdlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4NmZmN2NkNmI2ZGRhZmY1NzlhNWE2MWY4MjMxYzg0NWZlMzk0MDliMmQ4NGZmZjQ3MWZiYjdjNmZjMjE5ZWFjODhlYTJlNjViZGQ4Mjg5ZGQxZDhhZDg5YTg3Nzc5YjkyYWNiYmU2NzY1OTEyYjdlYzdmMjY5YzZiMzAyN2E2YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy91cGdyYWRlLWFwaS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdXBncmFkZS1hcGkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMGVjMmM0ZDBlNTY5ZTMzZmY4N2MzZjM1NDU3YmNkNDY3NjY4YmNkZDlkMmIzZDc1MDk1Yjg3YjlhZWIzYjEzMWM5ZDlkODM4Yzg5ZTgzNDczNTZjMDczZTBjZGFlOTMwNDA0NGFjOTU2NDc5NmRjOTQ3MjY0ZTE3NmQ0YjRiNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy91dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MGMwYWUxYWY4NTg5MmM4NDk2OWI0NWQ3ODk2ODE2NjljM2FiZGU0OTczMDhmMmFiMmJhMWNkMDM3ODFkMjkwNGZiYWZiZjU5YTk3MzcyMGFjYTZhMjA3YTdiZDNkMjQ2OTgxOTJiYjAwNzdiNjBjMjM3ZTA5ZTA2MDQyMGQ3NiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvbm90aWZpZXIiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvdXBncmFkZS1hcGkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvZXhwb3J0ZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOWI5YzU0NmZjMWIzMmRkN2UxM2NmMzg4YjE1ZjBhYmQ4OTg5NTllYmUxNzhhNzcxZGM3OTI1ZWUxZDNhZmYwN2JkODZkYWRjMDAyNTA2ZDk3YmIyYjk5MDVkMjFjM2E2NDk2M2Q4ZGRkNGM5Mzg4ZWE0ODM2ZTg5ZTg5NmI4YSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkMDExMDBhZDFlYzBjYzE1NDU1Y2ZmYmFhNjA0MDMwM2IxYzMxZmNkODE4NGI5NDRmYjljN2NhZTg2MjE2YzIwMDk4MGNiZjZlNjg2YjRiOWRjYjQ1MzRiZDgwNDIwNWI3MmVkOTdmNzlmYTYxMDVhN2Y4MDljNmZkZmI2ZWU2OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9ub3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ZTBjNjk4MjE2OWMxOTI4OTQwYWY2Njk2MWRmOWQ3N2RmYTE3YzhlOTI1OGM3YzdkYjFjNWIyOTdlNTcxMzRiOGI1NDdlMzQzZGJlNmQ1NTViNjA3ZjFjODczYmRlMmJmZWYyNTA3MjU1MzgzNzQ2YTk2ZjhhZTZhNWY3MjM2NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdWJsaXNoLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVibGlzaC1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlNDJiYzA0NjE0ZDdlYjkyMzE5OTE4MjBiZGRhZDk4NjFjNGRhNGVmY2FlODc0ZmYwZTE1NjYwZjA3ZjVhNzVlMTU0MWMyNzE5YzQxNGIwMjQ3YjRkMGJlMmE1OWU0Njg3YWVjMjQxZjM3NzgxM2VlOWQ1ZTU4Y2I4MGQ1YjQwNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZWQtbm90aWZpZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3JlZC1ub3RpZmllci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY5YzhhMDdkNzU5N2E3NTVmMTMyM2IxN2EzNTdlMmZlYzhmNGZkY2QxNzc1M2ViN2I1ZDI0NzQ4OGQ0ODE3NzBiZDc5NTg4N2NkNzc5YzFkYjE3ZTI4NzA4Y2VhZGU4ZTcyNDg3YjMwNWNhNjNmYTg1Y2Y0NzZkZjA0OWZjN2M0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlc3ViLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXN1Yi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUxZTVmYTgxZjU5YWYyYjNjZDEzY2FkNmM1N2YyNmM2MjE1MTU4ZDcwNDM4NDc1NDNmMjAyZTBkNmMzY2Y0YmY3MmRkM2RlY2NjM2IzMzNjOWJkYzM1ZjRhYTk4Mzk0YWE5ZmQ4NTgwYmM5N2Q5NDBjMjZiYTQ2N2VhMmZmZGU3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N1YnNjcmliZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3Vic2NyaWJlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDRjYjhiZTZmY2I4YTAzMzFiZjI5ZDJhOTk0ZDgyYmNmNzVkZjA4NGNkOTJkZjczNjBjZWQ0ZDg3NTNhZGUyODZjNjEzNmE3ZmQyNDNlOGYwNWVkNmRjOWFmYjEwZmNhNzliYzk5ZTUyMTJkMDk4NmFlZGI0MTZhYmUxODg5ZjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3Vic2NyaWJlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3Vic2NyaWJlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI5NjYzMWU1Nzc0ZTc1NDU5ZjU2MTgwYjQyOTEzMWYzMjBmNjFiYjc4NTQ0MjM3N2FhNzgwZDQ3ODUwZGQ1Yjc0NzBhOTQ4MGYwMzk2Mjk0NDIxNzA3MzI1Yjk5MzViMTM1MWM2NzcyZGUzMWY5NGNhZjA5ZTQ4YjFjMmY1MTBmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RvcGljLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90b3BpYy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhhNWE0NmQ3NDViYzFmNWMxMDE2YWY2Mjk1NGM4MzQ5MGQxNTZmNWRmZjcxNTk3NTVmM2MyNTk3ZjhiYWNjNWMyMmE1MGY3YmNjY2ViZWU4NjJiZDg3ZDQ0ODRjMGI2MDY3NTM0NDc0MjkyNzM0NTY5NDgzMTk0NjExOGYxYmJiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLWluZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy1pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3N0b3JlLXYwLjkuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9zdG9yZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFhOGExZWIzYzViNzEzZmE5MGQ5NjUxYjQ2NzczYTQ0MDFjZDUxOTM2MWViZDBkYTQ2ZTIwMTFmYWEwNzQyOGEyNGZiZWIyOTY0YWM4MzJiNDJkODJjZDJkOTRkZWViODIxZjU3NWNhMTNmYTFhZWQ1Y2QzZjBkMDE1NzM2Y2UzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xlZ2FjeS9sZWdhY3lNYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODg0ODczMmEyNDhiZjNkODI0MWQxOWVhYjk0MDY2ZmQyOTExMGM1Y2IzN2JiZjhhNWMxNWI2ZTQ0YzdjZDkxMDI1ZjEzYzhiYzJkZThhNTY2MWY4ZjI5ZjM0YjIxN2M2ZjJiYTViM2MxNDllNmRhYjhhNDFjZmFkOTZhNGE4ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkYjBkMzNjMWQ1ZDFjY2U3ODI2YjM3OTZmZmZjZmIwZjhlOTljNTM4MDMzYTgzYzNiNDg3N2UwOGJkOTc5NmMyYTRjMWZmZmFkYzMyOGNhMDRlZGUxMTY0ZDQ2Y2IyNWQ5YmM3MDg0OGVhZDc1YTI5ODJmYzViMzQ4NmViNTU0MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ4Yjg2YjFjMmFjNWRiNjFmNTYwYmMxNWZmMDVmY2M1MzU1Yjk5OWRmMTI4ZDFjODM0MzgzOTM1YmJmNjgzNzhlZWJhM2QxN2FlMmQzOGY1NjIwMTQxMzc4MTc4NTgxZTc4YzhiMTRiMGRjYjM3ZDAzYmVmNzExODRhZTM0YWIwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTYzMTIwY2MxNzZlMjBhNDNjZjljZDk4NTlmZjJkMjRiYWU3ZGQ5MjFjMWUwZTgyZGEwZGE4ZTI1YTk5ODYxNjYwNDBiMGJmMmY2MDVmYmExMzZlOGY3NzJjNTJlMDM5YWY4MmU1OGEyMjgyYzFjZjZmN2YzNzNkYzM1MjZhOWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEwY2ZlYjAxZThmMjlhMWVjZWFhMjQxM2Q0NzZkZTMwOTUxMzg5YjQ5N2IzNDJmZDY0YzYyYzVlOWY3NjBlMjkxZmI2NmQ5N2VhM2MyYWVhZTI5YTc2ZDQwNDQxNTFhZDg1NDE1OTgzODI3ZjFlMTg5ZTViNDZiNTg2NTNhODg5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYzE4ODY1ZGVlNGI5ZjFlMTA1NGFjZDZkMWU0ZWZmNmRjMDBjNzdkMWQwZTUxZmViN2YwMzNkZmQ0MzNhNDA2NmMwNDY5MTY1MDFiZGIxMmU0NWIxMGNiMDQyMzUyZGJhZTlkMGVhN2U1NWY5YjJhY2ZiZmYyNTBiNTMzZjIxYyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY1ODlhNjgxYzI2MzYxZjFhNTM2YjMzM2FmNjQ1NDg3MDk3MDNhMmM4MDdhMjU2NjI3YTg4Yzk1NGEzMzRmMDM4N2JjMzRiMjFhMTNmNjRiNGVmMGM1MGYwMjdlMGM3ZDczOTMzMzdjMDU3YzAwNzlmZjNhZjY1MTFmMTFjZjBkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3RpbWUtdjAuMy4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3RpbWUiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy90aW1lLXYwLjMuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3RpbWUtdjAuMy4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3RpbWUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy90aW1lLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzZjYjJkMjIxMGYyMmYzYTk0MWUzZmNiMzlmY2M5Y2ZmY2NhMWFhOTA4NGQyNTlhMzc1Yzg1NTBhZDE3Y2M0NmFhOWIwZjk0OWExMDAwMDEyMjZmODBiNWZjZTlkZTUxMjFmYjI0MjcxNTMzY2Y4OGE1NjBjZDUwMDQ4YjIxMjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdGltZU1hdGguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RpbWVNYXRoLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjQyMGIwNzE1MzhjOWUzNTA0NWE3ODMyNThkODE0ODdiZDQyYjBlMjQwYTAwN2RmZTY1YTQ4NTE2NmVkMGU2NDZiNDNiM2EwMWVjMTVmOGExMzU0YmE2ZmViNTY3ZjZjMzVlOWZjYzkzZjZjM2NmOTU2NmUzMDE4MDI3YzY0ZTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY1Y2EzMjg3ZWMzNDI0YmRjOGYxNDRmNDE0NDZiY2EyZDg0ZTdiN2NjZDFlNGVkMmQ4NDVhN2I2NTZiZDMxMjE1MTJhNWU5MzljMzVjOTU3OTA3ZmMxZDFkZjMzNTNlYjUyYzI5ZGEwYWFkOWVlZjdhZTBiYzkwZjA2ZDUwNjQ3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLWluZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy1pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy92YXQtZGF0YSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZS90b29scy8qIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvKiIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZS96b25lLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi96b25lLWhlbHBlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3dpbmdzZXQtbGl2ZXNsb3RzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3dpbmdzZXQtbGl2ZXNsb3RzLXYwLjEwLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhvLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leG8tdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOWQ0Yjc3NDM3NzJlNGZhMGQ1MWQ1N2U4Zjk0NGYyMWM2NTExZjA1MWU0ZDJiYzZmYzk1NGQ2MjFhMjI2MTRjODJkZWYwNWJlZjNhYzI3YWZmNmU0N2VkNzU0NmI0YjAxZTZjYTcxNzk2MmU3MzY2NTRlMzJjZDA4N2RhYzNiZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNmU1ZGRjODI0NDIxOWM2OWFlNTdlOWUxMjFlMjQ2ZTJkMDVkYzM2ODhkOGRkM2RiOWViMmJkZTZmYWMwM2M3NDE5NDhlMWJkNTMwYmYxNGNjNjM5NjFiNzhjYzRjMjUwOWQyYWVkZmZkNzcwYTkwNzU4ODg2MzY4MTIzNTE1OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy92YXQtZGF0YS1iaW5kaW5ncy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdmF0LWRhdGEtYmluZGluZ3MuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NDhkMWQ3OTI4Mjc0ZjFkNmJmOWQ5MzBjODI0MmFiZjNiZDYwNmIwNjEzZjUyMWQ3ZGY4MzYwZTkxZTYwYWM1ZmYyNzJlMDQwMzllYjRkZjFjYWY4NmY2Yjk3M2M4NjJlZDQ2OWNmMjgwOGJiMzBlMGY4OTNkN2UxMTJlNWZjOSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy92YXRzLXYwLjE1LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvdmF0cyIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3ZhdHMtdjAuMTUuMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3ZhdHMtdjAuMTUuMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vYWdvcmljLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL2JhbmsvdjFiZXRhMS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvYmFuay92MWJldGExL3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9iYW5rL3YxYmV0YTEvdHguanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL2JhbmsvdjFiZXRhMS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvZGlzdHJpYnV0aW9uL3YxYmV0YTEvcXVlcnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL2Rpc3RyaWJ1dGlvbi92MWJldGExL3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9kaXN0cmlidXRpb24vdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvZGlzdHJpYnV0aW9uL3YxYmV0YTEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL3N0YWtpbmcvdjFiZXRhMS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3Mvc3Rha2luZy92MWJldGExL3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9zdGFraW5nL3YxYmV0YTEvdHguanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL3N0YWtpbmcvdjFiZXRhMS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvdHgvdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvdHgvdjFiZXRhMS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9nb29nbGUvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9nb29nbGUvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9nb29nbGUvcHJvdG9idWYvYW55LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2dvb2dsZS9wcm90b2J1Zi9hbnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjL2FwcGxpY2F0aW9ucy9pbnRlcmNoYWluX2FjY291bnRzL3YxL3BhY2tldC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pYmMvYXBwbGljYXRpb25zL2ludGVyY2hhaW5fYWNjb3VudHMvdjEvcGFja2V0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy9hcHBsaWNhdGlvbnMvdHJhbnNmZXIvdjEvdHguanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjL2FwcGxpY2F0aW9ucy90cmFuc2Zlci92MS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvY29yZS9jaGFubmVsL3YxL2NoYW5uZWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjL2NvcmUvY2hhbm5lbC92MS9jaGFubmVsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy9jb3JlL2Nvbm5lY3Rpb24vdjEvY29ubmVjdGlvbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pYmMvY29yZS9jb25uZWN0aW9uL3YxL2Nvbm5lY3Rpb24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWNxLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWNxL3YxLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWNxL3YxL3BhY2tldC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pY3EvdjEvcGFja2V0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9zd2luZ3NldC9tc2dzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy9zd2luZ3NldC9tc2dzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3N3aW5nc2V0L3F1ZXJ5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy9zd2luZ3NldC9xdWVyeS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9zd2luZ3NldC9zd2luZ3NldC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvc3dpbmdzZXQvc3dpbmdzZXQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vdGVuZGVybWludC8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL3RlbmRlcm1pbnQvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by90ZW5kZXJtaW50L2FiY2kvdHlwZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vdGVuZGVybWludC9hYmNpL3R5cGVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3ZzdG9yYWdlL3F1ZXJ5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy92c3RvcmFnZS9xdWVyeS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2dvdmVybmFuY2UiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9nb3Zlcm5hbmNlLXYwLjEwLjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9uZXR3b3JrIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbmV0d29yay12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N3aW5nc2V0LXZhdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N3aW5nc2V0LXZhdC12MC4zMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy90aW1lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdGltZS12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdHMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdm93IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdm93LXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy96b2VTZXJ2aWNlL3pvZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvc291cmNlLW1hcC1ub2RlLXBvd2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc291cmNlLW1hcC1ub2RlLXBvd2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3NvdXJjZS1tYXAtbm9kZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc291cmNlLW1hcC1ub2RlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEyIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiaW1wb3J0LW1ldGEtcmVzb2x2ZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJpbXBvcnQtbWV0YS1yZXNvbHZlLXYyLjIuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiamVzc2llLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3ZhdC16b2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3ZhdC16b2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkYzEzM2U4YzUzMWUyZWEwZmQ4MDg0ZjRkM2RiMzJmOWY2MTYzNGVmYjkyMjE4NzNlOTA1MWJkOTJmZjYxY2MyY2M2YWFhNzg1NmVmZDljZGI0MTZiZjI2MGE2ZTFjMjgwNjg0ZDk3YTFlMjhhYTg2ZmI3YmUzNDczOTA2MjQzMSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy96b2UtdjAuMjYuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy96b2UiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3pvZS12MC4yNi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3Rvb2xzLyoiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy8qIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3pvbmUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3pvbmUtaGVscGVycy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdXBncmFkZS1hcGkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy91cGdyYWRlLWFwaS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N3aW5nc2V0LWxpdmVzbG90cyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N3aW5nc2V0LWxpdmVzbG90cy12MC4xMC4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zd2luZ3NldC12YXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zd2luZ3NldC12YXQtdjAuMzIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdGltZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3RpbWUtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92b3ciOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92b3ctdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b2UiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3pvZVNlcnZpY2Uvem9lLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2R1cmFibGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZHVyYWJsZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS92aXJ0dWFsLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3ZpcnR1YWwuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYnVuZGxlLXNvdXJjZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9idW5kbGUtc291cmNlLXYzLjQuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2J1bmRsZS1zb3VyY2UvY2FjaGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYnVuZGxlLXNvdXJjZS12My40LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NhY2hlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2J1bmRsZS1zb3VyY2UvZXhwb3J0ZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYnVuZGxlLXNvdXJjZS12My40LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2J1bmRsZS1zb3VyY2UvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2J1bmRsZS1zb3VyY2UtdjMuNC4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY2FwdHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY2FwdHAtdjQuNC4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY2FwdHAvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NhcHRwLXY0LjQuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvc291cmNlLW1hcC1ub2RlLXBvd2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc291cmNlLW1hcC1ub2RlLXBvd2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3NvdXJjZS1tYXAtbm9kZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc291cmNlLW1hcC1ub2RlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEyIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAieWFyZ3MtcGFyc2VyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInlhcmdzLXBhcnNlci12MjEuMS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9idWlsZC9saWIvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAieWFyZ3MtcGFyc2VyL2Jyb3dzZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAieWFyZ3MtcGFyc2VyLXYyMS4xLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Jyb3dzZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY2xlYW5Qcm9wb3NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY2xlYW5Qcm9wb3NhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjE2Yjc1YTlhMzdjNWUxMDQ4MWQwNjkyNjBhNTY3NTczZTZmYTA1MmZiOWZhZjMzYzhkYmE1ODgwZTc3OTk1ODJhMjE5MjNlZWFmMWMwZjM4M2U1ZjcxNWY0OTQ2MDZkNDNlOTU5YTJmZGFjY2VjYWM0MTc1YWY5MDMxOWZlNzQ4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0RmFjZXQvb2ZmZXJTYWZldHkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0RmFjZXQvb2ZmZXJTYWZldHkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjN2M5MDA1YWZiNDk1ZWFjNzVhYTYxZjY1YjhlM2ZjNWI5NTUxMWUxMTEyMjZkZGRiYTA3Y2Q0OWIzNDJlYWNhNDNhZjY0ZjZkZmMyYTdmMDkxZDhiZDA5MGZjMzYzMDFlNDg2YWFhYTE4NTc5MGY2NGExMTc0Njk1MjVjMzcxNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbnN0YW5jZVJlY29yZFN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luc3RhbmNlUmVjb3JkU3RvcmFnZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUwYTZhMDhlMTZlZDU2ZjZmMTlmZTFmOTcxNDQ4YWEzYmFjZTZkNDliNjIzYjRhMDAxN2EzZmQ0ZTM4YTk5M2IzZmI2MmQzMWI1YWQ1YzJiYjA0YzVhNGQxNDkwZmY0NmUyYmUwNDI4YWNmNzJkMzMxMWIxZjQ3OWViNjQyYjUyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2ludGVybmFsLXR5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbnRlcm5hbC10eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM5NzhmZDBhOTkwY2MyN2YxZDc1OGFlYTQ0ZWQxNmQyZDE4NjBmM2FhZjUwMDhhOTQ1ZmJkZGNhOTkyZDRjMjAyNTBiOWYwY2NmZTkzY2RmYmVjNWQxZTFhNTJmOGM4YmFmZjUxMDdmNjNiM2Y4NTA3NjEyNGRhZmQ5OGEwMmNjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzc3VlclJlY29yZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXNzdWVyUmVjb3JkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDg3MDYwOWM3OTkzMjI5ZTkxOWFmYmVmYWEzZjgxZmVkN2FhNGU4OWExNTU4OTQwZTAyY2NmYTg2ODZmOGRjZDhmMDI1OTg4MDhkMWFiMTE1OGFlODhhYzNkYzA1ZTBkYmNjZWM2MGY1YWE4ODEyZTA2MjI0YmI1ZWJhOTQxZjAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyU3RvcmFnZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXNzdWVyU3RvcmFnZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNhNWY0ZGFjODUyZmY2MjNmZGNlZjNmZDdmNDEwOWFlMmVkZWE1YWNhZDRjNWY0YzlmMTFmYzU4YjBlMTIyMmQzYjdmNTYwYWY4MzRlNzJlNTRlNDVlNTJmODFmYzYwN2I5NWQ1YWRjZDM0ZDA0ZGZiNzZhODE4NjVkZGMwZjIzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2VIYW5kbGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2VIYW5kbGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4M2Q5NTI0YTUzYjc3Mjc4MmRmNWQ0MmRlN2Y1Y2U1OTAzOTk5NGFkY2QyMDljOGVhNGQ0ZDlmZGVjODJmZTIwNmZlZjIxMGRkNDEzNTAxNGMyMmRiZmI0YzdjMTY5YjVjMmFmMjMxYTMwNWJkODc4ZmI3YzM2NWQyZTA4YTdjYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTEwNDY2ODMwMzQ5YzM1Njc2N2E2YTA5ZjUzNGRlNGNlYjVmMTM5MGYzMDkyN2IzZThhMzI4ZWIyMzgyZWVhOGU3OTA2MzExZWEyYTUxMWJjMDA0ZmM0NmY0MDE4MTk2OTEwM2I1YjI3ZGY5MTJiYzE3ZTBkMjM4ODJhYWJhMmYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtYW1iaWVudC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtYW1iaWVudC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVmOGQ5MTQzMmE2OWY4ZDI4ZThmNThhZTUyN2JiMjI3NGQ5MzcwZTRjMzkyYTIzOGMwNGNmOGY0NmY3ZDU4MTY5OWU5ZjcyNjM2YjU4MzU1MzhmZTYwMjE3MDIyMTUzMWI1YzM2ZGVkNGQ2ODc0YjA4Yjk0NWU4MWQ1MWExOWMxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3pvZVNlcnZpY2UvY3JlYXRlWkNGVmF0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy96b2VTZXJ2aWNlL2NyZWF0ZVpDRlZhdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjg0MjhkMGQ4YjIxYzJhYWNjMDk2NDA2Yjk5MTk5MjI1OWY0NWQwOThlNzBmZGUyMWJkN2I1YzRiYmM0MDY5NGQ4YjdiMGE3YjUxYjcxNGFlOGM5MTUwYWMxNTU3MTFiNzA5MTQzZGMwMTdmMDBkM2Y1YmVmMTJhZjY1MzZiMzI2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3pvZVNlcnZpY2UvZXNjcm93U3RvcmFnZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvem9lU2VydmljZS9lc2Nyb3dTdG9yYWdlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjc1YWQwMmVkYmVlYTVkMzBhYzY4YzQ3ODk1ZTZhZmFiMWM1NjAzZmFhNjdhMTI3MGEwYWEzNmRkZDNiM2NjZjk4ZTQ0NjMxY2Q3NzlhZjYxNzk3ZjYwMjQ5ZjUyOGIxZTgzNjAxMGY0NGY5NDhjMzZhOTA0YmJlMjdmMmM5NTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvem9lU2VydmljZS9mZWVNaW50LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy96b2VTZXJ2aWNlL2ZlZU1pbnQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0NmJiNTQ1MjJiYTIzZmVmYzYyZTBjNDVhOTE3ZDA0MGFhMjhiN2FmZTEzYjA0MGRkMmU0MDU5N2UxNDVjM2UyNDJlMTVhOGFmYWY0OGExNGM2YTliYjJiNDdjNTliNjM2YTAzZGUyMmRiYjFiOTM3OGFiMDk4ZjM0MGUzOTA0ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy96b2VTZXJ2aWNlL2luc3RhbGxhdGlvblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3pvZVNlcnZpY2UvaW5zdGFsbGF0aW9uU3RvcmFnZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdiMTZjNzIwZjczZjRlNmQwMzUyYTBlOTk4MGUyOTk2ODIzNTc1MTI2MmZkMzAzOTZkMzdhOTI1Mzc0NjBlNDVkMGRhNDE4YmUxYTNkZWFhMmY3OGRiNGJhMmQxNDZlNTIwNWFjMzE5M2RjZmJhYzZmYjg4YWY1ZTA2M2U4ZjBkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3pvZVNlcnZpY2UvaW5zdGFuY2VBZG1pblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3pvZVNlcnZpY2UvaW5zdGFuY2VBZG1pblN0b3JhZ2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlYTY2M2M0Yjg0MmE2ZjFiMmFjN2I5NDRiMmZmZGNhM2YzNjAxNjVhMjYzZDVkN2E3YzA3YWU0YWUzZmMzNWMxN2IwOTg3NjBjNmVjZDQwYzE1Y2VjZmJjY2VmYjQyNWY1YjUyYzMwNTM3ZDhmYWQyMGM4YTdiODEyN2E4NjM5NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy96b2VTZXJ2aWNlL2ludGVybmFsLXR5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy96b2VTZXJ2aWNlL2ludGVybmFsLXR5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDBjNGM4MTNiNTM1MDI4NWM5MzZhMTRiOGNiNTBiY2NiMGQ0NzQwODBkODk5YjQ3MmJlYjA3YzYyNzBiZTBkNmRlNDNhYTQ3NjhhN2M1NmZjNDU3MTAzMDExMTMxMGI4N2M1MDJiNGIxYWE5MTUzOGY0OTg3NmVjYzEyNThmZWIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvem9lU2VydmljZS9pbnZpdGF0aW9uUXVlcmllcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvem9lU2VydmljZS9pbnZpdGF0aW9uUXVlcmllcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjcyNjUzMjJiMDdiMWQzOTdhZDU1MzIyYjJiNGZjNjNiNDM2MWVmZThiMjcxZjk2NTIwOGZhZDFlZTA5NzU2Yjc5YTI2NjYxYjkzNjgzMDU0YzliNTliOGJkNjBkYTI0MmQwZTYyZDE4YWE4OGM4YjQzMjM5YWYxMDBhNzgxNTc1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3pvZVNlcnZpY2UvbWFrZUludml0YXRpb24uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3pvZVNlcnZpY2UvbWFrZUludml0YXRpb24uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjM2VlYTkzNTZiYjdhYzVmNGFiNmExZDIwMThlNzhhN2ZiN2FkNWM3NmI0MmZlODE4NDVjYWJiZDQ0ZThhYjg1N2ZhY2UzNDAyYmMwMWY1OWM4OGJhNzNlNGE5OWIwODRiNGU4ZTM0MDM3OTFhMTljMTllMzk2MDBjYTAxMTJhMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy96b2VTZXJ2aWNlL29mZmVyL2J1cm5JbnZpdGF0aW9uLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy96b2VTZXJ2aWNlL29mZmVyL2J1cm5JbnZpdGF0aW9uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2YwODg5ZjFlMmZmNDlkNzU5OGIxYTE1NWM5YjNkNjAyY2U0MWIwMGI0ZWIzYmYyNTBlM2Q5OGNmYmIxZjNkNWEzODZkMjgzMmVmZTMzNzUzMDM0ODFhZmEzNGY2NjQxMWIyZmRjZWRkMTBhY2JjNTI5YzM0MjQ0MmMyZmFlYjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvem9lU2VydmljZS9vZmZlci9vZmZlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvem9lU2VydmljZS9vZmZlci9vZmZlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA0ZTY0MWFhMWZlOTQ2OGI2MjFjNWU3YmZkNTVmZjgxNzM4Mzg3NzJhYTNjNDE0ZmQ4N2M4NDJmMGQ3MTNjZDVlY2ViNDMxMGU0NTVkMGNmMzVlYjhhNmMxMzFmZDNkNGMwYjBmMjUzM2U0ZjZmYzM4NWU1ODgzMmIyY2U3MGI4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3pvZVNlcnZpY2Uvb3JpZ2luYWxab2VTZWF0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy96b2VTZXJ2aWNlL29yaWdpbmFsWm9lU2VhdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjljMDg3NGMyN2IzYTg0MzM5MGQ1ZmUwMGQ1ZDM3NzUwODkwYmQ5YTE3NmNjYTg2ZjQ0OGY0ZGZiOTI0MDhhYmMzYzAyYzM4NDkwNmJkOTI1M2U3YjFiOTRhZDMwYjkyYTM4MWE3ZjlhZTk0ODExNjZmNjkxOWU2MDFkYTM3MzI5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3pvZVNlcnZpY2Uvc3RhcnRJbnN0YW5jZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvem9lU2VydmljZS9zdGFydEluc3RhbmNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDk2N2I4Y2Y3NTNlYmU4MGIyZGQ1NjJiYjI4ZDMxZGZmNWU5YjdlZmRkZGE1OWM2ZWIxN2Y0OTAzNTRkYmViNjEyODIyZjJmNTNiZTY3YWM2ZGYxMzI2ZGUzYzFhMDQ4NDA0MGJlZmYxYzRhNDQyNGQxNmQxZDhiZGVkYzI3Y2UiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvem9lU2VydmljZS96b2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3pvZVNlcnZpY2Uvem9lLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjUzYWY5OWNhYjZiNTY5OTYzZmUxZGYxMjFjZGViM2FkOTUxYTBlOWRhZGI3Mzc0ODg1ZWUxZGRjYThhMTNjYmUzOGEwOTlmMjI0MmE3M2VmNTcxYmY4MDI0MzZiOWE4YWI1NjM1OGI3Y2UyMTAyNDRlMmY4MzI3ZjA4YmY1NTEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvem9lU2VydmljZS96b2VTZWF0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy96b2VTZXJ2aWNlL3pvZVNlYXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NWMyNjA1MzViMTY1YWU1NDM3YTAwNmIzZmRkMjhhMDNjNmM5NmJkNjVjNzI5MGY5ZTZkMTFmZDdkMzM4ZDdiODNlNjMwNDczMGY4ZTM5OWY5ODRlMGVlNGMyNTg2Y2FiZjRiMDhkNWMwZmZiZjg1YzVhYzFjMGE2OTYzNjhhZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy96b2VTZXJ2aWNlL3pvZVN0b3JhZ2VNYW5hZ2VyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy96b2VTZXJ2aWNlL3pvZVN0b3JhZ2VNYW5hZ2VyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTYxZGEzMDlkMTQxZjhkODg3ZWY5N2FlYzgxM2MyNGM0ZDBkZjBlODg5ZTAzM2I3NWMxMzM1NGQxNDcxZmY5MzZlMjZjYmQ4ZTk1MzY3Yjk4ZjQ3MTE2YzBlNjY2N2U0NzI0NGIyN2IzMmQ2YmE1MmRjYzIyMzkxMDQ0NzFiOGMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvem9uZS12MC4yLjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvem9uZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvdG9vbHMvKiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLyoiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvem9uZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vem9uZS1oZWxwZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9kdXJhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImR1cmFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzNGRmMjY0NjRiMGVkMWJmZDFlYzMwMjM1MjNhMzE4M2I3OWJjOWUwMzc2MDJkNmMxOTIyNmRiNzlmMmQ4OWNjMjkwYjE0YTVmNWI3NTc0M2ZmOWE4ZWExNjI0NTQwNjk3YzcwODU1ZGI3MDhmYTdhYjg0OTQxYmRkMzUzZWZjNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kdXJhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kdXJhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzQwYzgxODI4MmZhM2RlNmE0YmRhOThlZjlkZmY4ZDVlZGRhY2JkMDViZmU2MjUxOTI3Yzg1NTE3OThkNDc3YjUxNTM0YWQ4NmE5NjY1MzVlOGFiYmE3YWMzMDY0OGRiMmQ3NzhlNDcxMTM5MjUxNTEwMTZiMGJlNzU2NTE4MzkiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2NvbW1vbi12MS4yLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2NvbW1vbiIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImFwcGx5LWxhYmVsaW5nLWVycm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmJhNDdhODlkYmRlYWU0ZDBmY2I3Yzk0NGIyM2FlMTg5ZDU1MGJiMzZkNmFmNDZkMDM3YTA0NGY5NzgwMmFiZWViZjk0MzhkY2M5MTE0YTRmNmQxMjY5OGIwMmRkYTI4YzhjYzQxNzNkMDZhODZmMTZjMTc0OTE3N2RiODc1NGEiCiAgICAgICAgfSwKICAgICAgICAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImZyb20tdW5pcXVlLWVudHJpZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YTQwZmQwYzdiMjlkMmY0NjE3MTUxZTUwM2Y3MjBmZDU1NGI2NDFmMTgyYzFiM2NkNWRhNGY0ZTE3MTNlZjUyMTJiNTc2NThjZThjZjUzNmVhMDg0YjY0ZGExOTg5YTlkZmRhNTViMjQzOGIyYjZhMzA1MmFlYzFjMzM4ZWJmZCIKICAgICAgICB9LAogICAgICAgICIuL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaWRlbnQtY2hlY2tlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEwMDZhM2U0MjEyZDgxNzM3OWI0ZjE3MDIwNzljYWQyODQzNWQ0OTBkOGM1YWIzYmRhMDYwYzE1N2QxOGNhYzAxYzFlMzE0NWY5NDdjYzRjMjQzNjMwOWQwODk1OTAxMTlmOWJkNWE1ZDQyMTE3MjAwYmM4OTc0ZDhiMGYyZDM3IgogICAgICAgIH0sCiAgICAgICAgIi4vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImxpc3QtZGlmZmVyZW5jZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjYxMzYzMWZjNGZhZjhiYWE2NzRiYjQ4Mjg4ZTZhNDZiN2RhYWUyZmRlNzg3YzVmMWEwNTFmOTZkMTFmZDg5YWJkMjVjZDZlODkwMDU1MDEyMWY1NmZlMWY1MTBkMzJmYzllNDQ3MzhjOGZmNzgxY2JhNjdiYmQxYWNlNjUxYjA4IgogICAgICAgIH0sCiAgICAgICAgIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJtYWtlLWFycmF5LWl0ZXJhdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTg5OGM2MjYxNmI0Y2RiM2ZjODFlOTcxMjkwOGEzN2RkYjU3YmVmNmIxZDU4MjNlMDRjZjI4MWNhOTVlODYwNjA1MTAyM2U1NDVkZDZiZGRjMjk2ZmVkZWJlNGU2NjU5NGU5OTg2OTk4MDVlMjA5ZWU3ZGE0MWE5MWFmODE3YzgiCiAgICAgICAgfSwKICAgICAgICAiLi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm1ha2UtaXRlcmF0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiNDM2ZWM0YzY2NmMyYTU1Njc0NWM1ZmE1NGVjODY0OGEzZWNkMGYzMTIwMTA5NmExNTEwY2ExNDMzNDk5ODk2NmE2NDZjMWQwNjNiNjEwMTljY2Y2NDU1MWIzY2I1ZjEyOTBlMDZhNTkxNGQ4YTFkNWYwM2VjNmIxNzFhMzFkZiIKICAgICAgICB9LAogICAgICAgICIuL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAib2JqZWN0LW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmNDM3YjVmM2UzM2I3NzNkZTZjYmVkMTBlNTBhOWUwYjk0OGM3M2E2YWUxNjQ2NjQwMTQ5Y2M4ZjBmODE2OTU4NWFhZjI1N2QxMDI2NmZjMjZiZTVlMWRjMzk0ZjVhMzUxZWM2YTZhZjg1ZDNiOTkyMjg4MTk5ZGI4ZDE2NmU4IgogICAgICAgIH0sCiAgICAgICAgIi4vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm9iamVjdC1tZXRhLW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFhZjA0NTFiMmU2ZDBlZTQxMzA1ODkxZWY2Y2Y1YTllYzRhMDM0NWYxODQ4ZmU5YjJkOWM1MTIzMjQzNjY5YzU0YWM1MWM1Mzg4MjRjMzAxOTBkMjA3ZTQ4ZjUwYzA4NDU2M2Y5MzhkYTVlNjQxZmI3OWJjNDY1MGVkMGVjZjE3IgogICAgICAgIH0sCiAgICAgICAgIi4vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ0aHJvdy1sYWJlbGVkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2I1ZDM0MjZhMTRjMGY3NTYyNTA0ZmI3ODZhOWIwMjQwZGU0Y2I4NTI3OTRhMzhiMDYwMzMwMGE5OTBlNTEwMzlkNTM1ZTUzYWU2N2VjNzEwNWM5YTMyNTNkNDk2YWFmYzczMjA1NGI2YWMyNTUxNzYzYzkwZDc1M2Y1OWY2YmEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZW52LW9wdGlvbnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDE3NzZlZWIyMWIxYzU1MWRhM2Y5YjhkY2RmNWFiZDg4YmNiZjVmOGUzOGNiMDRlZGFiYzhjYjk2NGJiOTc1MThmZjRjYWNiNzQzZThhYmJhYWMyMjg2MTY4MTVmYmU0MGU4NmJlMmQ3ZDQyODE1Nzg5NTJmOGFhODY2YTFiOTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW52LW9wdGlvbnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vudi1vcHRpb25zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWRiMTVkNGI2NjkzMzI1ZDM0NTIzODBjYTYyZGQ5N2E3YWU0ZDAzM2JmNjc1M2FiZjQxNzViZjhmMmE0MDVkY2M5M2Q4NzdkZGRlYzEwYTdiZTViNGZjMzIzNjdkNzJlM2U3NjgwMGY3ZjQ4YzYwOGRhNDUzYzNkMmQxMTQ0ODUiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vycm9ycy12MS4yLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vycm9ycyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvYXNzZXJ0LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29uc29sZS1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbnNvbGUtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQxZjhmNGY1N2Y0ZjZlMmM4YjVkMjk2NzM2N2ZmZTRkMDdjOWNiMTc2MWE3YzVjODg0ODZmNGIyN2E0ZTNmZTU3ZDI5ODRhNTkwODNjZjUyOTcxOTE4ZmY5OWViZmE2YjgyYThjMGQ5YzVkMzRlYzVkOTQ4YjE1Yzk5ZDJlYjEzIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOWQzZTkxMDRiNmUyNWIwMmE3MzQ5NzlhZDRmMTk3ODZiYTg3MTY5ZTgwZjhiMGQ4YTUxMTY3ODFkOTE2Y2ExY2FhMGNjYWFkOWVjYjNhNDVhZjEyMDE1NjJmMDA1ZWE4YTBhMmUwYWQyNjIyYzA3YTk1OGVjODdmZTQ1ODEwOWIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xvY2FsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sb2NhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImE5NWRmNGNhMzI4MjA5NjhmMTIwM2FiNWVhMjcyYjk2MWFlMzExNjM0MDcwY2YxNTIwZThhYWE2MmNhOGVhMjIyOTcwNDRhYzRlODg5MjY3NGZiYjkxYTM0M2E3NjUwZGNiYWY1M2I3Yzc0NTIxYWQ1ZTU1NmI4ZjMzYTMzYTRlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2OTExMTQ2YzhlMDQ1MjI3MDBlMjNjOTM4ZTZiYTU3MGFjN2VhMWU5MTVkOWU3YzRkY2JjNTNmYzBmN2FiOGFjYjhkZDdjZmMwN2M1MmUwMmYyYzY1NzQwNGVlODllZjczMTFhMzI3OTRhODcxMWFhN2FiNDNhNTQyMGIzMmM4OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9uby1zaGltLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9uby1zaGltLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDkyMDUxZjY5NDQyZGIxM2Y5ZTJiNmMxOWRkZDE4OWM1MWFiMjFhODQwNDIxMDMwMWY4ZDI2MWIzYjMxOTQ4YmQ1MGNiNmY4NTIzZTAzNWM0ZjNkZjc2MzExNTgyOGZjMmVhZGM5YzJiMTI3MTdmYTM5MzhmZDRmMWQ3ODRiMTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHJhY2stdHVybnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RyYWNrLXR1cm5zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODBjYmE3NTc5OGJkYTM5MjBkNzVkNjg1ZGYzODNhNmJiYTA3MTVlMTMyNjQ4NGM2M2FmODFlYmRlN2U4NGIzODVmMDdhNzM3N2ZjNTJmYzNjODBlODAzMWJhN2Y5MWI1YmQyNWM4N2M0OTk0NjllYTFkMTM3MDc3Nzc5YWIxZTgiCiAgICAgICAgfSwKICAgICAgICAiLi91dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ1dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImZlYTA0MTFiMjE2YzcxNDE1MTQzOTY2NjRmOGY4MjEzYWNkMTEyZTkzMGMwZjRmYWMwMzQyN2Y1NzM3ZDczN2QwZTk0NmI2Y2M0YzYwODg0ZDA0MDU3Yjc3Zjg4MDhhMzk2NzM2ODU5NTU4ODcyNDM1ZWFlZWVkMmYxMzI2NDdkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9leG8tdjEuNS42IjogewogICAgICAibmFtZSI6ICJAZW5kby9leG8iLAogICAgICAibGFiZWwiOiAiQGVuZG8vZXhvLXYxLjUuNiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9leG8tdjEuNS42IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ0MjljODVjMmFmZjY3Njk5ZDA2ZDA3ZGQwYTk3MWFjMjBmNzcyNjM1ZTY5NjhhNmVhYzBhYWEzZDM3Yzc3ZDg5ODZhYjMyOTdmOTdjNjYyMTM3NDNlY2QyNTM4ZmQyYzVlODYxMmYxNWUyYmZjZDVkNmU1NjU2N2FjZjM3Y2IyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by1tYWtlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by1tYWtlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYjc5NDE1MTJlZGUwNTEyOWYzYjIwY2Q1MDgwN2Q1YWExMDUzOWIzMDg5ZGI0MGU0YmRlZGRkNjY0YjU3OWY3ZDY0ODkwMzI1N2YwYzE1ZWQwNjZiZGE5NWUzNmY4OTA4MDM4MmY2ZjZhOTMxMWNhNmYyZWUwODczZDA2OGE3YSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ1MGM2OGJhYWViMTA2NmE4YTVlMzIyNjBlNDJjZmE1NzVkNDkzOTA4MDc0YWZjYTM2ZWJmNjgyZjE4MGRkMDFmZjdiOWVkN2EyZDAwZjc3MzQwODRlMDg2ZmU2ZGUzNGVmN2QxYmRlZThhMDBjNWVkNTYxYjhjMzU4NDBlNjEyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2dldC1pbnRlcmZhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMDAzMzc4MmQ1NzAyMzk2MzNhMTkxOTQ3OGI3OWI2ZDE0ZmFlNTM4YzEwZTY5MzdmZjAyZDJmNGFjNjY0Y2EwZWM2OWJiMjM0OTMxMDVkNjRjMDhjM2FmNjlkMGRmYTViZDUxYjcwODU0ZGNlY2M2YjA2MTUxOWU3M2NkYmMxNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZmFyLXYxLjEuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZmFyIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZmFyLXYxLjEuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwNDM1M2MxZTI4MmM3ZjA4YTQ5ZDE2YWMyZWVhMDY5YTFjMzI1MzQwNWJlNjNkODU1YTgzOWIwOGI4MGQ5YmQzYzI3NDQ1YWUxZGEyYmMzMWJmNDYyMTNkNWIyZDQxNDM5MTE3Y2YxZWMwZjExYWYwMjQ3ZDk1NWE3NjE3NzU2IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9tYXJzaGFsLXYxLjYuMSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vbWFyc2hhbCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEyIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY5OTcxYTRiYWY5MmI1NDhlMjQ3NDg4MGMwN2RhYmYzNjFmMmZkMDM4YzQwMGRhNTFkMGE0NDY4MDkyZTM2NTU1NzY5N2M4ZWIxY2FlMzI1Y2ZkOWZhZjcyYWI4NmMxM2YwNDI0MGE2ZTE0NzNhN2UzOTM4NjJkZDA0MTFiNTRlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVQYXNzYWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc5ZGQ2NGQ2ZmUyZTI1ODRhNjlhMDZmMzZiOTlkNmJmODAyZDQ2NDQzYzU3NTQ0ZjhlNWY0NDBhMjAyNjRjYjBmOGQ0YzQzNjJhZjNjNTk3NjAzZjI0N2ZkMTMzNGNlOTJiOWE4YTIxMGM4YzYwYzIzOWRiYmYzYjQzMmJhNjkzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlVG9DYXBEYXRhLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTMyYjQ4YzdiMGE3YzRhZjFmMDU4YzQ1MDMwY2M1MWEyMTYxMTYwNzVjMjRlNTA4ZGE5ZWNlZjZiZDZkNDFjNGRiMDgwYTJhODM4MzIyODdmZjYyMDg3M2U2N2YzMThlY2E0MjMxNTQxZDIxMGI5NGI0NDIxYzllMzRhMzk4OGMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlVG9TbWFsbGNhcHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVRvU21hbGxjYXBzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZGNiZGY5YWFlMzE2YmMzZTM0MDVlZmRmNzAwM2NhYWUxODdhOTMyOTg5NGQ5MjkyZGFjNjZkNTk5MGNjNWRmYjgxMTJmNDMzYTg3ZGMzZDJkMWVjMDI2ZGQ4NTY2MGRkZmEzZDE5ZWRlNDlhZWJiYWEyODRkMWMwMDllZjgxZDkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtanVzdGluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTBiOGMxYTljNWI2NmQ3ZGYwNjE4NDViYjczOGZlYWYzMGRlNzU0ODNkZGQ4NTNkMmI1NTdmYWJkODMyNzlkNDA0YWM0OWZmNTUzYjJlMzNhMTkwMDFmNTAxMTY0MjM1ODdhOWM0MmQzNjNkZDVlOWZjMTQ1MzEyMjhlYTk0NjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2MyYmQyNDFlMjI5M2JhMjFhZTZhYjJjNGZmZTM2MDQ3MWZkNWI5MTVhNDk3NmRhNDFmMTY4Zjk4MDAyNDAyZmQ0N2NlZWE4MThiOGQwYjM0Y2I4YzU3YWE5NTAyOTJmNzI5NzNhMTBiNDdjMDhiMDQxN2E0Y2NiM2YwNTgyYzciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJlZWM2NTZkNWQ0ZmQyM2MyOWE1NGJhNjg1ZWZiYjA5MmRjZjJmOTRlMGNiY2M4ODE4YTExMjljYWM2ODE2YTkzZTE1MDRjNWFlZDBmZmMzMWU2NjJlZjQwNTQyMWJhNWM5ZTFiODRkOGQ0MzMwYzA2ODAzYWMyMmM1MDFhZDExIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JhbmtPcmRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmFua09yZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzBkOGZjZmU0YzM3YmI1N2JhNjIzMGRiNjUxZjY4MzViNmVkNDI5MjQzNjFjMjg0YThmYzVlZGJhMjliZDcxZjkwMzBkMWU1Y2UwNmYxYjNhY2Q1ZTRjNzg3OTI3OTA5ODk4ZGRmNjkyYTNhNjE0MGRmYWU5NGJkMzJmYmJjZDciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL25hdC12NS4wLjEyIjogewogICAgICAibmFtZSI6ICJAZW5kby9uYXQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vbmF0LXY1LjAuMTIiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vbmF0LXY1LjAuMTIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEyIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImYyMGE5NDdmMTJmZGQ1MjY2MTAyY2Y2ZTIwMDM4M2E0Mjg5N2U5ZGIzOTlhMjcyYjZjY2RjMDUwMjMyMzU2M2UyOTljOWQ2M2ZmZWJkNzA1MWUxY2M2ODhlZmE1ZjkxZDY4ZTQzZTY0YzVjOTMxZjBiN2E1NDg1NWU0M2EwNDZkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGFzcy1zdHlsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZmFzdC1jaGVjay9hdmEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGZhc3QtY2hlY2svYXZhLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGliL2VzbS9hdmEtZmFzdC1jaGVjay5qcyIKICAgICAgICB9LAogICAgICAgICJAZmFzdC1jaGVjay9hdmEvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBmYXN0LWNoZWNrL2F2YS12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjk5MzJkNTRmNWI0MWFjN2IyNDFiMDQ0N2RlYmI1Zjc5MzU5YTRjYWM1MmQ3Y2I2ODQ1NTRkMjUxNTE5OWI5OWE0NWYwMWZlYzkyYWNhNDdhYTViNzE1OWU0ZWRiOTRhYzdjYzRiMWJhODYxNWIyMzk0NDI4ODFlZDg5MGZlMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29weUFycmF5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5QXJyYXkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZjA3YWI5ZDE3M2M1MDM4MzhlYzVhYzkzMDYxYjk3YmMxZTAyNzljNmJlM2M0ZDdiYTQ2YzFlOWFjZjQxYzBjOTgwMGRhZGI5YTI1YmI5ZTc5YmE3MjJhMGQ0MzQ0YmNjZmI5MGIyMGViNjdmMWNmOTA4NTg4NGYyYzcyZmJhYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5UmVjb3JkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5UmVjb3JkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjFjNDljYzZkNTc3YWFiMmJlYTc4ZDQ0M2NlOGRlNzEzOGE0OGFkZDAxOGEyMjE1NjRmYTE0NDRiMTVlYWE2OWI2MjIxNjExODA4NWVlMjY1NTUyZWU0OGM2ZWRmNmVhNTlhMDAzOGU4Mzc1ZTU0MTQ5ODJlMjEyYTg5MWZlMjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWVwbHlGdWxmaWxsZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4M2MwYmMwYmVjMTk0ZmQ5MTFiNDljODc5Mzk5ODg2ZGY2ZDY2ZGI3OWY3NTBkMjQzZDY2NWQ5YmFmYTFjY2M0NDcyZjg0MzM4NjQxYjBlMTg0Y2FjMzljNTc3ZGZhMTE1ZThiM2RiYmY2OTI3ZjliNzdiMGQ3MjgzNzRjNzA2ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZWNkMGUzZGVhNjRhOTE5MmM1NzhkMDc4YmFmZGE2OGQxNWYzYmY4YzVmN2Y3MmRlYTUzYmY2MDQyZWRlMjY2MmExYTMwZTVkNWRhNGYxNjI3NjRlNDExMTFkYjA2ZGE5YjRiMjVjNDNhOTE3OWRhMjYxMmFiMDZkOGE1ZTgzZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2l0ZXItaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFhOGQ3Y2UwNTFiZWM4NzU2NGU3YzRmNmFkMTIwMzYyNjk4MmY0MWEzMjM4YTUxMDI1ZmFhNTMxMDFkNjI3YTUzMDBjYmI0MDY2MWIzOGU4ZGIxMjAwMDMyMmQ3YWRmOTU5MmNmMGE1YmE3Y2Q2MzE2OWMyMTdiNDBiYzQ4YzMwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2UtZmFyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLWZhci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhlZGFiNTk2OGI2OTFhMjlhMmZkODU0Y2EzMzFiZDQ3NWUwZjQ3ZjU1NGJmMWY5ZGQ2N2NjMTdjZjI3YTEyYzlkNzY1NDZhZDZmYjZlMjllYjk5NjE1ZjQ0Y2I1ZjAxNTUxNDI4NmE5YWIyM2Y0NDhiYmM0NWIwODQxYzFkYWY5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2VUYWdnZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2VUYWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMDFmODJmOWI0MDY0M2Y1OWFkYzIwMmRhNzFhMDFhNTdhZjYwNDRmYTVkZTlmOWJmODkzYjkzMjc5Y2ExYTE1Y2JhMTBiZmQ1NmMwYWQ5MzAwNjM3YWUyZDYyZDA4ZWI4M2JhNzA2M2JhODA1ZGZkMWJlYWYxMjRiYzJmZWEyMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZTU1NjA0N2VmMDMxZGI0MzZjODRmYTMyOGIzNzNmYjQ4YmE5ZTQ2NmVjMjQyZDQwZjFmZjJmZmIyZTZmZTBkMjkwY2JjY2QwOTA1ZDFmMjgxMDk2ZGRkNTM3YjgwY2ZhZDAxNjdjYTI2MTk1MzU5OTdhMjMyODhiMzY4OGNjMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlT2YuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDJhOWVmYmIyODU2ZTZmZmMwZjM4OWM4NWRmZGRhODRlNjExYzNiZjQ3YmE0NzgwZjIwNzgxYjk2MzdiNjAyMjFiZTE0ODAzOGE4MDlmMmQ2ZmI3NmUyZGU2NDY5ZmRhZTYzYzAwNTI1NmJhNTRlNDk2ZTc0ZmJlZDUzOTdhZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yZW1vdGFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JlbW90YWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM5MTAwOTM4NzQ3NWNiOTczN2JjOGFkNTBmOThhNDg4YzhhNTExMTAzMzI2YjUzYjQyOTQ5MTdhZDY4Njg4M2EwYTRiYWQ2ZGIwNmE5NGMwNTA2YmVmMTRhY2JhZGYzMDg1MjhiOTFkYTI0YjJhNTBlOTU4MWEzZWNhOTIwNzU3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3NhZmUtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2FmZS1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWQ2Y2JmYjNjM2Y5ZTE4YTAwNTY4N2M1OTdmMWVmYjc3OTVkYjNhYzM2OTc0NDdjYWEyYjI4MjRjYzFiYWIxNGNiMWI4YTFhNzA2YWRhMTI5ZDc5OGIwYTkyZDA5YTkxM2YwODNiZmM3YjYzNjc2ZTcxMzhmNWZiZmU5YzBjODUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RyaW5nLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdHJpbmcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzOWIyMTAxNzFkZmYyOTZmMzhiNDU3NzA2YWIwMjFlYWJiNzU2MGUyNThkOTNmZmY2OGI1NmU5NmM2YzJhNmMyYzlkOTcxNmI5NjYwZWE5OGNlZDlmZjRhYjZkZjAyYWEwMWI4ZjgxODZiNzA2ZTVmNzBiYTI3ZGZlOTVlZDg5ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zeW1ib2wuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N5bWJvbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY4NWM0ZWFjYTc5ZTgxY2U3MzBjNWNjYWM0MTIwZjkyYmY0OGIzMTdmMzRkODM1YWQyMTM5ZWM3MTExNTU5M2NlNGU5ZjlhYzY4ZDc3YjlkZDZiNmIzOTc1YmYxNjZiZjQxZGUzODI0ZWVjZmU1YmIxNjllNTcxYjMzYmFmZWMyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdGFnZ2VkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2RkMGNlOTJlZThiNWU2ZDAwOTdhNTc4ODI0MmE4NzllNzI2YzY3YzU0ZmZiMGUzYmE0ZWFlMzk5NjQxZGM0ZDFhYzVlNTYxOWY1ZjU2NmU2YTNlZGQ4NDZjZjg3M2I1YzFjNTk3ODViMjUxZmQyMDRlOTA4OWIxN2FjMDE0OTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMyOWZjMTU0MDUzNzcxNWRmODU0YTM4YTVlNDVhZTZkMjI4NmU5ZmIxNTFjNTI4NTZjOWI5ZGZjMWUyMmNkNjMwOWVkMzIyMjMwZTZmZWNjNmEyNDhhNmIzNDUwYTNmZjE2NGE2NzRlZWZmODI4YzkxNWVjNDgyMDNiZGM2NjQ3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXR0ZXJucy12MS40LjYiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3BhdHRlcm5zIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXR0ZXJucy12MS40LjYiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NjllY2E5OTJhZTJjZjA5ZDQ2ZWFlN2VlYTAwN2U5NWJiNGM2NGFhYTM3YmE1ZTQ2NjI1ODZiOWZkZmNmMDk0NDhmOWYxZDVkYjlmNDE2N2UwYTdiNzk2ZmU5MjBhNWZkMGE5OGQwYzU0NjQ5ZTIxNzYzMDNkYWY3ZWE0NDk4ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NoZWNrS2V5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTk3MmZhMDA0YmJjZGVjMzNkMmIxZTNiN2Q5MTgwNDBmNWY4MmE0OGZmN2UwY2MzYTI0YzYwNjYyMjZkNjExMWVjYzc0OTQ2NGM4ZGVkNWE4NThmODVkOWQ2ODk0ZDY3OTFmMWIyNTc3Y2U4NTQ2YTU5ZDk2ZDUyMzdiNDI5MjYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb21wYXJlS2V5cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMxZDg1NDhiMzkwY2MyNjYxNzVjYzlmZTY3OTU4NjFhNDIzN2E5ZDk0MmEzZDg5Y2ZmNjI1OTQ2MjMwNDQ5MzQwZTQ2YzU3NWUzNmE3M2Y2YmEzODU1ZTBiZmU1OTJlMmE1ZGZiNjc1MmFjMDBlNjdlMTNhYzVkMDQwMzgxYjgyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29weUJhZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb3B5QmFnLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjU1OTQ4NThkZTgzZDM1N2M1Y2U4ZGIwY2VlZDZmMWZlYmJmMzVhZGYwYWY3MWNiNjcwYTQ4ZGYxNDM4OTdkYmI5Y2Q5YWVjNmZmN2IxYmM2M2U2ZDNlMmQ3MzIwMTdhODA4OGQ5ZmRiNGQ3NTZmYjIwZGE5NjlkOGU0MmU0NzQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb3B5U2V0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NvcHlTZXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwYmIxM2JhMDZhYzg2Y2FlNTE4YmNiYjRiZmI3NTY4OTgwMTBjN2ZiZjA4MTgwZTU0ZDZiMWRkNTQ0NzU2N2M4ODNkNGU4MGY4NTVmODE2M2JiOTYzZGY5NzkzYzM0NWU5YzNmZjJiMzRhYzAzYzQzYmUyZTJkNTYwYzJjOTM0NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGQ4ZmRjNzAwMzQ0NTg4N2VkYjdkYTIzMTc4NzdlN2RmNTNjNjNiZmM4ODRmZDVjZGI1ODdiYjY2ZTg3Yzc4MGRmMzdmZGViZDMyM2Q2ZWJjMGNkNjEzODZjOTI1NTI1MTlkNGVkYTk3MGUyZjhjNTAyYTFiN2RlZmJiYjMwZjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMWIzYTJmNDQ4ZjkwZjIzODI5YjQ2Yzk3M2NiNmM2OTZhOWZlMmMyMzRkNmYyZTBiZmNjZWUxZTdjOGU1MjdjNDg1MWY4YmQ1YmE4N2UwMGVlZWFhZjljYzQyNzNhZWRmNmZhMzcxNWRkMjc2NDA3ZTcyYjhjNjEzNDA2ZjA1MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNiODViODEwZTMzYTJjY2I5NTNhMDFmY2VhZjAwMzZiNjkxNDFhMWJlOWQ4MzI4ZWViNTkwYzk3MDk2ZGE2YzNmMTU3NDViYjAzNzgzOTFkZTJmNzkwMDg1YzBlYTZjZjU4MGFkOWQwZDA5NGEwMjQ0MjRiODJmYjhmY2E2Mjg3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMWI5ZTg1N2NlZTg4NGFiMDhiOGY5OGY4YzJmZDBlYzYyMDE5MmMyZjIxNDBlNzFhMmM5YzJhNGRiYWFkZDc4ZmRlZjc5YTY5NWQ3Zjk2MmNmOTE5YmQ2MDkxMTU0YmQ1Y2NiM2JjNDVkYjIzNGVlOTA1NTkwZjIzMWNkNTlmYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ1YzA3NWI3NGU3NGQ1YmIwODg4ODkxZTNjM2QyMWY0YjYzMjk1MTZmNDVhM2NjNThhYjQ3YzE0NDRmZDgxNjgyODUyY2JhOWI5MTJlOGQxOWFlNmNhMTM4ZDk5ZTA0MmFmNzk4ZWE0Njg5OTg1Mzc0MDZlMjE2NGU2MDNlYzEyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hc3NlcnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29tcGFydG1lbnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb21wYXJ0bWVudC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb25zb2xlLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29uc29sZS1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24tc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sb2NrZG93bi1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODM3NjUwNWY2OGJkYzNjYjk0ZTY1NzY0ZTJmZTMyZWNlOTAyNmExMzc3ZTcwNDFlZWFkYzc1MDE4MGE5N2U5ODJmN2M0YWI4ZjczMTg4ODQ4NDJkZDIyNTg1MjlkYjQyNTQ0ZjU4YmQwOTkwOTM5NDhiMGM1YzM0MGI4NmVlOWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdjNjJiNTgwNWM0MjU1NzZiZDExYmEzODcxMDZlNzJhZDY5NWE3NDIyM2Y1OGQ2Zjg5MWNiZjE4YTY2Y2U0MjY4MTFiMTJmMzhkYjEzODQ4NzcwYzkyZmU5YTgzNDczYjQyZjE3MGRmNDZjYjg2ZDI1NDg4YjdmNWZkMWQ5ZWE0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lbW8tcmFjZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWVtby1yYWNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDYyMjVmMWI1M2RmMWIyOGIzOWUzNzcyN2JhMGRmNDkxNThjMTI3MmJmYzExNTFlM2VkOTc4ZGU1ZTgwYmI1MzU4MGY5MDVhMzcyNTg2MjJiYWMzZmM4ZjgzZTA5MDQxZWJmNzQxZDgwNTZhZmZiNjFkMmI2MWQyZGI0YzNlYjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2E4YzUyMzQ3NWVlMDVkZTI4MDFiZDM2ZDk3NjdkNjgyNWFhNjBkZGEwNGQ0N2U0NDA0OWVjNGY0OTA4NjM2MWEzOWUzZmIxOThmYWM4NDhjMzU2MGZmNWY1NWM3NzM1MjI1NTM1ZWNhNTYzZWVhMjc2NzViMThhNGY5NDc2ZjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3N0cmVhbS12MS4yLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3N0cmVhbSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9zdHJlYW0tdjEuMi43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3N0cmVhbS12MS4yLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vc3RyZWFtIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3N0cmVhbS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vc3RyZWFtLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvYXNzZXJ0LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29uc29sZS1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbnNvbGUtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJkZGZhM2FlZmFkOTQ2YTJlMWE0ZTNhZGQ3Y2UxOGQxYzNlYzEzZmRjZjFkNWI3NGMxYzlmZGIzYTVkNWY4NmVhMDVmYmExYTQ3NGQ5MDBlN2VmOGEyYWZiNTM3YmU4ZmRjM2M4YmM0MjU0ZjA2MDdjYjQxNmYyZmQ1OTRmYzY5IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJqZXNzaWUuanMtdjAuMy40IjogewogICAgICAibmFtZSI6ICJqZXNzaWUuanMiLAogICAgICAibGFiZWwiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJsb2NhdGlvbiI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiamVzc2llLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMjdkN2RkNjIzZWZmYWRkZWUwN2Q1ZGEwNmIyMDE4ZTY2Y2YyOGFkMDk0NDRmMWZhNzJkYzFlMGU2OTJlM2JiMzRkOTdiODA1ZjM3NDYwNDlkZWM3ODUxYWJiYmVmMWI4NWIyZmYxMDBmMTY4ZWRlNDBmNDFmMTdhOTM3NGQ2NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTg5MjZhZmRiNTljNWU1YTA4NjNkNDcxMzI0OTNlYThiZTYzOTIxMzEwZWU2N2RhNmZmNDc5ZDU2M2M5NTUyZGQ5YTIyNDI1NWE4MTg3NjRmMjc4MTJiOGNiMzQ0N2ExZmM5Y2RiY2U3Yzc3MTE4YmYwMGI3MmQ5MzM2MzIzZjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDZjZWIxOTgzZmU0ZDEyYWM2MjdkOWYxYmQwNTY1MGRiYWNmMTQ0YjdmMzlmNjFlMGNhNzQyM2Y5OGNmOWIwNjE2NWRmY2Q4OGY2MTdhZjg2NmEwZDE1NzA3MGE5NzRlOGY5MmNlMWM1MDEwOWQwMDc3NDg4ZjQyOGMyZTA3OWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk2ZmVlMTZkYWIzOGEyMWYwYjVjOGEwYjFmMTBjM2I3M2EzMTU3ZjZlOWY1ODkzODA5NmI0Yjg3OWIyYTA5OTNmZDdjOWRkZDdiMzkzMGU4MDI2MGUxYTg3YWIxYTRhYzY3NjFjYjc1Nzk4NThmZTM5ZTAxMDlkYzVhMTYwNTNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL21ha2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFrZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDlhOGUzMzg0MGY1MGE3ZGEyMzJjODgzNmM2ZmJhMjRiM2Y3NTBlZjJiMzMxZGFiMTY1YWZlZDYwNTA4YmY3M2E3ODE4ZTI3OThjMmVlZGIzZDA0ZjNkNjcxN2Y5NDNmYjkzMDg4NmZlNjRlOGE3ODMwNDg2NTk2NzRhOTQyYTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGZmMzE4OTU5NjFmMmM5ZmRmMzE0NDVkZDY4OGYzZGNmN2ZmNTE1MDcyZjgyMjliZTQ1NTE4NTY4NDIyMjJmNzFjNjVjODUzMzFhYmJkYWQ5ZTNkNTU1ZDkxZDVmOWZiNmZmMTgxNmI5MmM2Y2YwOTdjYzlmMmM4Y2NjY2JkYTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzEvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhlZDM5YzQ1ZDk3YzBmZDJhMTQxYmRhMWNjNTQ4NDQ5NGNmNTlmNjYwYjQ3OGM0ZDM5YTNmNzJiZTBkMzRhZTAwMDkyM2U3ODNmNjBlY2IxZTcxMzI5YTMwZGU3MzE1MDQ4OTVhNmQ0Y2YwMjJlNmUxYzcyNmNlOWQ5ZGQ2ZDNkIgogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfVBLAwQKAAAAAAAAAAAABQu9oH8BAAB/AQAAIAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9oZWFwLmpzeyJpbXBvcnRzIjpbIi4vc3JjL2hlYXAuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9oZWFwLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9oZWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACcAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2V4cG9ydHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABLcf+RZCgAAWQoAACQAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2hlYXAuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2V4byIsIkBhZ29yaWMvc3RvcmUiLCIuL21ha2Utb25jZS5qcyIsIi4va2V5cy5qcyIsIi4vd2F0Y2gtcHJvbWlzZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VIZWFwWm9uZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXIsaXNQYXNzYWJsZSxtYWtlRXhvLGRlZmluZUV4b0NsYXNzLGRlZmluZUV4b0NsYXNzS2l0LG1ha2VTY2FsYXJNYXBTdG9yZSxtYWtlU2NhbGFyU2V0U3RvcmUsbWFrZVNjYWxhcldlYWtNYXBTdG9yZSxtYWtlU2NhbGFyV2Vha1NldFN0b3JlLG1ha2VPbmNlS2l0LGtleXMsd2F0Y2hQcm9taXNlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJpc1Bhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGlzUGFzc2FibGUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9leG9cIiwgW1tcIm1ha2VFeG9cIiwgWyRozY9fYSA9PiAobWFrZUV4byA9ICRozY9fYSldXSxbXCJkZWZpbmVFeG9DbGFzc1wiLCBbJGjNj19hID0+IChkZWZpbmVFeG9DbGFzcyA9ICRozY9fYSldXSxbXCJkZWZpbmVFeG9DbGFzc0tpdFwiLCBbJGjNj19hID0+IChkZWZpbmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhclNldFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJTZXRTdG9yZSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhcldlYWtTZXRTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyV2Vha1NldFN0b3JlID0gJGjNj19hKV1dXV0sW1wiLi9tYWtlLW9uY2UuanNcIiwgW1tcIm1ha2VPbmNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VPbmNlS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9rZXlzLmpzXCIsIFtbXCJhZ29yaWNWYXREYXRhS2V5c1wiLCBbJGjNj19hID0+IChrZXlzID0gJGjNj19hKV1dXV0sW1wiLi93YXRjaC1wcm9taXNlLmpzXCIsIFtbXCJ3YXRjaFByb21pc2VcIiwgWyRozY9fYSA9PiAod2F0Y2hQcm9taXNlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuY29uc3QgZGV0YWNoZWRIZWFwU3RvcmVzPUZhcignaGVhcFN0b3Jlcycse1xuZGV0YWNoZWQ6KCk9PmRldGFjaGVkSGVhcFN0b3JlcyxcbmlzU3RvcmFibGU6aXNQYXNzYWJsZSxcblxuc2V0U3RvcmU6bWFrZVNjYWxhclNldFN0b3JlLFxubWFwU3RvcmU6bWFrZVNjYWxhck1hcFN0b3JlLFxud2Vha01hcFN0b3JlOm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUsXG53ZWFrU2V0U3RvcmU6bWFrZVNjYWxhcldlYWtTZXRTdG9yZX0pO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VIZWFwWm9uZT0oYmFzZUxhYmVsPSdoZWFwWm9uZScpPT57XG5jb25zdHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9PW1ha2VPbmNlS2l0KGJhc2VMYWJlbCxkZXRhY2hlZEhlYXBTdG9yZXMpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBtYWtlU3ViWm9uZT0obGFiZWwsX29wdGlvbnMpPT5cbm1ha2VIZWFwWm9uZSggYCR7YmFzZUxhYmVsfS4ke2xhYmVsfWApO1xuXG5yZXR1cm4gRmFyKCdoZWFwWm9uZScse1xuZXhvOndyYXBQcm92aWRlcihtYWtlRXhvLGtleXMuZXhvKSxcbmV4b0NsYXNzOndyYXBQcm92aWRlcihkZWZpbmVFeG9DbGFzcyxrZXlzLmV4b0NsYXNzKSxcbmV4b0NsYXNzS2l0OndyYXBQcm92aWRlcihkZWZpbmVFeG9DbGFzc0tpdCxrZXlzLmV4b0NsYXNzS2l0KSxcbnN1YlpvbmU6d3JhcFByb3ZpZGVyKG1ha2VTdWJab25lKSxcblxubWFrZU9uY2UsXG53YXRjaFByb21pc2UsXG5kZXRhY2hlZDpkZXRhY2hlZEhlYXBTdG9yZXMuZGV0YWNoZWQsXG5pc1N0b3JhYmxlOmRldGFjaGVkSGVhcFN0b3Jlcy5pc1N0b3JhYmxlLFxuXG5tYXBTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLm1hcFN0b3JlKSxcbnNldFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMuc2V0U3RvcmUpLFxud2Vha01hcFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMud2Vha01hcFN0b3JlKSxcbndlYWtTZXRTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLndlYWtTZXRTdG9yZSl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VIZWFwWm9uZShtYWtlSGVhcFpvbmUpO1xuaGFyZGVuKG1ha2VIZWFwWm9uZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSGVhcFpvbmUiOlsibWFrZUhlYXBab25lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAO5at89rAgAAawIAACUAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vZXhwb3J0cy5qcyIsIi4vbWFrZS1vbmNlLmpzIiwiLi9rZXlzLmpzIiwiLi9pcy1wYXNzYWJsZS5qcyIsIi4vd2F0Y2gtcHJvbWlzZS5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vZXhwb3J0cy5qcyIsIi4vaXMtcGFzc2FibGUuanMiLCIuL2tleXMuanMiLCIuL21ha2Utb25jZS5qcyIsIi4vd2F0Y2gtcHJvbWlzZS5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9leHBvcnRzLmpzXCIsIFtdXSxbXCIuL21ha2Utb25jZS5qc1wiLCBbXV0sW1wiLi9rZXlzLmpzXCIsIFtdXSxbXCIuL2lzLXBhc3NhYmxlLmpzXCIsIFtdXSxbXCIuL3dhdGNoLXByb21pc2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAdelBrlgCAABYAgAAKwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaXMtcGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImlzUGFzc2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcmVhbElzUGFzc2FibGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJpc1Bhc3NhYmxlXCIsIFskaM2PX2EgPT4gKHJlYWxJc1Bhc3NhYmxlID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGU9KHNwZWNpbWVuKT0+cmVhbElzUGFzc2FibGUoc3BlY2ltZW4pOyRozY9fb25jZS5pc1Bhc3NhYmxlKGlzUGFzc2FibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQYXNzYWJsZSI6WyJpc1Bhc3NhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB5pTBl1AwAAdQMAACQAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2tleXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFnb3JpY1ZhdERhdGFLZXlzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBraW5kPShsYWJlbCk9PiBgJHtsYWJlbH1fa2luZEhhbmRsZWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNpbmdsZXRvbj0obGFiZWwpPT4gYCR7bGFiZWx9X3NpbmdsZXRvbmA7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhZ29yaWNWYXREYXRhS2V5cz17XG5leG9DbGFzczoobGFiZWwpPT5oYXJkZW4oW2tpbmQobGFiZWwpXSksXG5leG9DbGFzc0tpdDoobGFiZWwpPT5oYXJkZW4oW2tpbmQobGFiZWwpXSksXG5leG86KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKSxzaW5nbGV0b24obGFiZWwpXSksXG5zdG9yZToobGFiZWwpPT5oYXJkZW4oW2xhYmVsXSksXG56b25lOihsYWJlbCk9PmhhcmRlbihbbGFiZWxdKX07JGjNj19vbmNlLmFnb3JpY1ZhdERhdGFLZXlzKGFnb3JpY1ZhdERhdGFLZXlzKTtcblxuaGFyZGVuKGFnb3JpY1ZhdERhdGFLZXlzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFnb3JpY1ZhdERhdGFLZXlzIjpbImFnb3JpY1ZhdERhdGFLZXlzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB9ChiniBgAA4gYAACkAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL21ha2Utb25jZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlT25jZUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRlZmF1bHRMYWJlbFRvS2V5cz0obGFiZWwpPT5oYXJkZW4oW2xhYmVsXSk7XG5oYXJkZW4oZGVmYXVsdExhYmVsVG9LZXlzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VPbmNlS2l0PShkZWJ1Z05hbWUsc3RvcmVzLGJhY2tpbmdTdG9yZT11bmRlZmluZWQpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHVzZWRLZXlzPXN0b3Jlcy5kZXRhY2hlZCgpLnNldFN0b3JlKCBgJHtkZWJ1Z05hbWV9IHVzZWQga2V5c2ApO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0T25seU9uY2U9KGtleSk9PntcbnR5cGVvZiBrZXk9PT0nc3RyaW5nJ3x8RmFpbCBga2V5ICR7a2V5fSBtdXN0IGJlIGEgc3RyaW5nYDtcbiF1c2VkS2V5cy5oYXMoa2V5KXx8XG5GYWlsIGBrZXkgJHtrZXl9IGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiB0aGlzIHpvbmUgYW5kIGluY2FybmF0aW9uYDtcblxuLy9cbi8vXG51c2VkS2V5cy5hZGQoa2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgd3JhcFByb3ZpZGVyPShwcm92aWRlcixsYWJlbFRvS2V5cz1kZWZhdWx0TGFiZWxUb0tleXMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd3JhcHBlcj0obGFiZWwsLi4ucmVzdCk9PntcbmZvcihjb25zdCBrZXkgb2YgbGFiZWxUb0tleXMobGFiZWwpKXtcbmFzc2VydE9ubHlPbmNlKGtleSk7XG4gfVxucmV0dXJuIHByb3ZpZGVyKGxhYmVsLC4uLnJlc3QpO1xuIH07XG5yZXR1cm4gKC8qICAgICAgICAgICAgKi93cmFwcGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZU9uY2U9KGtleSxtYWtlcik9PntcbmFzc2VydE9ubHlPbmNlKGtleSk7XG5pZihiYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5oYXMoa2V5KSl7XG5yZXR1cm4gYmFja2luZ1N0b3JlLmdldChrZXkpO1xuIH1cbmNvbnN0IHZhbHVlPW1ha2VyKGtleSk7XG5zdG9yZXMuaXNTdG9yYWJsZSh2YWx1ZSl8fFxuRmFpbCBgbWFrZXIgcmV0dXJuIHZhbHVlICR7dmFsdWV9IGlzIG5vdCBzdG9yYWJsZWA7XG5iYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5pbml0KGtleSx2YWx1ZSk7XG5yZXR1cm4gdmFsdWU7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfSk7XG4gfTskaM2PX29uY2UubWFrZU9uY2VLaXQobWFrZU9uY2VLaXQpO1xuaGFyZGVuKG1ha2VPbmNlS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VPbmNlS2l0IjpbIm1ha2VPbmNlS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAO9qtJJfCQAAXwkAAC0AAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL3dhdGNoLXByb21pc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGF0dGVybnMiLCJAZW5kby9mYXIiXSwiZXhwb3J0cyI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiLCJQcm9taXNlV2F0Y2hlckhhbmRsZXIiLCJQcm9taXNlV2F0Y2hlckkiLCJQcm9taXNlV2F0Y2hlclJlamVjdGVkSSIsIndhdGNoUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLE0sRTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5cbi8qXG5cbiAqL1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVySGFuZGxlcj1NLmNhbGwoTS5yYXcoKSkucmVzdChNLnJhdygpKS5yZXR1cm5zKCk7XG5cbi8qXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlckhhbmRsZXIoUHJvbWlzZVdhdGNoZXJIYW5kbGVyKTtcbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlckk9TS5pbnRlcmZhY2UoJ1Byb21pc2VXYXRjaGVyJyx7XG5vbkZ1bGZpbGxlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXIsXG5vblJlamVjdGVkOlByb21pc2VXYXRjaGVySGFuZGxlcn0pO1xuXG5cbi8qXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlckkoUHJvbWlzZVdhdGNoZXJJKTtcbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEk9TS5pbnRlcmZhY2UoJ1Byb21pc2VXYXRjaGVyRnVsZmlsbGVkJyx7XG5vbkZ1bGZpbGxlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXJ9KTtcblxuXG4vKlxuXG4gKi8kaM2PX29uY2UuUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJKFByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSk7XG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJSZWplY3RlZEk9TS5pbnRlcmZhY2UoJ1Byb21pc2VXYXRjaGVyUmVqZWN0ZWQnLHtcbm9uUmVqZWN0ZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyfSk7XG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkoUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkpO1xuY29uc3QgY2FsbE1lTWF5YmU9KHRoYXQscHJvcCxwb3N0QXJncyk9PntcbmNvbnN0IGZuPXRoYXRbcHJvcF07XG5pZighZm4pe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5hc3NlcnQudHlwZW9mKGZuLCdmdW5jdGlvbicpO1xuLypcblxuICAgKi9cbmNvbnN0IHdyYXBwZWQ9KGFyZyk9Pntcbi8vXG4vL1xuYXBwbHkoZm4sdGhhdCxbYXJnLC4uLnBvc3RBcmdzXSk7XG4gfTtcbnJldHVybiB3cmFwcGVkO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB3YXRjaFByb21pc2U9KHAsd2F0Y2hlciwuLi53YXRjaGVyQXJncyk9PntcblByb21pc2UucmVzb2x2ZShwKT09PXB8fEZhaWwgYHdhdGNoUHJvbWlzZSBvbmx5IHdhdGNoZXMgcHJvbWlzZXNgO1xuY29uc3Qgb25GdWxmaWxsZWQ9Y2FsbE1lTWF5YmUod2F0Y2hlciwnb25GdWxmaWxsZWQnLHdhdGNoZXJBcmdzKTtcbmNvbnN0IG9uUmVqZWN0ZWQ9Y2FsbE1lTWF5YmUod2F0Y2hlciwnb25SZWplY3RlZCcsd2F0Y2hlckFyZ3MpO1xub25GdWxmaWxsZWR8fFxub25SZWplY3RlZHx8XG5GYWlsIGBwcm9taXNlIHdhdGNoZXIgbXVzdCBpbXBsZW1lbnQgYXQgbGVhc3Qgb25lIGhhbmRsZXIgbWV0aG9kYDtcbnZvaWQgRS53aGVuKHAsb25GdWxmaWxsZWQsb25SZWplY3RlZCk7XG4gfTskaM2PX29uY2Uud2F0Y2hQcm9taXNlKHdhdGNoUHJvbWlzZSk7XG5oYXJkZW4od2F0Y2hQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlByb21pc2VXYXRjaGVySGFuZGxlciI6WyJQcm9taXNlV2F0Y2hlckhhbmRsZXIiXSwiUHJvbWlzZVdhdGNoZXJJIjpbIlByb21pc2VXYXRjaGVySSJdLCJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiOlsiUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJIl0sIlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJIjpbIlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJIl0sIndhdGNoUHJvbWlzZSI6WyJ3YXRjaFByb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAXM2qhwAdAAAAHQAAJgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRNYXRoLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIiwiLi9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiLCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQW1vdW50TWF0aCIsIkFzc2V0S2luZCIsImFzc2VydEFzc2V0S2luZCIsImFzc2VydFZhbHVlR2V0SGVscGVycyIsImdldEFzc2V0S2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwscGFzc1N0eWxlT2YsYXNzZXJ0UmVtb3RhYmxlLGFzc2VydFJlY29yZCxNLG1hdGNoZXMsbmF0TWF0aEhlbHBlcnMsc2V0TWF0aEhlbHBlcnMsY29weVNldE1hdGhIZWxwZXJzLGNvcHlCYWdNYXRoSGVscGVyczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImFzc2VydFJlbW90YWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRSZW1vdGFibGUgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UmVjb3JkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJlY29yZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzXCIsIFtbXCJuYXRNYXRoSGVscGVyc1wiLCBbJGjNj19hID0+IChuYXRNYXRoSGVscGVycyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanNcIiwgW1tcInNldE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKHNldE1hdGhIZWxwZXJzID0gJGjNj19hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanNcIiwgW1tcImNvcHlTZXRNYXRoSGVscGVyc1wiLCBbJGjNj19hID0+IChjb3B5U2V0TWF0aEhlbHBlcnMgPSAkaM2PX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc1wiLCBbW1wiY29weUJhZ01hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKGNvcHlCYWdNYXRoSGVscGVycyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLy9cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBBc3NldEtpbmQ9LyogICAgICAgICAgICAgICAgKi97XG5OQVQ6J25hdCcsXG5TRVQ6J3NldCcsXG5DT1BZX1NFVDonY29weVNldCcsXG5DT1BZX0JBRzonY29weUJhZyd9OyRozY9fb25jZS5Bc3NldEtpbmQoQXNzZXRLaW5kKTtcblxuaGFyZGVuKEFzc2V0S2luZCk7XG5jb25zdCBhc3NldEtpbmROYW1lcz1oYXJkZW4oT2JqZWN0LnZhbHVlcyhBc3NldEtpbmQpLnNvcnQoKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0QXNzZXRLaW5kPShhbGxlZ2VkQUspPT57XG5hc3NldEtpbmROYW1lcy5pbmNsdWRlcyhhbGxlZ2VkQUspfHxcbkZhaWwgYFRoZSBhc3NldEtpbmQgJHthbGxlZ2VkQUt9IG11c3QgYmUgb25lIG9mICR7cShhc3NldEtpbmROYW1lcyl9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRBc3NldEtpbmQoYXNzZXJ0QXNzZXRLaW5kKTtcbmhhcmRlbihhc3NlcnRBc3NldEtpbmQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgaGVscGVycz17XG5uYXQ6bmF0TWF0aEhlbHBlcnMsXG5zZXQ6c2V0TWF0aEhlbHBlcnMsXG5jb3B5U2V0OmNvcHlTZXRNYXRoSGVscGVycyxcbmNvcHlCYWc6Y29weUJhZ01hdGhIZWxwZXJzfTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQ9KHZhbHVlKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbHVlKTtcbmlmKHBhc3NTdHlsZT09PSdiaWdpbnQnKXtcbnJldHVybiduYXQnO1xuIH1cbmlmKHBhc3NTdHlsZT09PSdjb3B5QXJyYXknKXtcbnJldHVybidzZXQnO1xuIH1cbmlmKG1hdGNoZXModmFsdWUsTS5zZXQoKSkpe1xucmV0dXJuJ2NvcHlTZXQnO1xuIH1cbmlmKG1hdGNoZXModmFsdWUsTS5iYWcoKSkpe1xucmV0dXJuJ2NvcHlCYWcnO1xuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xudGhyb3cgRmFpbCBgdmFsdWUgJHt2YWx1ZX0gbXVzdCBiZSBhIGJpZ2ludCwgY29weVNldCwgY29weUJhZywgb3IgYW4gYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0VmFsdWVHZXRIZWxwZXJzPSh2YWx1ZSk9PlxuLy9cbmhlbHBlcnNbYXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQodmFsdWUpXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYXNzZXJ0VmFsdWVHZXRIZWxwZXJzKGFzc2VydFZhbHVlR2V0SGVscGVycyk7XG5jb25zdCBvcHRpb25hbEJyYW5kQ2hlY2s9KGFsbGVnZWRCcmFuZCxicmFuZCk9PntcbmlmKGJyYW5kIT09dW5kZWZpbmVkKXtcbmFzc2VydFJlbW90YWJsZShicmFuZCwnYnJhbmQnKTtcbmFsbGVnZWRCcmFuZD09PWJyYW5kfHxcbkZhaWwgYGFtb3VudCdzIGJyYW5kICR7cShhbGxlZ2VkQnJhbmQpfSBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGJyYW5kICR7cShcbmJyYW5kKVxuIH1gO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tMUkFuZEdldEhlbHBlcnM9KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuYXNzZXJ0UmVjb3JkKGxlZnRBbW91bnQsJ2xlZnRBbW91bnQnKTtcbmFzc2VydFJlY29yZChyaWdodEFtb3VudCwncmlnaHRBbW91bnQnKTtcbmNvbnN0e3ZhbHVlOmxlZnRWYWx1ZSxicmFuZDpsZWZ0QnJhbmR9PWxlZnRBbW91bnQ7XG5jb25zdHt2YWx1ZTpyaWdodFZhbHVlLGJyYW5kOnJpZ2h0QnJhbmR9PXJpZ2h0QW1vdW50O1xuYXNzZXJ0UmVtb3RhYmxlKGxlZnRCcmFuZCwnbGVmdEJyYW5kJyk7XG5hc3NlcnRSZW1vdGFibGUocmlnaHRCcmFuZCwncmlnaHRCcmFuZCcpO1xub3B0aW9uYWxCcmFuZENoZWNrKGxlZnRCcmFuZCxicmFuZCk7XG5vcHRpb25hbEJyYW5kQ2hlY2socmlnaHRCcmFuZCxicmFuZCk7XG5sZWZ0QnJhbmQ9PT1yaWdodEJyYW5kfHxcbkZhaWwgYEJyYW5kcyBpbiBsZWZ0ICR7cShsZWZ0QnJhbmQpfSBhbmQgcmlnaHQgJHtxKFxucmlnaHRCcmFuZClcbiB9IHNob3VsZCBtYXRjaCBidXQgZG8gbm90YDtcbmNvbnN0IGxlZnRIZWxwZXJzPWFzc2VydFZhbHVlR2V0SGVscGVycyhsZWZ0VmFsdWUpO1xuY29uc3QgcmlnaHRIZWxwZXJzPWFzc2VydFZhbHVlR2V0SGVscGVycyhyaWdodFZhbHVlKTtcbmxlZnRIZWxwZXJzPT09cmlnaHRIZWxwZXJzfHxcbkZhaWwgYFRoZSBsZWZ0ICR7bGVmdEFtb3VudH0gYW5kIHJpZ2h0IGFtb3VudCAke3JpZ2h0QW1vdW50fSBoYWQgZGlmZmVyZW50IGFzc2V0S2luZHNgO1xucmV0dXJuIGxlZnRIZWxwZXJzO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjb2VyY2VMUj0oaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KT0+e1xuLy9cbnJldHVybltoLmRvQ29lcmNlKGxlZnRBbW91bnQudmFsdWUpLGguZG9Db2VyY2UocmlnaHRBbW91bnQudmFsdWUpXTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNHVEU9KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbnJldHVybiBoLmRvSXNHVEUoLi4uY29lcmNlTFIoaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEFtb3VudE1hdGg9e1xuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xubWFrZTooYnJhbmQsYWxsZWdlZFZhbHVlKT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuY29uc3QgaD1hc3NlcnRWYWx1ZUdldEhlbHBlcnMoYWxsZWdlZFZhbHVlKTtcbmNvbnN0IHZhbHVlPWguZG9Db2VyY2UoYWxsZWdlZFZhbHVlKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29lcmNlOihicmFuZCxhbGxlZ2VkQW1vdW50KT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYXNzZXJ0UmVjb3JkKGFsbGVnZWRBbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQ6YWxsZWdlZEJyYW5kLHZhbHVlOmFsbGVnZWRWYWx1ZX09YWxsZWdlZEFtb3VudDtcbmJyYW5kPT09YWxsZWdlZEJyYW5kfHxcbkZhaWwgYFRoZSBicmFuZCBpbiB0aGUgYWxsZWdlZEFtb3VudCAke2FsbGVnZWRBbW91bnR9IGluICdjb2VyY2UnIGRpZG4ndCBtYXRjaCB0aGUgc3BlY2lmaWVkIGJyYW5kICR7YnJhbmR9LmA7XG4vL1xuLy9cbnJldHVybiBBbW91bnRNYXRoLm1ha2UoYnJhbmQsYWxsZWdlZFZhbHVlKTtcbiB9LFxuLypcblxuXG5cblxuXG5cbiAgICovXG5nZXRWYWx1ZTooYnJhbmQsYW1vdW50KT0+QW1vdW50TWF0aC5jb2VyY2UoYnJhbmQsYW1vdW50KS52YWx1ZSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5tYWtlRW1wdHk6KGJyYW5kLGFzc2V0S2luZD0vKiAgICAgICAgICAgICAgICAqLyduYXQnKT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5jb25zdCB2YWx1ZT1oZWxwZXJzW2Fzc2V0S2luZF0uZG9NYWtlRW1wdHkoKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbm1ha2VFbXB0eUZyb21BbW91bnQ6KGFtb3VudCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQsdmFsdWV9PWFtb3VudDtcbmNvbnN0IGFzc2V0S2luZD1hc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSk7XG4vL1xucmV0dXJuIEFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG4gfSxcbi8qXG5cblxuXG5cblxuICAgKi9cbmlzRW1wdHk6KGFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5hc3NlcnRSZWNvcmQoYW1vdW50LCdhbW91bnQnKTtcbmNvbnN0e2JyYW5kOmFsbGVnZWRCcmFuZCx2YWx1ZX09YW1vdW50O1xuYXNzZXJ0UmVtb3RhYmxlKGFsbGVnZWRCcmFuZCwnYnJhbmQnKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhhbGxlZ2VkQnJhbmQsYnJhbmQpO1xuY29uc3QgaD1hc3NlcnRWYWx1ZUdldEhlbHBlcnModmFsdWUpO1xucmV0dXJuIGguZG9Jc0VtcHR5KGguZG9Db2VyY2UodmFsdWUpKTtcbiB9LFxuaXNHVEUsXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5pc0VxdWFsOihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5yZXR1cm4gaC5kb0lzRXF1YWwoLi4uY29lcmNlTFIoaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmFkZDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xuY29uc3QgdmFsdWU9aC5kb0FkZCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZDpsZWZ0QW1vdW50LmJyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuc3VidHJhY3Q6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbmNvbnN0IHZhbHVlPWguZG9TdWJ0cmFjdCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZDpsZWZ0QW1vdW50LmJyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5taW46KHgseSxicmFuZD11bmRlZmluZWQpPT5cbi8vXG5pc0dURSh4LHksYnJhbmQpP1xueTpcbmlzR1RFKHkseCxicmFuZCk/XG54OlxuRmFpbCBgJHt4fSBhbmQgJHt5fSBhcmUgaW5jb21wYXJhYmxlYCxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5tYXg6KHgseSxicmFuZD11bmRlZmluZWQpPT5cbi8vXG5pc0dURSh4LHksYnJhbmQpP1xueDpcbmlzR1RFKHkseCk/XG55OlxuRmFpbCBgJHt4fSBhbmQgJHt5fSBhcmUgaW5jb21wYXJhYmxlYH07JGjNj19vbmNlLkFtb3VudE1hdGgoQW1vdW50TWF0aCk7XG5cbmhhcmRlbihBbW91bnRNYXRoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBnZXRBc3NldEtpbmQ9KGFtb3VudCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7dmFsdWV9PWFtb3VudDtcbnJldHVybiBhc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSk7XG4gfTskaM2PX29uY2UuZ2V0QXNzZXRLaW5kKGdldEFzc2V0S2luZCk7XG5oYXJkZW4oZ2V0QXNzZXRLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkFzc2V0S2luZCI6WyJBc3NldEtpbmQiXSwiYXNzZXJ0QXNzZXRLaW5kIjpbImFzc2VydEFzc2V0S2luZCJdLCJhc3NlcnRWYWx1ZUdldEhlbHBlcnMiOlsiYXNzZXJ0VmFsdWVHZXRIZWxwZXJzIl0sIkFtb3VudE1hdGgiOlsiQW1vdW50TWF0aCJdLCJnZXRBc3NldEtpbmQiOlsiZ2V0QXNzZXRLaW5kIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAI+Vy8obBAAAGwQAACcAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvYW1vdW50U3RvcmUuanN7ImltcG9ydHMiOlsiLi9hbW91bnRNYXRoLmpzIl0sImV4cG9ydHMiOlsibWFrZUFtb3VudFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEFtb3VudE1hdGg7JGjNj19pbXBvcnRzKFtbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQW1vdW50U3RvcmU9KHN0YXRlLGtleSk9PntcbnJldHVybiBoYXJkZW4oe1xuZ2V0QW1vdW50OigpPT5zdGF0ZVtrZXldLFxuaW5jcmVtZW50OihkZWx0YSk9PntcbnN0YXRlW2tleV09QW1vdW50TWF0aC5hZGQoc3RhdGVba2V5XSxkZWx0YSk7XG4gfSxcbmRlY3JlbWVudDooZGVsdGEpPT57XG5pZihBbW91bnRNYXRoLmlzR1RFKHN0YXRlW2tleV0sZGVsdGEpKXtcbnN0YXRlW2tleV09QW1vdW50TWF0aC5zdWJ0cmFjdChzdGF0ZVtrZXldLGRlbHRhKTtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlQW1vdW50U3RvcmUobWFrZUFtb3VudFN0b3JlKTtcbmhhcmRlbihtYWtlQW1vdW50U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFtb3VudFN0b3JlIjpbIm1ha2VBbW91bnRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADood0axwUAAMcFAAAnAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Rpc3BsYXlJbmZvLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJjb2VyY2VEaXNwbGF5SW5mbyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG11c3RNYXRjaCxEaXNwbGF5SW5mb1NoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJEaXNwbGF5SW5mb1NoYXBlXCIsIFskaM2PX2EgPT4gKERpc3BsYXlJbmZvU2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZURpc3BsYXlJbmZvPShhbGxlZ2VkRGlzcGxheUluZm8sYXNzZXRLaW5kKT0+e1xubXVzdE1hdGNoKGFsbGVnZWREaXNwbGF5SW5mbyxEaXNwbGF5SW5mb1NoYXBlLCdkaXNwbGF5SW5mbycpO1xuXG5pZihhbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kIT09dW5kZWZpbmVkKXtcbmFsbGVnZWREaXNwbGF5SW5mby5hc3NldEtpbmQ9PT1hc3NldEtpbmR8fFxuRmFpbCBgZGlzcGxheUluZm8uYXNzZXRLaW5kIHdhcyBwcmVzZW50ICgke2FsbGVnZWREaXNwbGF5SW5mby5hc3NldEtpbmR9KSBhbmQgZGlkIG5vdCBtYXRjaCB0aGUgYXNzZXRLaW5kIGFyZ3VtZW50ICgke2Fzc2V0S2luZH0pYDtcbiB9XG5jb25zdCBkaXNwbGF5SW5mbz1oYXJkZW4oey4uLmFsbGVnZWREaXNwbGF5SW5mbyxhc3NldEtpbmR9KTtcblxuaWYoZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlcyE9PXVuZGVmaW5lZCl7XG5OdW1iZXIuaXNTYWZlSW50ZWdlcihkaXNwbGF5SW5mby5kZWNpbWFsUGxhY2VzKXx8XG5GYWlsIGBkZWNpbWFsUGxhY2VzICR7ZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlc30gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYDtcbiB9XG5cbnJldHVybiBkaXNwbGF5SW5mbztcbiB9OyRozY9fb25jZS5jb2VyY2VEaXNwbGF5SW5mbyhjb2VyY2VEaXNwbGF5SW5mbyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb2VyY2VEaXNwbGF5SW5mbyI6WyJjb2VyY2VEaXNwbGF5SW5mbyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAjjjJqPwIAAD8CAAAhAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyIsIi4vaXNzdWVyS2l0LmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyIsIi4vaXNzdWVyS2l0LmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtdXSxbXCIuL2lzc3VlcktpdC5qc1wiLCBbXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGiU08lqFgAAahYAACUAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaXNzdWVyS2l0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b25lL2R1cmFibGUuanMiLCIuL2Ftb3VudE1hdGguanMiLCIuL2Rpc3BsYXlJbmZvLmpzIiwiLi9wYXltZW50TGVkZ2VyLmpzIl0sImV4cG9ydHMiOlsiaGFzSXNzdWVyIiwibWFrZUR1cmFibGVJc3N1ZXJLaXQiLCJtYWtlSXNzdWVyS2l0IiwicHJlcGFyZUlzc3VlcktpdCIsInVwZ3JhZGVJc3N1ZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwsYXNzZXJ0UGF0dGVybixtYWtlU2NhbGFyQmlnTWFwU3RvcmUsbWFrZUR1cmFibGVab25lLEFzc2V0S2luZCxhc3NlcnRBc3NldEtpbmQsY29lcmNlRGlzcGxheUluZm8scHJlcGFyZVBheW1lbnRMZWRnZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzXCIsIFtbXCJtYWtlRHVyYWJsZVpvbmVcIiwgWyRozY9fYSA9PiAobWFrZUR1cmFibGVab25lID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBc3NldEtpbmRcIiwgWyRozY9fYSA9PiAoQXNzZXRLaW5kID0gJGjNj19hKV1dLFtcImFzc2VydEFzc2V0S2luZFwiLCBbJGjNj19hID0+IChhc3NlcnRBc3NldEtpbmQgPSAkaM2PX2EpXV1dXSxbXCIuL2Rpc3BsYXlJbmZvLmpzXCIsIFtbXCJjb2VyY2VEaXNwbGF5SW5mb1wiLCBbJGjNj19hID0+IChjb2VyY2VEaXNwbGF5SW5mbyA9ICRozY9fYSldXV1dLFtcIi4vcGF5bWVudExlZGdlci5qc1wiLCBbW1wicHJlcGFyZVBheW1lbnRMZWRnZXJcIiwgWyRozY9fYSA9PiAocHJlcGFyZVBheW1lbnRMZWRnZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzZXR1cElzc3VlcktpdD0oXG57bmFtZSxhc3NldEtpbmQsZGlzcGxheUluZm8sZWxlbWVudFNoYXBlfSxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkKT0+XG57XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5cbi8vXG5jb25zdCBjbGVhbkRpc3BsYXlJbmZvPWNvZXJjZURpc3BsYXlJbmZvKGRpc3BsYXlJbmZvLGFzc2V0S2luZCk7XG5pZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2Yob3B0U2h1dGRvd25XaXRoRmFpbHVyZSwnZnVuY3Rpb24nKTtcbiB9XG5cbmlmKGVsZW1lbnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGVsZW1lbnRTaGFwZSk7XG4gfVxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0e2lzc3VlcixtaW50LGJyYW5kLG1pbnRSZWNvdmVyeVB1cnNlfT1wcmVwYXJlUGF5bWVudExlZGdlcihcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuY2xlYW5EaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5icmFuZCxcbmlzc3Vlcixcbm1pbnQsXG5taW50UmVjb3ZlcnlQdXJzZSxcbmRpc3BsYXlJbmZvOmNsZWFuRGlzcGxheUluZm99KTtcblxuIH07XG5oYXJkZW4oc2V0dXBJc3N1ZXJLaXQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBJTlNUQU5DRV9LRVk9J2lzc3Vlcic7XG4vKlxuXG5cblxuICovXG5jb25zdCBSRUNPVkVSWV9TRVRTX1NUQVRFPSdyZWNvdmVyeVNldHNTdGF0ZSc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1cGdyYWRlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbnJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWQpPT5cbntcbmNvbnN0IGlzc3VlclJlY29yZD1pc3N1ZXJCYWdnYWdlLmdldChJTlNUQU5DRV9LRVkpO1xuY29uc3QgaXNzdWVyWm9uZT1tYWtlRHVyYWJsZVpvbmUoaXNzdWVyQmFnZ2FnZSk7XG5jb25zdCBvbGRSZWNvdmVyeVNldHNTdGF0ZT1pc3N1ZXJCYWdnYWdlLmhhcyhSRUNPVkVSWV9TRVRTX1NUQVRFKT9cbmlzc3VlckJhZ2dhZ2UuZ2V0KFJFQ09WRVJZX1NFVFNfU1RBVEUpOlxuJ2hhc1JlY292ZXJ5U2V0cyc7XG5pZihcbm9sZFJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyYmXG5yZWNvdmVyeVNldHNPcHRpb249PT0naGFzUmVjb3ZlcnlTZXRzJylcbntcbkZhaWwgYENhbm5vdCAoeWV0PykgdXBncmFkZSBmcm9tICdub1JlY292ZXJ5U2V0cycgdG8gJ2hhc1JlY292ZXJ5U2V0cydgO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8b2xkUmVjb3ZlcnlTZXRzU3RhdGU7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJSZWNvcmQsXG5pc3N1ZXJab25lLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKTtcblxuIH07JGjNj19vbmNlLnVwZ3JhZGVJc3N1ZXJLaXQodXBncmFkZUlzc3VlcktpdCk7XG5oYXJkZW4odXBncmFkZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBoYXNJc3N1ZXI9KGJhZ2dhZ2UpPT5iYWdnYWdlLmhhcyhJTlNUQU5DRV9LRVkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaGFzSXNzdWVyKGhhc0lzc3Vlcik7XG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVJc3N1ZXJLaXQ9KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz1oYXJkZW4oe30pLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG57ZWxlbWVudFNoYXBlPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QgaXNzdWVyRGF0YT1oYXJkZW4oe1xubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlfSk7XG5cbmlzc3VlckJhZ2dhZ2UuaW5pdChJTlNUQU5DRV9LRVksaXNzdWVyRGF0YSk7XG5jb25zdCBpc3N1ZXJab25lPW1ha2VEdXJhYmxlWm9uZShpc3N1ZXJCYWdnYWdlKTtcbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8J2hhc1JlY292ZXJ5U2V0cyc7XG5pc3N1ZXJCYWdnYWdlLmluaXQoUkVDT1ZFUllfU0VUU19TVEFURSxyZWNvdmVyeVNldHNTdGF0ZSk7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJEYXRhLFxuaXNzdWVyWm9uZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRHVyYWJsZUlzc3VlcktpdChtYWtlRHVyYWJsZUlzc3VlcktpdCk7XG5oYXJkZW4obWFrZUR1cmFibGVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxub3B0aW9ucz17fSk9Plxue1xuaWYoaGFzSXNzdWVyKGlzc3VlckJhZ2dhZ2UpKXtcbmNvbnN0e2VsZW1lbnRTaGFwZTpfPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdCBpc3N1ZXJLaXQ9dXBncmFkZUlzc3VlcktpdChcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxucmVjb3ZlcnlTZXRzT3B0aW9uKTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbnJldHVybiBpc3N1ZXJLaXQ7XG4gfWVsc2V7XG5jb25zdCBpc3N1ZXJLaXQ9bWFrZUR1cmFibGVJc3N1ZXJLaXQoXG5pc3N1ZXJCYWdnYWdlLFxubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gaXNzdWVyS2l0O1xuIH1cbiB9OyRozY9fb25jZS5wcmVwYXJlSXNzdWVyS2l0KHByZXBhcmVJc3N1ZXJLaXQpO1xuaGFyZGVuKHByZXBhcmVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJc3N1ZXJLaXQ9KFxubmFtZSxcbi8vXG5hc3NldEtpbmQ9QXNzZXRLaW5kLk5BVCxcbmRpc3BsYXlJbmZvPWhhcmRlbih7fSksXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbntlbGVtZW50U2hhcGU9dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PXt9KT0+XG5cbm1ha2VEdXJhYmxlSXNzdWVyS2l0KFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCdkcm9wcGVkIGlzc3VlciBraXQnLHtkdXJhYmxlOnRydWV9KSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG57ZWxlbWVudFNoYXBlLHJlY292ZXJ5U2V0c09wdGlvbn0pOyRozY9fb25jZS5tYWtlSXNzdWVyS2l0KG1ha2VJc3N1ZXJLaXQpO1xuXG5oYXJkZW4obWFrZUlzc3VlcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ1cGdyYWRlSXNzdWVyS2l0IjpbInVwZ3JhZGVJc3N1ZXJLaXQiXSwiaGFzSXNzdWVyIjpbImhhc0lzc3VlciJdLCJtYWtlRHVyYWJsZUlzc3VlcktpdCI6WyJtYWtlRHVyYWJsZUlzc3VlcktpdCJdLCJwcmVwYXJlSXNzdWVyS2l0IjpbInByZXBhcmVJc3N1ZXJLaXQiXSwibWFrZUlzc3VlcktpdCI6WyJtYWtlSXNzdWVyS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOSrY+7hBQAA4QUAADoAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJjb3B5QmFnTWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlCYWcsbXVzdE1hdGNoLE0sZ2V0Q29weUJhZ0VudHJpZXMsYmFnSXNTdXBlcmJhZyxiYWdVbmlvbixiYWdEaXNqb2ludFN1YnRyYWN0OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlCYWdcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlCYWcgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiZ2V0Q29weUJhZ0VudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wiYmFnSXNTdXBlcmJhZ1wiLCBbJGjNj19hID0+IChiYWdJc1N1cGVyYmFnID0gJGjNj19hKV1dLFtcImJhZ1VuaW9uXCIsIFskaM2PX2EgPT4gKGJhZ1VuaW9uID0gJGjNj19hKV1dLFtcImJhZ0Rpc2pvaW50U3VidHJhY3RcIiwgWyRozY9fYSA9PiAoYmFnRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW1wdHk9bWFrZUNvcHlCYWcoW10pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5QmFnTWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihiYWcpPT57XG5tdXN0TWF0Y2goYmFnLE0uYmFnKCksJ2JhZyBvZiBhbW91bnQnKTtcbnJldHVybiBiYWc7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooYmFnKT0+Z2V0Q29weUJhZ0VudHJpZXMoYmFnKS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpiYWdJc1N1cGVyYmFnLFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6YmFnVW5pb24sXG5kb1N1YnRyYWN0OmJhZ0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2UuY29weUJhZ01hdGhIZWxwZXJzKGNvcHlCYWdNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5QmFnTWF0aEhlbHBlcnMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEGFj3ifBQAAnwUAADoAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJjb3B5U2V0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlTZXQsbXVzdE1hdGNoLE0sZ2V0Q29weVNldEtleXMsc2V0SXNTdXBlcnNldCxzZXREaXNqb2ludFVuaW9uLHNldERpc2pvaW50U3VidHJhY3Q7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXSxbXCJtYWtlQ29weVNldFwiLCBbJGjNj19hID0+IChtYWtlQ29weVNldCA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5U2V0S2V5cyA9ICRozY9fYSldXSxbXCJzZXRJc1N1cGVyc2V0XCIsIFskaM2PX2EgPT4gKHNldElzU3VwZXJzZXQgPSAkaM2PX2EpXV0sW1wic2V0RGlzam9pbnRVbmlvblwiLCBbJGjNj19hID0+IChzZXREaXNqb2ludFVuaW9uID0gJGjNj19hKV1dLFtcInNldERpc2pvaW50U3VidHJhY3RcIiwgWyRozY9fYSA9PiAoc2V0RGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbXB0eT1tYWtlQ29weVNldChbXSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29weVNldE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZTooc2V0KT0+e1xubXVzdE1hdGNoKHNldCxNLnNldCgpLCdzZXQgb2YgYW1vdW50Jyk7XG5yZXR1cm4gc2V0O1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KHNldCk9PmdldENvcHlTZXRLZXlzKHNldCkubGVuZ3RoPT09MCxcbmRvSXNHVEU6c2V0SXNTdXBlcnNldCxcbmRvSXNFcXVhbDprZXlFUSxcbmRvQWRkOnNldERpc2pvaW50VW5pb24sXG5kb1N1YnRyYWN0OnNldERpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2UuY29weVNldE1hdGhIZWxwZXJzKGNvcHlTZXRNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5U2V0TWF0aEhlbHBlcnMiOlsiY29weVNldE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJUrcMlnBAAAZwQAADYAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbmF0Il0sImV4cG9ydHMiOlsibmF0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxOYXQsaXNOYXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXSxbXCJpc05hdFwiLCBbJGjNj19hID0+IChpc05hdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBlbXB0eT0wbjtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG5hdE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZToobmF0KT0+e1xuLy9cbmFzc2VydC50eXBlb2YobmF0LCdiaWdpbnQnKTtcbmlzTmF0KG5hdCl8fEZhaWwgYHZhbHVlICR7bmF0fSBtdXN0IGJlIGEgbmF0dXJhbCBudW1iZXJgO1xucmV0dXJuIE5hdChuYXQpO1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KG5hdCk9Pm5hdD09PWVtcHR5LFxuZG9Jc0dURToobGVmdCxyaWdodCk9PmxlZnQ+PXJpZ2h0LFxuZG9Jc0VxdWFsOihsZWZ0LHJpZ2h0KT0+bGVmdD09PXJpZ2h0LFxuLy9cbmRvQWRkOihsZWZ0LHJpZ2h0KT0+bGVmdCtyaWdodCxcbmRvU3VidHJhY3Q6KGxlZnQscmlnaHQpPT5OYXQobGVmdC1yaWdodCl9KTskaM2PX29uY2UubmF0TWF0aEhlbHBlcnMobmF0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibmF0TWF0aEhlbHBlcnMiOlsibmF0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAARwq540gGAABIBgAANgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbInNldE1hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGFzc2VydEtleSxlbGVtZW50c0lzU3VwZXJzZXQsZWxlbWVudHNEaXNqb2ludFVuaW9uLGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCxjb2VyY2VUb0VsZW1lbnRzLGVsZW1lbnRzQ29tcGFyZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJlbGVtZW50c0lzU3VwZXJzZXRcIiwgWyRozY9fYSA9PiAoZWxlbWVudHNJc1N1cGVyc2V0ID0gJGjNj19hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRVbmlvblwiLCBbJGjNj19hID0+IChlbGVtZW50c0Rpc2pvaW50VW5pb24gPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0XCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXSxbXCJjb2VyY2VUb0VsZW1lbnRzXCIsIFskaM2PX2EgPT4gKGNvZXJjZVRvRWxlbWVudHMgPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNDb21wYXJlXCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzQ29tcGFyZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PWhhcmRlbihbXSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgc2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihsaXN0KT0+e1xubGlzdD1jb2VyY2VUb0VsZW1lbnRzKGxpc3QpO1xuLy9cbi8vXG4vL1xuLy9cbmFzc2VydEtleShsaXN0KTtcbnJldHVybiBsaXN0O1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KGxpc3QpPT5wYXNzU3R5bGVPZihsaXN0KT09PSdjb3B5QXJyYXknJiZsaXN0Lmxlbmd0aD09PTAsXG5kb0lzR1RFOmVsZW1lbnRzSXNTdXBlcnNldCxcbmRvSXNFcXVhbDooeCx5KT0+ZWxlbWVudHNDb21wYXJlKHgseSk9PT0wLFxuZG9BZGQ6ZWxlbWVudHNEaXNqb2ludFVuaW9uLFxuZG9TdWJ0cmFjdDplbGVtZW50c0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2Uuc2V0TWF0aEhlbHBlcnMoc2V0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0TWF0aEhlbHBlcnMiOlsic2V0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAANj9K1X8DAAB/AwAAIwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50LmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaW5pdEVtcHR5OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaM2PX2EgPT4gKGluaXRFbXB0eSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUGF5bWVudEtpbmQ9KGlzc3VlclpvbmUsbmFtZSxicmFuZCxQYXltZW50SSk9PntcbmNvbnN0IG1ha2VQYXltZW50PWlzc3VlclpvbmUuZXhvQ2xhc3MoXG4gYCR7bmFtZX0gcGF5bWVudGAsXG5QYXltZW50SSxcbmluaXRFbXB0eSxcbntcbmdldEFsbGVnZWRCcmFuZCgpe1xucmV0dXJuIGJyYW5kO1xuIH19KTtcblxuXG5yZXR1cm4gbWFrZVBheW1lbnQ7XG4gfTskaM2PX29uY2UucHJlcGFyZVBheW1lbnRLaW5kKHByZXBhcmVQYXltZW50S2luZCk7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQYXltZW50S2luZCI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuMRNZu0fAADtHwAAKQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50TGVkZ2VyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGFnb3JpYy9zdG9yZSIsIi4vYW1vdW50TWF0aC5qcyIsIi4vcGF5bWVudC5qcyIsIi4vcHVyc2UuanMiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudExlZGdlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRmFpbCxhbm5vdGF0ZUVycm9yLGlzUHJvbWlzZSxtdXN0TWF0Y2gsTSxrZXlFUSxBbW91bnRNYXRoLHByZXBhcmVQYXltZW50S2luZCxwcmVwYXJlUHVyc2VLaW5kLEJyYW5kSSxtYWtlSXNzdWVySW50ZXJmYWNlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXV1dLFtcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV0sW1wiLi9wYXltZW50LmpzXCIsIFtbXCJwcmVwYXJlUGF5bWVudEtpbmRcIiwgWyRozY9fYSA9PiAocHJlcGFyZVBheW1lbnRLaW5kID0gJGjNj19hKV1dXV0sW1wiLi9wdXJzZS5qc1wiLCBbW1wicHJlcGFyZVB1cnNlS2luZFwiLCBbJGjNj19hID0+IChwcmVwYXJlUHVyc2VLaW5kID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJCcmFuZElcIiwgWyRozY9fYSA9PiAoQnJhbmRJID0gJGjNj19hKV1dLFtcIm1ha2VJc3N1ZXJJbnRlcmZhY2VzXCIsIFskaM2PX2EgPT4gKG1ha2VJc3N1ZXJJbnRlcmZhY2VzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgYW1vdW50U2hhcGVGcm9tRWxlbWVudFNoYXBlPShicmFuZCxhc3NldEtpbmQsZWxlbWVudFNoYXBlKT0+e1xubGV0IHZhbHVlU2hhcGU7XG5zd2l0Y2goYXNzZXRLaW5kKXtcbmNhc2UnbmF0Jzp7XG52YWx1ZVNoYXBlPU0ubmF0KCk7XG5lbGVtZW50U2hhcGU9PT11bmRlZmluZWR8fFxuRmFpbCBgRnVuZ2libGUgYXNzZXRzIGNhbm5vdCBoYXZlIGFuIGVsZW1lbnRTaGFwZTogJHtxKGVsZW1lbnRTaGFwZSl9YDtcbmJyZWFrO1xuIH1cbmNhc2Unc2V0Jzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLmFycmF5T2YoTS5rZXkoKSk7XG4gfWVsc2V7XG52YWx1ZVNoYXBlPU0uYXJyYXlPZihNLmFuZChNLmtleSgpLGVsZW1lbnRTaGFwZSkpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVNldCc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5zZXQoKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5zZXRPZihlbGVtZW50U2hhcGUpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weUJhZyc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5iYWcoKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5iYWdPZihlbGVtZW50U2hhcGUpO1xuIH1cbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuRmFpbCBgdW5leHBlY3RlZCBhc3NldCBraW5kICR7cShhc3NldEtpbmQpfWA7XG4gfX1cblxuXG5jb25zdCBhbW91bnRTaGFwZT1oYXJkZW4oe1xuYnJhbmQsLy9cbnZhbHVlOnZhbHVlU2hhcGV9KTtcblxucmV0dXJuIGFtb3VudFNoYXBlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUGF5bWVudExlZGdlcj0oXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCk9Plxue1xuLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBicmFuZD1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gYnJhbmRgLEJyYW5kSSx7XG5pc015SXNzdWVyKGFsbGVnZWRJc3N1ZXIpe1xuLy9cbnJldHVybiBhbGxlZ2VkSXNzdWVyPT09aXNzdWVyO1xuIH0sXG5nZXRBbGxlZ2VkTmFtZSgpe1xucmV0dXJuIG5hbWU7XG4gfSxcbi8vXG5nZXREaXNwbGF5SW5mbygpe1xucmV0dXJuIGRpc3BsYXlJbmZvO1xuIH0sXG5nZXRBbW91bnRTaGFwZSgpe1xucmV0dXJuIGFtb3VudFNoYXBlO1xuIH19KTtcblxuXG5jb25zdCBhbW91bnRTaGFwZT1hbW91bnRTaGFwZUZyb21FbGVtZW50U2hhcGUoXG5icmFuZCxcbmFzc2V0S2luZCxcbmVsZW1lbnRTaGFwZSk7XG5cblxuY29uc3R7SXNzdWVySSxNaW50SSxQYXltZW50SSxQdXJzZUlLaXR9PW1ha2VJc3N1ZXJJbnRlcmZhY2VzKFxuYnJhbmQsXG5hc3NldEtpbmQsXG5hbW91bnRTaGFwZSk7XG5cblxuY29uc3QgbWFrZVBheW1lbnQ9cHJlcGFyZVBheW1lbnRLaW5kKGlzc3VlclpvbmUsbmFtZSxicmFuZCxQYXltZW50SSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmU9KHJlYXNvbik9Pntcbi8vXG4vL1xuaWYob3B0U2h1dGRvd25XaXRoRmFpbHVyZSE9PXVuZGVmaW5lZCl7XG50cnl7XG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKHJlYXNvbik7XG4gfWNhdGNoKGVyckluU2h1dGRvd24pe1xuYW5ub3RhdGVFcnJvcihlcnJJblNodXRkb3duLFggYENhdXNlZCBieTogJHtyZWFzb259YCk7XG50aHJvdyBlcnJJblNodXRkb3duO1xuIH1cbiB9XG50aHJvdyByZWFzb247XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBheW1lbnRMZWRnZXI9aXNzdWVyWm9uZS53ZWFrTWFwU3RvcmUoJ3BheW1lbnRMZWRnZXInLHtcbnZhbHVlU2hhcGU6YW1vdW50U2hhcGV9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwYXltZW50UmVjb3ZlcnlTZXRzPWlzc3VlclpvbmUud2Vha01hcFN0b3JlKCdwYXltZW50UmVjb3ZlcnlTZXRzJyk7XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgaW5pdFBheW1lbnQ9KHBheW1lbnQsYW1vdW50LG9wdFJlY292ZXJ5U2V0PXVuZGVmaW5lZCk9PntcbmlmKHJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyl7XG5vcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZHx8XG5GYWlsIGB3aGVuIHJlY292ZXJTZXRzU3RhdGUgPT09ICdub1JlY292ZXJ5U2V0cycsIG9wdFJlY292ZXJ5U2V0IG11c3QgYmUgZW1wdHlgO1xuIH1cbmlmKG9wdFJlY292ZXJ5U2V0IT09dW5kZWZpbmVkJiYhQW1vdW50TWF0aC5pc0VtcHR5KGFtb3VudCkpe1xub3B0UmVjb3ZlcnlTZXQuYWRkKHBheW1lbnQpO1xucGF5bWVudFJlY292ZXJ5U2V0cy5pbml0KHBheW1lbnQsb3B0UmVjb3ZlcnlTZXQpO1xuIH1cbnBheW1lbnRMZWRnZXIuaW5pdChwYXltZW50LGFtb3VudCk7XG4gfTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGRlbGV0ZVBheW1lbnQ9KHBheW1lbnQpPT57XG5wYXltZW50TGVkZ2VyLmRlbGV0ZShwYXltZW50KTtcbmlmKHBheW1lbnRSZWNvdmVyeVNldHMuaGFzKHBheW1lbnQpKXtcbmNvbnN0IHJlY292ZXJ5U2V0PXBheW1lbnRSZWNvdmVyeVNldHMuZ2V0KHBheW1lbnQpO1xucGF5bWVudFJlY292ZXJ5U2V0cy5kZWxldGUocGF5bWVudCk7XG5yZWNvdmVyeVNldC5kZWxldGUocGF5bWVudCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29lcmNlPShhbGxlZ2VkQW1vdW50KT0+QW1vdW50TWF0aC5jb2VyY2UoYnJhbmQsYWxsZWdlZEFtb3VudCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYXNzZXJ0QW1vdW50Q29uc2lzdGVudD0ocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpPT57XG5pZihvcHRBbW91bnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2gocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUsJ2Ftb3VudCcpO1xuIH1cbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBhc3NlcnRMaXZlUGF5bWVudD0ocGF5bWVudCk9PntcbnBheW1lbnRMZWRnZXIuaGFzKHBheW1lbnQpfHxcbkZhaWwgYCR7cGF5bWVudH0gd2FzIG5vdCBhIGxpdmUgcGF5bWVudCBmb3IgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfS4gSXQgY291bGQgYmUgYSB1c2VkLXVwIHBheW1lbnQsIGEgcGF5bWVudCBmb3IgYW5vdGhlciBicmFuZCwgb3IgaXQgbWlnaHQgbm90IGJlIGEgcGF5bWVudCBhdCBhbGwuYDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlcG9zaXRJbnRlcm5hbD0oXG5iYWxhbmNlU3RvcmUsXG5zcmNQYXltZW50LFxub3B0QW1vdW50U2hhcGU9dW5kZWZpbmVkKT0+XG57XG4haXNQcm9taXNlKHNyY1BheW1lbnQpfHxcbmFzc2VydC5mYWlsKFxuIGBkZXBvc2l0IGRvZXMgbm90IGFjY2VwdCBwcm9taXNlcyBhcyBmaXJzdCBhcmd1bWVudC4gSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBwcm9taXNlIChkZXBvc2l0KHBheW1lbnRQcm9taXNlKSksIGNvbnNpZGVyIHVud3JhcHBpbmcgdGhlIHByb21pc2UgZmlyc3Q6IEUud2hlbihwYXltZW50UHJvbWlzZSwgKGFjdHVhbFBheW1lbnQgPT4gZGVwb3NpdChhY3R1YWxQYXltZW50KSlgLFxuVHlwZUVycm9yKTtcblxuYXNzZXJ0TGl2ZVBheW1lbnQoc3JjUGF5bWVudCk7XG5jb25zdCBzcmNQYXltZW50QmFsYW5jZT1wYXltZW50TGVkZ2VyLmdldChzcmNQYXltZW50KTtcbmFzc2VydEFtb3VudENvbnNpc3RlbnQoc3JjUGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpO1xudHJ5e1xuLy9cbi8vXG4vL1xuZGVsZXRlUGF5bWVudChzcmNQYXltZW50KTtcbmJhbGFuY2VTdG9yZS5pbmNyZW1lbnQoc3JjUGF5bWVudEJhbGFuY2UpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBzcmNQYXltZW50QmFsYW5jZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHdpdGhkcmF3SW50ZXJuYWw9KGJhbGFuY2VTdG9yZSxhbW91bnQscmVjb3ZlcnlTZXQ9dW5kZWZpbmVkKT0+e1xuYW1vdW50PWNvZXJjZShhbW91bnQpO1xuY29uc3QgcGF5bWVudD1tYWtlUGF5bWVudCgpO1xuLy9cbi8vXG5iYWxhbmNlU3RvcmUuZGVjcmVtZW50KGFtb3VudCl8fFxuRmFpbCBgV2l0aGRyYXdhbCBvZiAke2Ftb3VudH0gZmFpbGVkIGJlY2F1c2UgdGhlIHB1cnNlIG9ubHkgY29udGFpbmVkICR7YmFsYW5jZVN0b3JlLmdldEFtb3VudCgpfWA7XG50cnl7XG5pbml0UGF5bWVudChwYXltZW50LGFtb3VudCxyZWNvdmVyeVNldCk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHBheW1lbnQ7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBtYWtlRW1wdHlQdXJzZT1wcmVwYXJlUHVyc2VLaW5kKFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5icmFuZCxcblB1cnNlSUtpdCxcbmhhcmRlbih7XG5kZXBvc2l0SW50ZXJuYWwsXG53aXRoZHJhd0ludGVybmFsfSksXG5cbnJlY292ZXJ5U2V0c1N0YXRlLFxucGF5bWVudFJlY292ZXJ5U2V0cyk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaXNzdWVyPWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBpc3N1ZXJgLElzc3Vlckkse1xuZ2V0QnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9LFxuZ2V0QWxsZWdlZE5hbWUoKXtcbnJldHVybiBuYW1lO1xuIH0sXG5nZXRBc3NldEtpbmQoKXtcbnJldHVybiBhc3NldEtpbmQ7XG4gfSxcbmdldERpc3BsYXlJbmZvKCl7XG5yZXR1cm4gZGlzcGxheUluZm87XG4gfSxcbm1ha2VFbXB0eVB1cnNlKCl7XG5yZXR1cm4gbWFrZUVtcHR5UHVyc2UoKTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5pc0xpdmUocGF5bWVudCl7XG4vL1xucmV0dXJuIHBheW1lbnRMZWRnZXIuaGFzKHBheW1lbnQpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEFtb3VudE9mKHBheW1lbnQpe1xuLy9cbmFzc2VydExpdmVQYXltZW50KHBheW1lbnQpO1xucmV0dXJuIHBheW1lbnRMZWRnZXIuZ2V0KHBheW1lbnQpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmJ1cm4ocGF5bWVudCxvcHRBbW91bnRTaGFwZT11bmRlZmluZWQpe1xuLy9cbmFzc2VydExpdmVQYXltZW50KHBheW1lbnQpO1xuY29uc3QgcGF5bWVudEJhbGFuY2U9cGF5bWVudExlZGdlci5nZXQocGF5bWVudCk7XG5hc3NlcnRBbW91bnRDb25zaXN0ZW50KHBheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlKTtcbnRyeXtcbi8vXG5kZWxldGVQYXltZW50KHBheW1lbnQpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBwYXltZW50QmFsYW5jZTtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWludFJlY292ZXJ5UHVyc2U9LyogICAgICAgICAgICAgICAgICAgKi9cbmlzc3VlclpvbmUubWFrZU9uY2UoJ21pbnRSZWNvdmVyeVB1cnNlJywoKT0+bWFrZUVtcHR5UHVyc2UoKSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWludD1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gbWludGAsTWludEkse1xuZ2V0SXNzdWVyKCl7XG5yZXR1cm4gaXNzdWVyO1xuIH0sXG5taW50UGF5bWVudChuZXdBbW91bnQpe1xubmV3QW1vdW50PWNvZXJjZShuZXdBbW91bnQpO1xubXVzdE1hdGNoKG5ld0Ftb3VudCxhbW91bnRTaGFwZSwnbWludGVkIGFtb3VudCcpO1xuLy9cbi8vXG5jb25zdCByYXdQYXltZW50PW1ha2VQYXltZW50KCk7XG5pbml0UGF5bWVudChyYXdQYXltZW50LG5ld0Ftb3VudCx1bmRlZmluZWQpO1xuXG5jb25zdCBtaW50UmVjb3ZlcnlQdXJzZUJlZm9yZT1taW50UmVjb3ZlcnlQdXJzZS5nZXRDdXJyZW50QW1vdW50KCk7XG5taW50UmVjb3ZlcnlQdXJzZS5kZXBvc2l0KHJhd1BheW1lbnQsbmV3QW1vdW50KTtcbmNvbnN0IHBheW1lbnQ9bWludFJlY292ZXJ5UHVyc2Uud2l0aGRyYXcobmV3QW1vdW50KTtcbmNvbnN0IG1pbnRSZWNvdmVyeVB1cnNlQWZ0ZXI9bWludFJlY292ZXJ5UHVyc2UuZ2V0Q3VycmVudEFtb3VudCgpO1xuYXNzZXJ0KGtleUVRKG1pbnRSZWNvdmVyeVB1cnNlQmVmb3JlLG1pbnRSZWNvdmVyeVB1cnNlQWZ0ZXIpKTtcbnJldHVybiBwYXltZW50O1xuIH19KTtcblxuXG5jb25zdCBpc3N1ZXJLaXQ9aGFyZGVuKHtpc3N1ZXIsbWludCxicmFuZCxtaW50UmVjb3ZlcnlQdXJzZX0pO1xucmV0dXJuIGlzc3VlcktpdDtcbiB9OyRozY9fb25jZS5wcmVwYXJlUGF5bWVudExlZGdlcihwcmVwYXJlUGF5bWVudExlZGdlcik7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRMZWRnZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVBheW1lbnRMZWRnZXIiOlsicHJlcGFyZVBheW1lbnRMZWRnZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+AFIXOIQAADiEAAAIQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wdXJzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiLi9hbW91bnRNYXRoLmpzIiwiLi90cmFuc2llbnROb3RpZmllci5qcyIsIi4vYW1vdW50U3RvcmUuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUHVyc2VLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTSxtYWtlQ29weVNldCxBbW91bnRNYXRoLG1ha2VUcmFuc2llbnROb3RpZmllcktpdCxtYWtlQW1vdW50U3RvcmU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYWtlQ29weVNldFwiLCBbJGjNj19hID0+IChtYWtlQ29weVNldCA9ICRozY9fYSldXV1dLFtcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV0sW1wiLi90cmFuc2llbnROb3RpZmllci5qc1wiLCBbW1wibWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VUcmFuc2llbnROb3RpZmllcktpdCA9ICRozY9fYSldXV1dLFtcIi4vYW1vdW50U3RvcmUuanNcIiwgW1tcIm1ha2VBbW91bnRTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlQW1vdW50U3RvcmUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBFTVBUWV9DT1BZX1NFVD1tYWtlQ29weVNldChbXSk7XG5cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQdXJzZUtpbmQ9KFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5icmFuZCxcblB1cnNlSUtpdCxcbnB1cnNlTWV0aG9kcyxcbnJlY292ZXJ5U2V0c1N0YXRlLFxucGF5bWVudFJlY292ZXJ5U2V0cyk9Plxue1xuY29uc3QgYW1vdW50U2hhcGU9YnJhbmQuZ2V0QW1vdW50U2hhcGUoKTtcblxuLy9cbi8vXG4vL1xuY29uc3R7cHJvdmlkZU5vdGlmaWVyLHVwZGF0ZTp1cGRhdGVCYWxhbmNlfT1tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlUmVjb3ZlcnlTZXQ9KHN0YXRlKT0+e1xuY29uc3R7cmVjb3ZlcnlTZXR9PXN0YXRlO1xuaWYocmVjb3ZlcnlTZXRzU3RhdGU9PT0naGFzUmVjb3ZlcnlTZXRzJyl7XG5yZXR1cm4gcmVjb3ZlcnlTZXQ7XG4gfWVsc2V7XG5yZWNvdmVyeVNldHNTdGF0ZT09PSdub1JlY292ZXJ5U2V0cyd8fFxuRmFpbCBgcmVjb3ZlclNldHNTdGF0ZSBtdXN0IGJlIG5vUmVjb3ZlcnlTZXRzIGlmIGl0IGlzbid0IGhhc1JlY292ZXJTZXRzYDtcbnBheW1lbnRSZWNvdmVyeVNldHMhPT11bmRlZmluZWR8fFxuRmFpbCBgcGF5bWVudFJlY292ZXJ5U2V0cyBtdXN0IGFsd2F5cyBiZSBkZWZpbmVkYDtcbnJlY292ZXJ5U2V0LmdldFNpemUoKT09PTB8fFxuRmFpbCBgV2l0aCBub1JlY292ZXJ5U2V0cywgcmVjb3ZlcnlTZXQgbXVzdCBiZSBlbXB0eWA7XG5cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0e2RlcG9zaXRJbnRlcm5hbCx3aXRoZHJhd0ludGVybmFsfT1wdXJzZU1ldGhvZHM7XG5jb25zdCBtYWtlUHVyc2VLaXQ9aXNzdWVyWm9uZS5leG9DbGFzc0tpdChcbiBgJHtuYW1lfSBQdXJzZWAsXG5QdXJzZUlLaXQsXG4oKT0+e1xuY29uc3QgY3VycmVudEJhbGFuY2U9QW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlY292ZXJ5U2V0PWlzc3VlclpvbmUuZGV0YWNoZWQoKS5zZXRTdG9yZSgncmVjb3Zlcnkgc2V0Jyk7XG5cbnJldHVybntcbmN1cnJlbnRCYWxhbmNlLFxucmVjb3ZlcnlTZXR9O1xuXG4gfSxcbntcbnB1cnNlOntcbmRlcG9zaXQoc3JjUGF5bWVudCxvcHRBbW91bnRTaGFwZT11bmRlZmluZWQpe1xuLy9cbi8vXG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0e3B1cnNlfT10aGlzLmZhY2V0cztcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG4vL1xuY29uc3Qgc3JjUGF5bWVudEJhbGFuY2U9ZGVwb3NpdEludGVybmFsKFxuYmFsYW5jZVN0b3JlLFxuc3JjUGF5bWVudCxcbm9wdEFtb3VudFNoYXBlKTtcblxudXBkYXRlQmFsYW5jZShwdXJzZSxiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCkpO1xucmV0dXJuIHNyY1BheW1lbnRCYWxhbmNlO1xuIH0sXG53aXRoZHJhdyhhbW91bnQpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdHtwdXJzZX09dGhpcy5mYWNldHM7XG5cbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuY29uc3QgYmFsYW5jZVN0b3JlPW1ha2VBbW91bnRTdG9yZShzdGF0ZSwnY3VycmVudEJhbGFuY2UnKTtcbi8vXG5jb25zdCBwYXltZW50PXdpdGhkcmF3SW50ZXJuYWwoXG5iYWxhbmNlU3RvcmUsXG5hbW91bnQsXG5vcHRSZWNvdmVyeVNldCk7XG5cbnVwZGF0ZUJhbGFuY2UocHVyc2UsYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpKTtcbnJldHVybiBwYXltZW50O1xuIH0sXG5nZXRDdXJyZW50QW1vdW50KCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG5yZXR1cm4gYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpO1xuIH0sXG5nZXRDdXJyZW50QW1vdW50Tm90aWZpZXIoKXtcbnJldHVybiBwcm92aWRlTm90aWZpZXIodGhpcy5mYWNldHMucHVyc2UpO1xuIH0sXG5nZXRBbGxlZ2VkQnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9LFxuXG5nZXREZXBvc2l0RmFjZXQoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5kZXBvc2l0RmFjZXQ7XG4gfSxcblxuZ2V0UmVjb3ZlcnlTZXQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3Qgb3B0UmVjb3ZlcnlTZXQ9bWF5YmVSZWNvdmVyeVNldChzdGF0ZSk7XG5pZihvcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gRU1QVFlfQ09QWV9TRVQ7XG4gfVxucmV0dXJuIG9wdFJlY292ZXJ5U2V0LnNuYXBzaG90KCk7XG4gfSxcbnJlY292ZXJBbGwoKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcbmxldCBhbW91bnQ9QW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuaWYob3B0UmVjb3ZlcnlTZXQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGFtb3VudDsvL1xuIH1cbmZvcihjb25zdCBwYXltZW50IG9mIG9wdFJlY292ZXJ5U2V0LmtleXMoKSl7XG4vL1xuLy9cbmNvbnN0IGRlbHRhPWZhY2V0cy5wdXJzZS5kZXBvc2l0KHBheW1lbnQpO1xuYW1vdW50PUFtb3VudE1hdGguYWRkKGFtb3VudCxkZWx0YSxicmFuZCk7XG4gfVxub3B0UmVjb3ZlcnlTZXQuZ2V0U2l6ZSgpPT09MHx8XG5GYWlsIGBpbnRlcm5hbDogUmVtYWluaW5nIHVucmVjb3ZlcmVkIHBheW1lbnRzOiAke2ZhY2V0cy5wdXJzZS5nZXRSZWNvdmVyeVNldCgpfWA7XG5yZXR1cm4gYW1vdW50O1xuIH19LFxuXG5kZXBvc2l0RmFjZXQ6e1xucmVjZWl2ZSguLi5hcmdzKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdXJzZS5kZXBvc2l0KC4uLmFyZ3MpO1xuIH19fSxcblxuXG57XG5zdGF0ZVNoYXBlOntcbmN1cnJlbnRCYWxhbmNlOmFtb3VudFNoYXBlLFxucmVjb3ZlcnlTZXQ6TS5yZW1vdGFibGUoJ3JlY292ZXJ5U2V0Jyl9fSk7XG5cblxuXG5yZXR1cm4oKT0+bWFrZVB1cnNlS2l0KCkucHVyc2U7XG4gfTskaM2PX29uY2UucHJlcGFyZVB1cnNlS2luZChwcmVwYXJlUHVyc2VLaW5kKTtcbmhhcmRlbihwcmVwYXJlUHVyc2VLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQdXJzZUtpbmQiOlsicHJlcGFyZVB1cnNlS2luZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACKmWPI1gUAANYFAAAtAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3RyYW5zaWVudE5vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy9ub3RpZmllciJdLCJleHBvcnRzIjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLHByb3ZpZGVMYXp5LG1ha2VOb3RpZmllcktpdDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaM2PX2EgPT4gKHByb3ZpZGVMYXp5ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLy9cbi8vXG5jb25zdCAgICAgICAgbWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0cmFuc2llbnROb3RpZmVyS2l0cz1tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKFxuJ3RyYW5zaWVudE5vdGlmZXJLaXRzJyk7XG5cblxuY29uc3QgcHJvdmlkZU5vdGlmaWVyS2l0PShrZXkpPT5cbnByb3ZpZGVMYXp5KHRyYW5zaWVudE5vdGlmZXJLaXRzLGtleSwoKT0+XG5tYWtlTm90aWZpZXJLaXQoa2V5LmdldEN1cnJlbnRBbW91bnQoKSkpO1xuXG5cbmNvbnN0IHByb3ZpZGVOb3RpZmllcj0oa2V5KT0+cHJvdmlkZU5vdGlmaWVyS2l0KGtleSkubm90aWZpZXI7XG5jb25zdCB1cGRhdGU9KGtleSxuZXdWYWx1ZSk9PntcbmlmKHRyYW5zaWVudE5vdGlmZXJLaXRzLmhhcyhrZXkpKXtcbmNvbnN0e3VwZGF0ZXJ9PXRyYW5zaWVudE5vdGlmZXJLaXRzLmdldChrZXkpO1xudXBkYXRlci51cGRhdGVTdGF0ZShuZXdWYWx1ZSk7XG4gfVxuIH07XG5cbnJldHVybntwcm92aWRlTm90aWZpZXIsdXBkYXRlfTtcbiB9OyRozY9fb25jZS5tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KTtcbmhhcmRlbihtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0IjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACG0Xl12RgAANkYAAAmAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJBbW91bnRQYXR0ZXJuU2hhcGUiLCJBbW91bnRTaGFwZSIsIkFzc2V0S2luZFNoYXBlIiwiQnJhbmRJIiwiQnJhbmRTaGFwZSIsIkRlcG9zaXRGYWNldFNoYXBlIiwiRGlzcGxheUluZm9TaGFwZSIsIklzc3VlcktpdFNoYXBlIiwiSXNzdWVyU2hhcGUiLCJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiLCJNaW50U2hhcGUiLCJOb3RpZmllclNoYXBlIiwiUGF5bWVudFNoYXBlIiwiUHVyc2VTaGFwZSIsIlJhdGlvU2hhcGUiLCJpc0NvcHlCYWdWYWx1ZSIsImlzQ29weVNldFZhbHVlIiwiaXNOYXRWYWx1ZSIsImlzU2V0VmFsdWUiLCJtYWtlSXNzdWVySW50ZXJmYWNlcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNLG1hdGNoZXMsZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgICAgICAgIEJyYW5kU2hhcGU9TS5yZW1vdGFibGUoJ0JyYW5kJyk7JGjNj19vbmNlLkJyYW5kU2hhcGUoQnJhbmRTaGFwZSk7XG5jb25zdCAgICAgICAgSXNzdWVyU2hhcGU9TS5yZW1vdGFibGUoJ0lzc3VlcicpOyRozY9fb25jZS5Jc3N1ZXJTaGFwZShJc3N1ZXJTaGFwZSk7XG5jb25zdCAgICAgICAgUGF5bWVudFNoYXBlPU0ucmVtb3RhYmxlKCdQYXltZW50Jyk7JGjNj19vbmNlLlBheW1lbnRTaGFwZShQYXltZW50U2hhcGUpO1xuY29uc3QgICAgICAgIFB1cnNlU2hhcGU9TS5yZW1vdGFibGUoJ1B1cnNlJyk7JGjNj19vbmNlLlB1cnNlU2hhcGUoUHVyc2VTaGFwZSk7XG5jb25zdCAgICAgICAgRGVwb3NpdEZhY2V0U2hhcGU9TS5yZW1vdGFibGUoJ0RlcG9zaXRGYWNldCcpOyRozY9fb25jZS5EZXBvc2l0RmFjZXRTaGFwZShEZXBvc2l0RmFjZXRTaGFwZSk7XG5jb25zdCAgICAgICAgTm90aWZpZXJTaGFwZT1NLnJlbW90YWJsZSgnTm90aWZpZXInKTskaM2PX29uY2UuTm90aWZpZXJTaGFwZShOb3RpZmllclNoYXBlKTtcbmNvbnN0ICAgICAgICBNaW50U2hhcGU9TS5yZW1vdGFibGUoJ01pbnQnKTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLk1pbnRTaGFwZShNaW50U2hhcGUpO1xuY29uc3QgTmF0VmFsdWVTaGFwZT1NLm5hdCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgQ29weVNldFZhbHVlU2hhcGU9TS5zZXQoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IFNldFZhbHVlU2hhcGU9TS5hcnJheU9mKE0ua2V5KCkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBDb3B5QmFnVmFsdWVTaGFwZT1NLmJhZygpO1xuXG5jb25zdCBBbW91bnRWYWx1ZVNoYXBlPU0ub3IoXG5OYXRWYWx1ZVNoYXBlLFxuQ29weVNldFZhbHVlU2hhcGUsXG5TZXRWYWx1ZVNoYXBlLFxuQ29weUJhZ1ZhbHVlU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBBbW91bnRTaGFwZT1oYXJkZW4oe1xuYnJhbmQ6QnJhbmRTaGFwZSxcbnZhbHVlOkFtb3VudFZhbHVlU2hhcGV9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLkFtb3VudFNoYXBlKEFtb3VudFNoYXBlKTtcbmNvbnN0ICAgICAgICBBbW91bnRQYXR0ZXJuU2hhcGU9TS5wYXR0ZXJuKCk7JGjNj19vbmNlLkFtb3VudFBhdHRlcm5TaGFwZShBbW91bnRQYXR0ZXJuU2hhcGUpO1xuXG5jb25zdCAgICAgICAgUmF0aW9TaGFwZT1oYXJkZW4oe1xubnVtZXJhdG9yOkFtb3VudFNoYXBlLFxuZGVub21pbmF0b3I6QW1vdW50U2hhcGV9KTtcblxuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuUmF0aW9TaGFwZShSYXRpb1NoYXBlKTtcbmNvbnN0ICAgICAgICBpc05hdFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsTmF0VmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzTmF0VmFsdWUoaXNOYXRWYWx1ZSk7XG5oYXJkZW4oaXNOYXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsQ29weVNldFZhbHVlU2hhcGUpOyRozY9fb25jZS5pc0NvcHlTZXRWYWx1ZShpc0NvcHlTZXRWYWx1ZSk7XG5oYXJkZW4oaXNDb3B5U2V0VmFsdWUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1NldFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsU2V0VmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzU2V0VmFsdWUoaXNTZXRWYWx1ZSk7XG5oYXJkZW4oaXNTZXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weUJhZ1ZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsQ29weUJhZ1ZhbHVlU2hhcGUpOyRozY9fb25jZS5pc0NvcHlCYWdWYWx1ZShpc0NvcHlCYWdWYWx1ZSk7XG5oYXJkZW4oaXNDb3B5QmFnVmFsdWUpO1xuXG4vL1xuY29uc3QgICAgICAgIE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUz0xMDA7JGjNj19vbmNlLk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyhNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpO1xuXG5jb25zdCAgICAgICAgQXNzZXRLaW5kU2hhcGU9TS5vcignbmF0Jywnc2V0JywnY29weVNldCcsJ2NvcHlCYWcnKTskaM2PX29uY2UuQXNzZXRLaW5kU2hhcGUoQXNzZXRLaW5kU2hhcGUpO1xuXG5jb25zdCAgICAgICAgRGlzcGxheUluZm9TaGFwZT1NLnNwbGl0UmVjb3JkKFxue30sXG57XG5kZWNpbWFsUGxhY2VzOk0uYW5kKFxuTS5ndGUoLU1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyksXG5NLmx0ZShNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpKSxcblxuYXNzZXRLaW5kOkFzc2V0S2luZFNoYXBlfSxcblxue1xuLy9cbi8vXG59KTskaM2PX29uY2UuRGlzcGxheUluZm9TaGFwZShEaXNwbGF5SW5mb1NoYXBlKTtcblxuXG5jb25zdCAgICAgICAgSXNzdWVyS2l0U2hhcGU9aGFyZGVuKHtcbmJyYW5kOkJyYW5kU2hhcGUsXG5taW50Ok1pbnRTaGFwZSxcbm1pbnRSZWNvdmVyeVB1cnNlOlB1cnNlU2hhcGUsXG5pc3N1ZXI6SXNzdWVyU2hhcGUsXG5kaXNwbGF5SW5mbzpEaXNwbGF5SW5mb1NoYXBlfSk7XG5cblxuLy9cbiRozY9fb25jZS5Jc3N1ZXJLaXRTaGFwZShJc3N1ZXJLaXRTaGFwZSk7XG5jb25zdCAgICAgICAgQnJhbmRJPU0uaW50ZXJmYWNlKCdCcmFuZCcse1xuaXNNeUlzc3VlcjpNLmNhbGxXaGVuKE0uYXdhaXQoSXNzdWVyU2hhcGUpKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmdldEFsbGVnZWROYW1lOk0uY2FsbCgpLnJldHVybnMoTS5zdHJpbmcoKSksXG5nZXREaXNwbGF5SW5mbzpNLmNhbGwoKS5yZXR1cm5zKERpc3BsYXlJbmZvU2hhcGUpLFxuZ2V0QW1vdW50U2hhcGU6TS5jYWxsKCkucmV0dXJucyhNLnBhdHRlcm4oKSl9KTtcblxuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLkJyYW5kSShCcmFuZEkpO1xuY29uc3QgICAgICAgIG1ha2VJc3N1ZXJJbnRlcmZhY2VzPShcbmJyYW5kU2hhcGU9QnJhbmRTaGFwZSxcbmFzc2V0S2luZFNoYXBlPUFzc2V0S2luZFNoYXBlLFxuYW1vdW50U2hhcGU9QW1vdW50U2hhcGUpPT5cbntcbmNvbnN0IElzc3Vlckk9TS5pbnRlcmZhY2UoJ0lzc3Vlcicse1xuZ2V0QnJhbmQ6TS5jYWxsKCkucmV0dXJucyhicmFuZFNoYXBlKSxcbmdldEFsbGVnZWROYW1lOk0uY2FsbCgpLnJldHVybnMoTS5zdHJpbmcoKSksXG5nZXRBc3NldEtpbmQ6TS5jYWxsKCkucmV0dXJucyhhc3NldEtpbmRTaGFwZSksXG5nZXREaXNwbGF5SW5mbzpNLmNhbGwoKS5yZXR1cm5zKERpc3BsYXlJbmZvU2hhcGUpLFxubWFrZUVtcHR5UHVyc2U6TS5jYWxsKCkucmV0dXJucyhQdXJzZVNoYXBlKSxcblxuaXNMaXZlOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmdldEFtb3VudE9mOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmJ1cm46TS5jYWxsV2hlbihNLmF3YWl0KFBheW1lbnRTaGFwZSkpLlxub3B0aW9uYWwoQW1vdW50UGF0dGVyblNoYXBlKS5cbnJldHVybnMoYW1vdW50U2hhcGUpfSk7XG5cblxuY29uc3QgTWludEk9TS5pbnRlcmZhY2UoJ01pbnQnLHtcbmdldElzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclNoYXBlKSxcbm1pbnRQYXltZW50Ok0uY2FsbChhbW91bnRTaGFwZSkucmV0dXJucyhQYXltZW50U2hhcGUpfSk7XG5cblxuY29uc3QgUGF5bWVudEk9TS5pbnRlcmZhY2UoJ1BheW1lbnQnLHtcbmdldEFsbGVnZWRCcmFuZDpNLmNhbGwoKS5yZXR1cm5zKGJyYW5kU2hhcGUpfSk7XG5cblxuY29uc3QgUHVyc2VJPU0uaW50ZXJmYWNlKCdQdXJzZScse1xuZ2V0QWxsZWdlZEJyYW5kOk0uY2FsbCgpLnJldHVybnMoYnJhbmRTaGFwZSksXG5nZXRDdXJyZW50QW1vdW50Ok0uY2FsbCgpLnJldHVybnMoYW1vdW50U2hhcGUpLFxuZ2V0Q3VycmVudEFtb3VudE5vdGlmaWVyOk0uY2FsbCgpLnJldHVybnMoTm90aWZpZXJTaGFwZSksXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuZGVwb3NpdDpNLmNhbGwoUGF5bWVudFNoYXBlKS5cbm9wdGlvbmFsKEFtb3VudFBhdHRlcm5TaGFwZSkuXG5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmdldERlcG9zaXRGYWNldDpNLmNhbGwoKS5yZXR1cm5zKERlcG9zaXRGYWNldFNoYXBlKSxcbndpdGhkcmF3Ok0uY2FsbChhbW91bnRTaGFwZSkucmV0dXJucyhQYXltZW50U2hhcGUpLFxuZ2V0UmVjb3ZlcnlTZXQ6TS5jYWxsKCkucmV0dXJucyhNLnNldE9mKFBheW1lbnRTaGFwZSkpLFxucmVjb3ZlckFsbDpNLmNhbGwoKS5yZXR1cm5zKGFtb3VudFNoYXBlKX0pO1xuXG5cbmNvbnN0IERlcG9zaXRGYWNldEk9TS5pbnRlcmZhY2UoJ0RlcG9zaXRGYWNldCcse1xucmVjZWl2ZTpnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoUHVyc2VJKS5tZXRob2RHdWFyZHMuZGVwb3NpdH0pO1xuXG5cbmNvbnN0IFB1cnNlSUtpdD1oYXJkZW4oe1xucHVyc2U6UHVyc2VJLFxuZGVwb3NpdEZhY2V0OkRlcG9zaXRGYWNldEl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbklzc3VlckksXG5NaW50SSxcblBheW1lbnRJLFxuUHVyc2VJS2l0fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlSXNzdWVySW50ZXJmYWNlcyhtYWtlSXNzdWVySW50ZXJmYWNlcyk7XG5oYXJkZW4obWFrZUlzc3VlckludGVyZmFjZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQnJhbmRTaGFwZSI6WyJCcmFuZFNoYXBlIl0sIklzc3VlclNoYXBlIjpbIklzc3VlclNoYXBlIl0sIlBheW1lbnRTaGFwZSI6WyJQYXltZW50U2hhcGUiXSwiUHVyc2VTaGFwZSI6WyJQdXJzZVNoYXBlIl0sIkRlcG9zaXRGYWNldFNoYXBlIjpbIkRlcG9zaXRGYWNldFNoYXBlIl0sIk5vdGlmaWVyU2hhcGUiOlsiTm90aWZpZXJTaGFwZSJdLCJNaW50U2hhcGUiOlsiTWludFNoYXBlIl0sIkFtb3VudFNoYXBlIjpbIkFtb3VudFNoYXBlIl0sIkFtb3VudFBhdHRlcm5TaGFwZSI6WyJBbW91bnRQYXR0ZXJuU2hhcGUiXSwiUmF0aW9TaGFwZSI6WyJSYXRpb1NoYXBlIl0sImlzTmF0VmFsdWUiOlsiaXNOYXRWYWx1ZSJdLCJpc0NvcHlTZXRWYWx1ZSI6WyJpc0NvcHlTZXRWYWx1ZSJdLCJpc1NldFZhbHVlIjpbImlzU2V0VmFsdWUiXSwiaXNDb3B5QmFnVmFsdWUiOlsiaXNDb3B5QmFnVmFsdWUiXSwiTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTIjpbIk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyJdLCJBc3NldEtpbmRTaGFwZSI6WyJBc3NldEtpbmRTaGFwZSJdLCJEaXNwbGF5SW5mb1NoYXBlIjpbIkRpc3BsYXlJbmZvU2hhcGUiXSwiSXNzdWVyS2l0U2hhcGUiOlsiSXNzdWVyS2l0U2hhcGUiXSwiQnJhbmRJIjpbIkJyYW5kSSJdLCJtYWtlSXNzdWVySW50ZXJmYWNlcyI6WyJtYWtlSXNzdWVySW50ZXJmYWNlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAnAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVzLWluZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABW0VcR6RkAAOkZAAAnAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2NhbGxiYWNrLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbImNhbGxFIiwiY2FsbFN5bmMiLCJpc0NhbGxiYWNrIiwibWFrZUZ1bmN0aW9uQ2FsbGJhY2siLCJtYWtlTWV0aG9kQ2FsbGJhY2siLCJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siLCJtYWtlU3luY01ldGhvZENhbGxiYWNrIiwicHJlcGFyZUF0dGVudWF0b3IiLCJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlRXJyb3IscSxFLGlzT2JqZWN0LGlzUGFzc2FibGVTeW1ib2wsZ2V0SW50ZXJmYWNlTWV0aG9kS2V5czskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJpc1Bhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGlzUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5c1wiLCBbJGjNj19hID0+IChnZXRJbnRlcmZhY2VNZXRob2RLZXlzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5cbmNvbnN0e293bktleXM6cmF3T3duS2V5c309UmVmbGVjdDtcbmNvbnN0IG93bktleXM9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmF3T3duS2V5cztcblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXNQcm9wZXJ0eUtleT0oa2V5KT0+e1xuc3dpdGNoKHR5cGVvZiBrZXkpe1xuY2FzZSdzdHJpbmcnOlxuY2FzZSdudW1iZXInOlxuY2FzZSdzeW1ib2wnOlxucmV0dXJuIHRydWU7XG5kZWZhdWx0OlxucmV0dXJuIGZhbHNlO31cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjYWxsU3luYz0oY2FsbGJhY2ssLi4uYXJncyk9PntcbmNvbnN0e3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfT1jYWxsYmFjaztcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIHRhcmdldCguLi5ib3VuZCwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gdGFyZ2V0W21ldGhvZE5hbWVdKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH07JGjNj19vbmNlLmNhbGxTeW5jKGNhbGxTeW5jKTtcbmhhcmRlbihjYWxsU3luYyk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjYWxsRT0oY2FsbGJhY2ssLi4uYXJncyk9PntcbmNvbnN0e3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfT1jYWxsYmFjaztcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIEUodGFyZ2V0KSguLi5ib3VuZCwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gRSh0YXJnZXQpW21ldGhvZE5hbWVdKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH07JGjNj19vbmNlLmNhbGxFKGNhbGxFKTtcbmhhcmRlbihjYWxsRSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrPSh0YXJnZXQsLi4uYm91bmQpPT57XG50eXBlb2YgdGFyZ2V0PT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBzeW5jIGZ1bmN0aW9uIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGEgZnVuY3Rpb246ICR7dGFyZ2V0fWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxib3VuZCxpc1N5bmM6dHJ1ZX0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaM2PX29uY2UubWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKG1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayk7XG5oYXJkZW4obWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRnVuY3Rpb25DYWxsYmFjaz0odGFyZ2V0LC4uLmJvdW5kKT0+e1xuaXNPYmplY3QodGFyZ2V0KXx8XG5GYWlsIGBmdW5jdGlvbiBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhIGZ1bmN0aW9uIHByZXNlbmNlOiAke3RhcmdldH1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsYm91bmR9KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaM2PX29uY2UubWFrZUZ1bmN0aW9uQ2FsbGJhY2sobWFrZUZ1bmN0aW9uQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VGdW5jdGlvbkNhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2s9KHRhcmdldCxtZXRob2ROYW1lLC4uLmJvdW5kKT0+e1xuaXNPYmplY3QodGFyZ2V0KXx8XG5GYWlsIGBzeW5jIG1ldGhvZCBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3Q6ICR7dGFyZ2V0fWA7XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSl8fFxuRmFpbCBgbWV0aG9kIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBwYXNzYWJsZSBzeW1ib2w6ICR7bWV0aG9kTmFtZX1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZCxpc1N5bmM6dHJ1ZX0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaM2PX29uY2UubWFrZVN5bmNNZXRob2RDYWxsYmFjayhtYWtlU3luY01ldGhvZENhbGxiYWNrKTtcbmhhcmRlbihtYWtlU3luY01ldGhvZENhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNZXRob2RDYWxsYmFjaz0odGFyZ2V0LG1ldGhvZE5hbWUsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxGYWlsIGBtZXRob2QgY2FsbGJhY2sgdGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0OiAke3RhcmdldH1gO1xudHlwZW9mIG1ldGhvZE5hbWU9PT0nc3RyaW5nJ3x8XG5pc1Bhc3NhYmxlU3ltYm9sKG1ldGhvZE5hbWUpfHxcbkZhaWwgYG1ldGhvZCBuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgcGFzc2FibGUgc3ltYm9sOiAke21ldGhvZE5hbWV9YDtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNiPWhhcmRlbih7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaM2PX29uY2UubWFrZU1ldGhvZENhbGxiYWNrKG1ha2VNZXRob2RDYWxsYmFjayk7XG5oYXJkZW4obWFrZU1ldGhvZENhbGxiYWNrKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NhbGxiYWNrPShjYWxsYmFjayk9PntcbmlmKCFpc09iamVjdChjYWxsYmFjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0e3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfT1jYWxsYmFjaztcbnJldHVybihcbmlzT2JqZWN0KHRhcmdldCkmJihcbm1ldGhvZE5hbWU9PT11bmRlZmluZWR8fFxudHlwZW9mIG1ldGhvZE5hbWU9PT0nc3RyaW5nJ3x8XG5pc1Bhc3NhYmxlU3ltYm9sKG1ldGhvZE5hbWUpKSYmXG5BcnJheS5pc0FycmF5KGJvdW5kKSk7XG5cbiB9OyRozY9fb25jZS5pc0NhbGxiYWNrKGlzQ2FsbGJhY2spO1xuaGFyZGVuKGlzQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUF0dGVudWF0b3I9KFxuem9uZSxcbm1ldGhvZE5hbWVzLFxue2ludGVyZmFjZUd1YXJkLHRhZz0nQXR0ZW51YXRvcid9PXt9KT0+XG57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtZXRob2RzPS8qICAgICAgICAgICAgICAgICAgKi9cbmZyb21FbnRyaWVzKFxubWV0aG9kTmFtZXMubWFwKChrZXkpPT57XG4vL1xuaWYoIWlzUHJvcGVydHlLZXkoa2V5KSl7XG50aHJvdyBGYWlsIGBrZXkgJHtxKGtleSl9IGlzIG5vdCBhIFByb3BlcnR5S2V5YDtcbiB9XG5cbmNvbnN0IG09LyogICAgICAgICAgICAgICAgICAqL3tcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICovXG5ba2V5XSguLi5hcmdzKXtcbi8vXG5jb25zdCBjYj10aGlzLnN0YXRlLmNic1trZXldO1xuaWYoIWNiKXtcbmNvbnN0IGVycj1tYWtlRXJyb3IoIGB1bmltcGxlbWVudGVkICR7cSh0YWcpfSBtZXRob2QgJHtxKGtleSl9YCk7XG5pZih0aGlzLnN0YXRlLmlzU3luYyl7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gfVxuaWYoY2IuaXNTeW5jKXtcbnJldHVybiBjYWxsU3luYyhjYiwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gY2FsbEUoY2IsLi4uYXJncyk7XG4gfX1bXG5rZXldO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAqL1trZXksbV0pO1xuIH0pKTtcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VBdHRlbnVhdG9yPXpvbmUuZXhvQ2xhc3MoXG50YWcsXG5pbnRlcmZhY2VHdWFyZCxcbi8qXG5cblxuXG5cbiAgICAgKi9cbih7XG50YXJnZXQ9bnVsbCxcbmlzU3luYz1mYWxzZSxcbm92ZXJyaWRlcz0vKiAgICAgICAgICAgICAgICAgICAgKi97fX0pPT5cbntcbmNvbnN0IGNicz0vKiAgICAgICAgICAgICAgICAgICAgKi97fTtcblxuY29uc3QgcmVtYWluaW5nPW5ldyBTZXQobWV0aG9kTmFtZXMpO1xuZm9yKGNvbnN0IGtleSBvZiBvd25LZXlzKG92ZXJyaWRlcykpe1xucmVtYWluaW5nLmhhcyhrZXkpfHxcbkZhaWwgYCR7cSh0YWcpfSBvdmVycmlkZXNbJHtxKGtleSl9XSBub3QgYWxsb3dlZCBieSBtZXRob2ROYW1lc2A7XG5cbnJlbWFpbmluZy5kZWxldGUoa2V5KTtcbmNvbnN0IGNiPW92ZXJyaWRlc1trZXldO1xuY2I9PW51bGx8fFxuaXNDYWxsYmFjayhjYil8fFxuRmFpbCBgJHtxKHRhZyl9IG92ZXJyaWRlc1ske3Eoa2V5KX1dIGlzIG5vdCBhIGNhbGxiYWNrOyBnb3QgJHtjYn1gO1xuY2JzW2tleV09Y2I7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiByZW1haW5pbmcpe1xuaWYoaXNTeW5jKXtcbmNic1trZXldPW1ha2VTeW5jTWV0aG9kQ2FsbGJhY2sodGFyZ2V0LGtleSk7XG4gfWVsc2V7XG5jYnNba2V5XT1tYWtlTWV0aG9kQ2FsbGJhY2sodGFyZ2V0LGtleSk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2Nicyxpc1N5bmN9KTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAqL21ldGhvZHMpO1xuXG5yZXR1cm4gbWFrZUF0dGVudWF0b3I7XG4gfTskaM2PX29uY2UucHJlcGFyZUF0dGVudWF0b3IocHJlcGFyZUF0dGVudWF0b3IpO1xuaGFyZGVuKHByZXBhcmVBdHRlbnVhdG9yKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yPSh6b25lLGludGVyZmFjZUd1YXJkLG9wdHM9e30pPT57XG5jb25zdCBtZXRob2ROYW1lcz1nZXRJbnRlcmZhY2VNZXRob2RLZXlzKGludGVyZmFjZUd1YXJkKTtcbmNvbnN0IG1ha2VBdHRlbnVhdG9yPXByZXBhcmVBdHRlbnVhdG9yKHpvbmUsbWV0aG9kTmFtZXMse1xuLi4ub3B0cyxcbmludGVyZmFjZUd1YXJkfSk7XG5cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL21ha2VBdHRlbnVhdG9yKTtcbiB9OyRozY9fb25jZS5wcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IocHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yKTtcbmhhcmRlbihwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY2FsbFN5bmMiOlsiY2FsbFN5bmMiXSwiY2FsbEUiOlsiY2FsbEUiXSwibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIjpbIm1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayJdLCJtYWtlRnVuY3Rpb25DYWxsYmFjayI6WyJtYWtlRnVuY3Rpb25DYWxsYmFjayJdLCJtYWtlU3luY01ldGhvZENhbGxiYWNrIjpbIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siXSwibWFrZU1ldGhvZENhbGxiYWNrIjpbIm1ha2VNZXRob2RDYWxsYmFjayJdLCJpc0NhbGxiYWNrIjpbImlzQ2FsbGJhY2siXSwicHJlcGFyZUF0dGVudWF0b3IiOlsicHJlcGFyZUF0dGVudWF0b3IiXSwicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIjpbInByZXBhcmVHdWFyZGVkQXR0ZW51YXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAyA/0ZzQUAAM0FAAAlAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2NvbmZpZy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiQnJpZGdlSWQiLCJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCIsIlZCYW5rQWNjb3VudCIsIldhbGxldE5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBCcmlkZ2VJZD0vKiAgICAgICAgICAgICAgICAqL3tcbkJBTks6J2JhbmsnLFxuQ09SRTonY29yZScsXG5ESUJDOidkaWJjJyxcblNUT1JBR0U6J3N0b3JhZ2UnLFxuUFJPVklTSU9OOidwcm92aXNpb24nLFxuUFJPVklTSU9OX1NNQVJUX1dBTExFVDoncHJvdmlzaW9uV2FsbGV0JyxcblZMT0NBTENIQUlOOid2bG9jYWxjaGFpbicsXG5WVFJBTlNGRVI6J3Z0cmFuc2ZlcicsXG5XQUxMRVQ6J3dhbGxldCd9OyRozY9fb25jZS5CcmlkZ2VJZChCcmlkZ2VJZCk7XG5cbmhhcmRlbihCcmlkZ2VJZCk7XG5cbmNvbnN0ICAgICAgICBDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZD17XG52YmFua1BvcnQ6QnJpZGdlSWQuQkFOSyxcbnZpYmNQb3J0OkJyaWRnZUlkLkRJQkN9OyRozY9fb25jZS5Db3Ntb3NJbml0S2V5VG9CcmlkZ2VJZChDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCk7XG5cblxuY29uc3QgICAgICAgIFdhbGxldE5hbWU9LyogICAgICAgICAgICAgICAgKi97XG5kZXBvc2l0RmFjZXQ6J2RlcG9zaXRGYWNldCd9OyRozY9fb25jZS5XYWxsZXROYW1lKFdhbGxldE5hbWUpO1xuXG5oYXJkZW4oV2FsbGV0TmFtZSk7XG5cbi8vXG5jb25zdCAgICAgICAgVkJhbmtBY2NvdW50PS8qICAgICAgICAgICAgICAgICove1xucmVzZXJ2ZTp7XG5tb2R1bGU6J3ZiYW5rL3Jlc2VydmUnLFxuYWRkcmVzczonYWdvcmljMWFlMGxtdHpsZ3JjbmxhOXhqa3BhYXJxNWQ1ZGZlejYzaDNudWNsJ30sXG5cbnByb3Zpc2lvbjp7XG5tb2R1bGU6J3ZiYW5rL3Byb3Zpc2lvbicsXG5hZGRyZXNzOidhZ29yaWMxbWVnenl0ZzY1Y3lyZ3pzNmZ2enhncmNxdnd3bDd1Z3B0NjIzNDYnfX07JGjNj19vbmNlLlZCYW5rQWNjb3VudChWQmFua0FjY291bnQpO1xuXG5cbmhhcmRlbihWQmFua0FjY291bnQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQnJpZGdlSWQiOlsiQnJpZGdlSWQiXSwiQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQiOlsiQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQiXSwiV2FsbGV0TmFtZSI6WyJXYWxsZXROYW1lIl0sIlZCYW5rQWNjb3VudCI6WyJWQmFua0FjY291bnQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnKi0l0gEAABIBAAAJAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9kZWJ1Zy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVRyYWNlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxubGV0IGRlYnVnSW5zdGFuY2U9MTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVHJhY2VyPShuYW1lLGVuYWJsZT10cnVlKT0+e1xuZGVidWdJbnN0YW5jZSs9MTtcbmxldCBkZWJ1Z0NvdW50PTE7XG5jb25zdCBrZXk9IGAtLS0tLSAke25hbWV9LiR7ZGVidWdJbnN0YW5jZX0gYDtcbi8vXG5zd2l0Y2goZW5hYmxlKXtcbmNhc2UgZmFsc2U6e1xuY29uc3QgbG9nRGlzYWJsZWQ9KC4uLl9hcmdzKT0+eyB9O1xucmV0dXJuIGxvZ0Rpc2FibGVkO1xuIH1cbmNhc2UndmVyYm9zZSc6e1xuY29uc3QgaW5mb1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsLi4uYXJncyk7XG4gfWVsc2V7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsb3B0TG9nLC4uLmFyZ3MpO1xuIH1cbiB9O1xucmV0dXJuIGluZm9UaWNrO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgZGVidWdUaWNrPShvcHRMb2csLi4uYXJncyk9PntcbmlmKG9wdExvZy5sb2cpe1xub3B0TG9nLmxvZyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gZGVidWdUaWNrO1xuIH19XG5cbiB9OyRozY9fb25jZS5tYWtlVHJhY2VyKG1ha2VUcmFjZXIpO1xuaGFyZGVuKG1ha2VUcmFjZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYWNlciI6WyJtYWtlVHJhY2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAALV4MKOAgAAjgIAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZXJyb3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIk5vbk51bGxpc2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgTm9uTnVsbGlzaD0odmFsLG9wdERldGFpbHM9IGB1bmV4cGVjdGVkICR7cSh2YWwpfWApPT57XG5pZih2YWwhPW51bGwpe1xuLy9cbnJldHVybiB2YWw7XG4gfVxuYXNzZXJ0LmZhaWwob3B0RGV0YWlscyk7XG4gfTskaM2PX29uY2UuTm9uTnVsbGlzaChOb25OdWxsaXNoKTtcbmhhcmRlbihOb25OdWxsaXNoKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Ik5vbk51bGxpc2giOlsiTm9uTnVsbGlzaCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD2TPyhxwQAAMcEAAAkAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vY29uZmlnLmpzIiwiLi9kZWJ1Zy5qcyIsIi4vZXJyb3JzLmpzIiwiLi91dGlscy5qcyIsIi4vbWV0aG9kLXRvb2xzLmpzIiwiLi90eXBlQ2hlY2suanMiLCIuL3R5cGVHdWFyZHMuanMiLCIuL3R5cGVzLWluZGV4LmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIiwiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vY29uZmlnLmpzIiwiLi9kZWJ1Zy5qcyIsIi4vZXJyb3JzLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3R5cGVDaGVjay5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiLCIuL3V0aWxzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2NvbmZpZy5qc1wiLCBbXV0sW1wiLi9kZWJ1Zy5qc1wiLCBbXV0sW1wiLi9lcnJvcnMuanNcIiwgW11dLFtcIi4vdXRpbHMuanNcIiwgW11dLFtcIi4vbWV0aG9kLXRvb2xzLmpzXCIsIFtdXSxbXCIuL3R5cGVDaGVjay5qc1wiLCBbXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6W1sib2JqZWN0TWFwIiwib2JqZWN0TWFwIl1dLCJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjpbWyJvYmplY3RNZXRhTWFwIiwib2JqZWN0TWV0YU1hcCJdXSwiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOltbImZyb21VbmlxdWVFbnRyaWVzIiwiZnJvbVVuaXF1ZUVudHJpZXMiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACZtFKvTFQAA0xUAAC8AAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbGliLWNoYWluU3RvcmFnZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiLCIuL2NhbGxiYWNrLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q2FwRGF0YSIsImFzc2VydFBhdGhTZWdtZW50IiwiaXNTdHJlYW1DZWxsIiwibWFrZUNoYWluU3RvcmFnZVJvb3QiLCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIiwibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiLCJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEUsRmFyLE0sbWFrZUhlYXBab25lLGNiOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanNcIiwgW1tcIm1ha2VIZWFwWm9uZVwiLCBbJGjNj19hID0+IChtYWtlSGVhcFpvbmUgPSAkaM2PX2EpXV1dXSxbXCIuL2NhbGxiYWNrLmpzXCIsIFtbXCIqXCIsIFskaM2PX2EgPT4gKGNiID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZUNoYWluU3RvcmFnZVJvb3QsICduYW1lJywge3ZhbHVlOiBcIm1ha2VDaGFpblN0b3JhZ2VSb290XCJ9KTskaM2PX29uY2UubWFrZUNoYWluU3RvcmFnZVJvb3QobWFrZUNoYWluU3RvcmFnZVJvb3QpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlU3RvcmFnZU5vZGVDaGlsZCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVN0b3JhZ2VOb2RlQ2hpbGRcIn0pOyRozY9fb25jZS5tYWtlU3RvcmFnZU5vZGVDaGlsZChtYWtlU3RvcmFnZU5vZGVDaGlsZCk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgQ2hhaW5TdG9yYWdlTm9kZUk9TS5pbnRlcmZhY2UoJ1N0b3JhZ2VOb2RlJyx7XG5zZXRWYWx1ZTpNLmNhbGxXaGVuKE0uc3RyaW5nKCkpLnJldHVybnMoKSxcbmdldFBhdGg6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldFN0b3JlS2V5Ok0uY2FsbFdoZW4oKS5yZXR1cm5zKE0ucmVjb3JkKCkpLFxubWFrZUNoaWxkTm9kZTpNLmNhbGwoTS5zdHJpbmcoKSkuXG5vcHRpb25hbChNLnNwbGl0UmVjb3JkKHt9LHtzZXF1ZW5jZTpNLmJvb2xlYW4oKX0se30pKS5cbnJldHVybnMoTS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJykpfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzU3RyZWFtQ2VsbD0oY2VsbCk9PlxuY2VsbCYmXG50eXBlb2YgY2VsbD09PSdvYmplY3QnJiZcbkFycmF5LmlzQXJyYXkoY2VsbC52YWx1ZXMpJiZcbnR5cGVvZiBjZWxsLmJsb2NrSGVpZ2h0PT09J3N0cmluZycmJlxuL14wJHxeWzEtOV1bMC05XSokLy50ZXN0KGNlbGwuYmxvY2tIZWlnaHQpOyRozY9fb25jZS5pc1N0cmVhbUNlbGwoaXNTdHJlYW1DZWxsKTtcbmhhcmRlbihpc1N0cmVhbUNlbGwpO1xuXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q2FwRGF0YT0oZGF0YSk9PntcbmFzc2VydC50eXBlb2YoZGF0YSwnb2JqZWN0Jyk7XG5hc3NlcnQoZGF0YSk7XG5hc3NlcnQudHlwZW9mKGRhdGEuYm9keSwnc3RyaW5nJyk7XG5hc3NlcnQoQXJyYXkuaXNBcnJheShkYXRhLnNsb3RzKSk7XG4vL1xuIH07JGjNj19vbmNlLmFzc2VydENhcERhdGEoYXNzZXJ0Q2FwRGF0YSk7XG5oYXJkZW4oYXNzZXJ0Q2FwRGF0YSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBwYXRoU2VnbWVudFBhdHRlcm49L15bYS16QS1aMC05Xy1dezEsMTAwfSQvO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0UGF0aFNlZ21lbnQ9KG5hbWUpPT57XG5wYXRoU2VnbWVudFBhdHRlcm4udGVzdChuYW1lKXx8XG5GYWlsIGBQYXRoIHNlZ21lbnQgbmFtZXMgbXVzdCBjb25zaXN0IG9mIDEgdG8gMTAwIGNoYXJhY3RlcnMgbGltaXRlZCB0byBBU0NJSSBhbHBoYW51bWVyaWNzLCB1bmRlcnNjb3JlcywgYW5kL29yIGRhc2hlczogJHtuYW1lfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UGF0aFNlZ21lbnQoYXNzZXJ0UGF0aFNlZ21lbnQpO1xuaGFyZGVuKGFzc2VydFBhdGhTZWdtZW50KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUNoYWluU3RvcmFnZU5vZGU9KHpvbmUpPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlQ2hhaW5TdG9yYWdlTm9kZT16b25lLmV4b0NsYXNzKFxuJ0NoYWluU3RvcmFnZU5vZGUnLFxuQ2hhaW5TdG9yYWdlTm9kZUksXG4vKlxuXG5cblxuXG5cblxuICAgICAqL1xuKG1lc3NlbmdlcixwYXRoLHtzZXF1ZW5jZT1mYWxzZX09e30pPT57XG5hc3NlcnQudHlwZW9mKHBhdGgsJ3N0cmluZycpO1xuYXNzZXJ0LnR5cGVvZihzZXF1ZW5jZSwnYm9vbGVhbicpO1xucmV0dXJuIGhhcmRlbih7cGF0aCxtZXNzZW5nZXIsc2VxdWVuY2V9KTtcbiB9LFxue1xuZ2V0UGF0aCgpe1xucmV0dXJuIHRoaXMuc3RhdGUucGF0aDtcbiB9LFxuLypcblxuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGdldFN0b3JlS2V5KCl7XG5jb25zdHtwYXRoLG1lc3Nlbmdlcn09dGhpcy5zdGF0ZTtcbnJldHVybiBjYi5jYWxsRShtZXNzZW5nZXIse1xubWV0aG9kOidnZXRTdG9yZUtleScsXG5hcmdzOltwYXRoXX0pO1xuXG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xubWFrZUNoaWxkTm9kZShuYW1lLGNoaWxkTm9kZU9wdGlvbnM9e30pe1xuY29uc3R7c2VxdWVuY2UscGF0aCxtZXNzZW5nZXJ9PXRoaXMuc3RhdGU7XG5hc3NlcnRQYXRoU2VnbWVudChuYW1lKTtcbmNvbnN0IG1lcmdlZE9wdGlvbnM9e3NlcXVlbmNlLC4uLmNoaWxkTm9kZU9wdGlvbnN9O1xucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VOb2RlKFxubWVzc2VuZ2VyLFxuIGAke3BhdGh9LiR7bmFtZX1gLFxubWVyZ2VkT3B0aW9ucyk7XG5cbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHNldFZhbHVlKHZhbHVlKXtcbmNvbnN0e3NlcXVlbmNlLHBhdGgsbWVzc2VuZ2VyfT10aGlzLnN0YXRlO1xuYXNzZXJ0LnR5cGVvZih2YWx1ZSwnc3RyaW5nJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbnRyeTtcbmlmKCFzZXF1ZW5jZSYmIXZhbHVlKXtcbmVudHJ5PVtwYXRoXTtcbiB9ZWxzZXtcbmVudHJ5PVtwYXRoLHZhbHVlXTtcbiB9XG5hd2FpdCBjYi5jYWxsRShtZXNzZW5nZXIse1xubWV0aG9kOnNlcXVlbmNlPydhcHBlbmQnOidzZXQnLFxuYXJnczpbZW50cnldfSk7XG5cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xufSk7XG5cbnJldHVybiBtYWtlQ2hhaW5TdG9yYWdlTm9kZTtcbiB9OyRozY9fb25jZS5wcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZShwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSk7XG5cbmNvbnN0IG1ha2VIZWFwQ2hhaW5TdG9yYWdlTm9kZT1wcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZShtYWtlSGVhcFpvbmUoKSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZUNoYWluU3RvcmFnZVJvb3QoXG5oYW5kbGVTdG9yYWdlTWVzc2FnZSxcbnJvb3RQYXRoLFxucm9vdE9wdGlvbnM9e30pXG57XG5jb25zdCBtZXNzZW5nZXI9Y2IubWFrZUZ1bmN0aW9uQ2FsbGJhY2soaGFuZGxlU3RvcmFnZU1lc3NhZ2UpO1xuXG4vL1xuY29uc3Qgcm9vdE5vZGU9bWFrZUhlYXBDaGFpblN0b3JhZ2VOb2RlKG1lc3Nlbmdlcixyb290UGF0aCxyb290T3B0aW9ucyk7XG5yZXR1cm4gcm9vdE5vZGU7XG4gfVxuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFrZU51bGxTdG9yYWdlTm9kZT0oKT0+e1xuLy9cbnJldHVybiBtYWtlQ2hhaW5TdG9yYWdlUm9vdChcbkZhcignTnVsbE1lc3NlbmdlcicsKCk9Pm51bGwpLFxuJ251bGwnKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gICAgICAgIG1ha2VTdG9yYWdlTm9kZUNoaWxkKHN0b3JhZ2VOb2RlUmVmLGNoaWxkTmFtZSl7XG5jb25zdCBleGlzdGluZ1N0b3JhZ2VOb2RlPWF3YWl0IHN0b3JhZ2VOb2RlUmVmO1xuY29uc3Qgc3RvcmFnZU5vZGU9ZXhpc3RpbmdTdG9yYWdlTm9kZXx8bWFrZU51bGxTdG9yYWdlTm9kZSgpO1xucmV0dXJuIEUoc3RvcmFnZU5vZGUpLm1ha2VDaGlsZE5vZGUoY2hpbGROYW1lKTtcbiB9XG5oYXJkZW4obWFrZVN0b3JhZ2VOb2RlQ2hpbGQpO1xuXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXJpYWxpemVUb1N0b3JhZ2U9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5yZXR1cm4gYXN5bmModmFsdWUpPT57XG5jb25zdCBtYXJzaGFsbGVkPWF3YWl0IEUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbmNvbnN0IHNlcmlhbGl6ZWQ9SlNPTi5zdHJpbmdpZnkobWFyc2hhbGxlZCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoc2VyaWFsaXplZCk7XG4gfTtcbiB9OyRozY9fb25jZS5tYWtlU2VyaWFsaXplVG9TdG9yYWdlKG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNTdHJlYW1DZWxsIjpbImlzU3RyZWFtQ2VsbCJdLCJhc3NlcnRDYXBEYXRhIjpbImFzc2VydENhcERhdGEiXSwiYXNzZXJ0UGF0aFNlZ21lbnQiOlsiYXNzZXJ0UGF0aFNlZ21lbnQiXSwicHJlcGFyZUNoYWluU3RvcmFnZU5vZGUiOlsicHJlcGFyZUNoYWluU3RvcmFnZU5vZGUiXSwibWFrZUNoYWluU3RvcmFnZVJvb3QiOlsibWFrZUNoYWluU3RvcmFnZVJvb3QiXSwibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiOlsibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiXSwibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSI6WyJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALa9IV5rCAAAawgAACsAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbWV0aG9kLXRvb2xzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiXSwiZXhwb3J0cyI6WyJiaW5kQWxsTWV0aG9kcyIsImdldE1ldGhvZE5hbWVzIiwiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNPYmplY3Q7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7Z2V0UHJvdG90eXBlT2YsY3JlYXRlLGZyb21FbnRyaWVzLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuY29uc3R7b3duS2V5cyxhcHBseX09UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmNvbnN0IG93bk5hbWVzPS8qICAgICAgICAgICAgICAqL293bktleXMoZGVzY3MpO1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duTmFtZXMpe1xuLy9cbi8vXG5pZih0eXBlb2YgdmFsW25hbWVdPT09J2Z1bmN0aW9uJyl7XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxuIH1cbmlmKCFpc09iamVjdCh2YWwpKXtcbmJyZWFrO1xuIH1cbmxheWVyPWdldFByb3RvdHlwZU9mKGxheWVyKTtcbiB9XG5yZXR1cm4gaGFyZGVuKFsuLi5uYW1lc10uc29ydChjb21wYXJlU3RyaW5naWZpZWQpKTtcbiB9OyRozY9fb25jZS5nZXRNZXRob2ROYW1lcyhnZXRNZXRob2ROYW1lcyk7XG5oYXJkZW4oZ2V0TWV0aG9kTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldFN0cmluZ01ldGhvZE5hbWVzPSh2YWwpPT5cbi8qICAgICAgICAgICAgICAgICAgICovXG5nZXRNZXRob2ROYW1lcyh2YWwpLmZpbHRlcigobmFtZSk9PnR5cGVvZiBuYW1lPT09J3N0cmluZycpO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZ2V0U3RyaW5nTWV0aG9kTmFtZXMoZ2V0U3RyaW5nTWV0aG9kTmFtZXMpO1xuY29uc3QgICAgICAgIGJpbmRBbGxNZXRob2RzPShvYmopPT5cbmhhcmRlbihcbmNyZWF0ZShcbm9iaixcbmZyb21FbnRyaWVzKFxuZ2V0TWV0aG9kTmFtZXMob2JqKS5tYXAoKG5hbWUpPT5bXG5uYW1lLFxue1xudmFsdWU6KC8qICAgICAgICAgICAgICAgICAgICAqLy4uLmFyZ3MpPT5cbmFwcGx5KG9ialtuYW1lXSxvYmosYXJncyksXG5lbnVtZXJhYmxlOnRydWV9XSkpKSk7JGjNj19vbmNlLmJpbmRBbGxNZXRob2RzKGJpbmRBbGxNZXRob2RzKTtcblxuXG5cblxuXG5oYXJkZW4oYmluZEFsbE1ldGhvZHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0TWV0aG9kTmFtZXMiOlsiZ2V0TWV0aG9kTmFtZXMiXSwiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiOlsiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiXSwiYmluZEFsbE1ldGhvZHMiOlsiYmluZEFsbE1ldGhvZHMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh6paIP0CAAD9AgAAKAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlQ2hlY2suanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJjYXN0IiwibXVzdE1hdGNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHR5cGVsZXNzTXVzdE1hdGNoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+ICh0eXBlbGVzc011c3RNYXRjaCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG11c3RNYXRjaD10eXBlbGVzc011c3RNYXRjaDtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpO1xuY29uc3QgICAgICAgIGNhc3Q9KHNwZWNpbWVuLHBhdHQpPT57XG4vL1xuLy9cbi8vXG5tdXN0TWF0Y2goc3BlY2ltZW4scGF0dCk7XG5yZXR1cm4gc3BlY2ltZW47XG4gfTskaM2PX29uY2UuY2FzdChjYXN0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im11c3RNYXRjaCI6WyJtdXN0TWF0Y2giXSwiY2FzdCI6WyJjYXN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKKVARBOAwAATgMAACkAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIlN0b3JhZ2VOb2RlU2hhcGUiLCJVbmd1YXJkZWRIZWxwZXJJIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE07JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbmNvbnN0ICAgICAgICBTdG9yYWdlTm9kZVNoYXBlPU0ucmVtb3RhYmxlKCdTdG9yYWdlTm9kZScpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuU3RvcmFnZU5vZGVTaGFwZShTdG9yYWdlTm9kZVNoYXBlKTtcbmNvbnN0ICAgICAgICBVbmd1YXJkZWRIZWxwZXJJPU0uaW50ZXJmYWNlKFxuJ2hlbHBlcicsXG57fSxcbi8vXG57c2xvcHB5OnRydWV9KTskaM2PX29uY2UuVW5ndWFyZGVkSGVscGVySShVbmd1YXJkZWRIZWxwZXJJKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlN0b3JhZ2VOb2RlU2hhcGUiOlsiU3RvcmFnZU5vZGVTaGFwZSJdLCJVbmd1YXJkZWRIZWxwZXJJIjpbIlVuZ3VhcmRlZEhlbHBlckkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAKgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAm4dBahIHAAASBwAAKgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy91cGdyYWRlLWFwaS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiLCJpc0FiYW5kb25lZEVycm9yIiwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiIsIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNLG1hdGNoZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e2lzRnJvemVufT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlPWhhcmRlbih7XG5uYW1lOid2YXRVcGdyYWRlZCcsXG51cGdyYWRlTWVzc2FnZTpNLnN0cmluZygpLFxuaW5jYXJuYXRpb25OdW1iZXI6TS5udW1iZXIoKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZShVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlKTtcbmNvbnN0ICAgICAgICBtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb249KHVwZ3JhZGVNZXNzYWdlLHRvSW5jYXJuYXRpb25OdW1iZXIpPT5cbmhhcmRlbih7XG5uYW1lOid2YXRVcGdyYWRlZCcsXG51cGdyYWRlTWVzc2FnZSxcbmluY2FybmF0aW9uTnVtYmVyOnRvSW5jYXJuYXRpb25OdW1iZXJ9KTskaM2PX29uY2UubWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uKG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbmhhcmRlbihtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24pO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1VwZ3JhZGVEaXNjb25uZWN0aW9uPShyZWFzb24pPT5cbnJlYXNvbiE9bnVsbCYmLy9cbmlzRnJvemVuKHJlYXNvbikmJlxubWF0Y2hlcyhyZWFzb24sVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSk7JGjNj19vbmNlLmlzVXBncmFkZURpc2Nvbm5lY3Rpb24oaXNVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5oYXJkZW4oaXNVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNBYmFuZG9uZWRFcnJvcj0ocmVhc29uKT0+XG5yZWFzb24hPW51bGwmJi8vXG5pc0Zyb3plbihyZWFzb24pJiZcbm1hdGNoZXMocmVhc29uLE0uZXJyb3IoKSkmJlxuLy9cbi8vXG5yZWFzb24ubWVzc2FnZT09PSd2YXQgdGVybWluYXRlZCc7JGjNj19vbmNlLmlzQWJhbmRvbmVkRXJyb3IoaXNBYmFuZG9uZWRFcnJvcik7XG5oYXJkZW4oaXNBYmFuZG9uZWRFcnJvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlIjpbIlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiXSwibWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uIjpbIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJpc1VwZ3JhZGVEaXNjb25uZWN0aW9uIjpbImlzVXBncmFkZURpc2Nvbm5lY3Rpb24iXSwiaXNBYmFuZG9uZWRFcnJvciI6WyJpc0FiYW5kb25lZEVycm9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANX/IJUBIwAAASMAACQAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vc3RyZWFtIiwiamVzc2llLmpzIl0sImV4cG9ydHMiOlsiQkFTSVNfUE9JTlRTIiwiUHJvbWlzZUFsbE9yRXJyb3JzIiwiYWdncmVnYXRlVHJ5RmluYWxseSIsImFsbFZhbHVlcyIsImFzc2VydEFsbERlZmluZWQiLCJkZWVwTWFwT2JqZWN0IiwiZGVlcGx5RnVsZmlsbGVkT2JqZWN0IiwiZm9yZXZlciIsIm1ha2VNZWFzdXJlU2Vjb25kcyIsInN5bmNocm9uaXplZFRlZSIsInVudGlsVHJ1ZSIsIndoaWxlVHJ1ZSIsIndpdGhEZWZlcnJlZENsZWFudXAiLCJ6aXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLFgsZGVlcGx5RnVsZmlsbGVkLGlzT2JqZWN0LG1ha2VQcm9taXNlS2l0LG1ha2VRdWV1ZSxhc3luY0dlbmVyYXRlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjNj19hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9zdHJlYW1cIiwgW1tcIm1ha2VRdWV1ZVwiLCBbJGjNj19hID0+IChtYWtlUXVldWUgPSAkaM2PX2EpXV1dXSxbXCJqZXNzaWUuanNcIiwgW1tcImFzeW5jR2VuZXJhdGVcIiwgWyRozY9fYSA9PiAoYXN5bmNHZW5lcmF0ZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuY29uc3R7ZnJvbUVudHJpZXMsa2V5cyx2YWx1ZXN9PU9iamVjdDtcblxuY29uc3QgICAgICAgIEJBU0lTX1BPSU5UUz0xMF8wMDBuO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLkJBU0lTX1BPSU5UUyhCQVNJU19QT0lOVFMpO1xuY29uc3QgICAgICAgIGRlZXBseUZ1bGZpbGxlZE9iamVjdD1hc3luYyhvYmopPT57XG5pc09iamVjdChvYmopfHxGYWlsIGBwYXJhbSBtdXN0IGJlIGFuIG9iamVjdGA7XG5yZXR1cm4gZGVlcGx5RnVsZmlsbGVkKG9iaik7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkT2JqZWN0KGRlZXBseUZ1bGZpbGxlZE9iamVjdCk7XG5jb25zdCBkZWVwTWFwT2JqZWN0SW50ZXJuYWw9KHZhbHVlLG5hbWUsY29udGFpbmVyLG1hcHBlcik9PntcbmlmKGNvbnRhaW5lciYmdHlwZW9mIG5hbWU9PT0nc3RyaW5nJyl7XG5jb25zdCBtYXBwZWQ9bWFwcGVyKHZhbHVlLG5hbWUsY29udGFpbmVyKTtcbmlmKG1hcHBlZCE9PXZhbHVlKXtcbnJldHVybiBtYXBwZWQ7XG4gfVxuIH1cblxuaWYodHlwZW9mIHZhbHVlIT09J29iamVjdCd8fCF2YWx1ZSl7XG5yZXR1cm4gdmFsdWU7XG4gfVxuXG5sZXQgd2FzTWFwcGVkPWZhbHNlO1xuY29uc3QgbWFwcGVkRW50cmllcz1PYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChbaW5uZXJOYW1lLGlubmVyVmFsdWVdKT0+e1xuY29uc3QgbWFwcGVkSW5uZXJWYWx1ZT1kZWVwTWFwT2JqZWN0SW50ZXJuYWwoXG5pbm5lclZhbHVlLFxuaW5uZXJOYW1lLFxudmFsdWUsXG5tYXBwZXIpO1xuXG53YXNNYXBwZWR8fD1tYXBwZWRJbm5lclZhbHVlIT09aW5uZXJWYWx1ZTtcbnJldHVybltpbm5lck5hbWUsbWFwcGVkSW5uZXJWYWx1ZV07XG4gfSk7XG5cbnJldHVybiB3YXNNYXBwZWQ/T2JqZWN0LmZyb21FbnRyaWVzKG1hcHBlZEVudHJpZXMpOnZhbHVlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZXBNYXBPYmplY3Q9KG9iaixtYXBwZXIpPT5cbmRlZXBNYXBPYmplY3RJbnRlcm5hbChvYmosdW5kZWZpbmVkLHVuZGVmaW5lZCxtYXBwZXIpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmRlZXBNYXBPYmplY3QoZGVlcE1hcE9iamVjdCk7XG5jb25zdCBtYWtlQWdncmVnYXRlRXJyb3I9XG50eXBlb2YgQWdncmVnYXRlRXJyb3I9PT0nZnVuY3Rpb24nP1xuKGVycm9ycyxtZXNzYWdlLG9wdGlvbnMpPT5BZ2dyZWdhdGVFcnJvcihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKTpcbihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKT0+e1xucmV0dXJuIG1ha2VFcnJvcihtZXNzYWdlPz8nbXVsdGlwbGUgZXJyb3JzJyx1bmRlZmluZWQse1xuLi4ub3B0aW9ucyxcbmVycm9yc30pO1xuXG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFByb21pc2VBbGxPckVycm9ycz1hc3luYyhpdGVtcyk9PntcbnJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoaXRlbXMpLnRoZW4oKHJlc3VsdHMpPT57XG5jb25zdCBlcnJvcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlc3VsdHMuZmlsdGVyKCh7c3RhdHVzfSk9PnN0YXR1cz09PSdyZWplY3RlZCcpLlxubWFwKChyZXN1bHQpPT5yZXN1bHQucmVhc29uKTtcbmlmKCFlcnJvcnMubGVuZ3RoKXtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0cy5tYXAoXG4ocmVzdWx0KT0+cmVzdWx0LnZhbHVlKSk7XG5cbiB9ZWxzZSBpZihlcnJvcnMubGVuZ3RoPT09MSl7XG50aHJvdyBlcnJvcnNbMF07XG4gfWVsc2V7XG50aHJvdyBtYWtlQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiB9XG4gfSk7XG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLlByb21pc2VBbGxPckVycm9ycyhQcm9taXNlQWxsT3JFcnJvcnMpO1xuY29uc3QgICAgICAgIGFnZ3JlZ2F0ZVRyeUZpbmFsbHk9YXN5bmModHJpZXIsZmluYWxpemVyKT0+XG50cmllcigpLnRoZW4oXG5hc3luYyhyZXN1bHQpPT5maW5hbGl6ZXIoKS50aGVuKCgpPT5yZXN1bHQpLFxuYXN5bmModHJ5RXJyb3IpPT5cbmZpbmFsaXplcih0cnlFcnJvcikuXG50aGVuKFxuKCk9PnRyeUVycm9yLFxuKGZpbmFsaXplRXJyb3IpPT5tYWtlQWdncmVnYXRlRXJyb3IoW3RyeUVycm9yLGZpbmFsaXplRXJyb3JdKSkuXG5cbnRoZW4oKGVycm9yKT0+UHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmFnZ3JlZ2F0ZVRyeUZpbmFsbHkoYWdncmVnYXRlVHJ5RmluYWxseSk7XG5jb25zdCAgICAgICAgd2l0aERlZmVycmVkQ2xlYW51cD1hc3luYyhmbik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2xlYW51cHNMSUZPPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhZGRDbGVhbnVwPShjbGVhbnVwKT0+e1xuY2xlYW51cHNMSUZPLnVuc2hpZnQoY2xlYW51cCk7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBmaW5hbGl6ZXI9YXN5bmMoZXJyKT0+e1xuLy9cbmNvbnN0IGNsZWFudXBSZXN1bHRzPWNsZWFudXBzTElGTy5tYXAoYXN5bmMoY2xlYW51cCk9PntcbmF3YWl0IG51bGw7XG5yZXR1cm4gY2xlYW51cChlcnIpO1xuIH0pO1xuYXdhaXQgUHJvbWlzZUFsbE9yRXJyb3JzKGNsZWFudXBSZXN1bHRzKTtcbiB9O1xucmV0dXJuIGFnZ3JlZ2F0ZVRyeUZpbmFsbHkoKCk9PmZuKGFkZENsZWFudXApLGZpbmFsaXplcik7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uud2l0aERlZmVycmVkQ2xlYW51cCh3aXRoRGVmZXJyZWRDbGVhbnVwKTtcbmNvbnN0ICAgICAgICBtYWtlTWVhc3VyZVNlY29uZHM9KGN1cnJlbnRUaW1lTWlsbGlzZWMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtZWFzdXJlU2Vjb25kcz1hc3luYyhmbik9PntcbmNvbnN0IHQwPWN1cnJlbnRUaW1lTWlsbGlzZWMoKTtcbmNvbnN0IHJlc3VsdD1hd2FpdCBmbigpO1xuY29uc3QgZHVyYXRpb25NaWxsaXNlYz1jdXJyZW50VGltZU1pbGxpc2VjKCktdDA7XG5yZXR1cm57cmVzdWx0LGR1cmF0aW9uOmR1cmF0aW9uTWlsbGlzZWMvMTAwMH07XG4gfTtcbnJldHVybiBtZWFzdXJlU2Vjb25kcztcbiB9O1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU1lYXN1cmVTZWNvbmRzKG1ha2VNZWFzdXJlU2Vjb25kcyk7XG5jb25zdCAgICAgICAgYXNzZXJ0QWxsRGVmaW5lZD0ob2JqKT0+e1xuY29uc3QgbWlzc2luZz1bXTtcbmZvcihjb25zdFtrZXksdmFsXW9mIE9iamVjdC5lbnRyaWVzKG9iaikpe1xuaWYodmFsPT09dW5kZWZpbmVkKXtcbm1pc3NpbmcucHVzaChrZXkpO1xuIH1cbiB9XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbkZhaWwgYG1pc3NpbmcgJHtxKG1pc3NpbmcpfWA7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLmFzc2VydEFsbERlZmluZWQoYXNzZXJ0QWxsRGVmaW5lZCk7XG5jb25zdCBub3REb25lPWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTp1bmRlZmluZWR9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbHdheXNEb25lPWhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuXG5jb25zdCAgICAgICAgZm9yZXZlcj1hc3luY0dlbmVyYXRlKCgpPT5ub3REb25lKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZm9yZXZlcihmb3JldmVyKTtcbmNvbnN0ICAgICAgICB3aGlsZVRydWU9KHByb2R1Y2UpPT5cbmFzeW5jR2VuZXJhdGUoYXN5bmMoKT0+e1xuY29uc3QgdmFsdWU9YXdhaXQgcHJvZHVjZSgpO1xuaWYoIXZhbHVlKXtcbnJldHVybiBhbHdheXNEb25lO1xuIH1cbnJldHVybiBoYXJkZW4oe1xuZG9uZTpmYWxzZSxcbnZhbHVlfSk7XG5cbiB9KTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2Uud2hpbGVUcnVlKHdoaWxlVHJ1ZSk7XG5jb25zdCAgICAgICAgdW50aWxUcnVlPShwcm9kdWNlKT0+XG5hc3luY0dlbmVyYXRlKGFzeW5jKCk9PntcbmNvbnN0IHZhbHVlPWF3YWl0IHByb2R1Y2UoKTtcbmlmKHZhbHVlKXtcbnJldHVybiBoYXJkZW4oe1xuZG9uZTp0cnVlLFxudmFsdWV9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oe1xuZG9uZTpmYWxzZSxcbnZhbHVlfSk7XG5cbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnVudGlsVHJ1ZSh1bnRpbFRydWUpO1xuY29uc3QgICAgICAgIHppcD0oeHMseXMpPT5oYXJkZW4oeHMubWFwKCh4LGkpPT5beCx5c1sraV1dKSk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuemlwKHppcCk7XG5jb25zdCAgICAgICAgYWxsVmFsdWVzPWFzeW5jKG9iaik9PntcbmNvbnN0IHJlc29sdmVkPWF3YWl0IFByb21pc2UuYWxsKHZhbHVlcyhvYmopKTtcbi8vXG5yZXR1cm4gaGFyZGVuKGZyb21FbnRyaWVzKHppcChrZXlzKG9iaikscmVzb2x2ZWQpKSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmFsbFZhbHVlcyhhbGxWYWx1ZXMpO1xuY29uc3QgICAgICAgIHN5bmNocm9uaXplZFRlZT0oc291cmNlU3RyZWFtLHJlYWRlckNvdW50KT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lUmVzdWx0O1xuXG4vKlxuXG5cblxuICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHF1ZXVlcz1bXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVsbE5leHQ9YXN5bmMoKT0+e1xuY29uc3QgcmVxdWVzdHM9YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHF1ZXVlcy5tYXAoKHF1ZXVlKT0+cXVldWUuZ2V0KCkpKTtcbmNvbnN0IHJlamVjdGlvbnM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmVycz1bXTtcbmxldCBkb25lPWZhbHNlO1xuZm9yKGNvbnN0IHNldHRsZWRSZXN1bHQgb2YgcmVxdWVzdHMpe1xuaWYoc2V0dGxlZFJlc3VsdC5zdGF0dXM9PT0ncmVqZWN0ZWQnKXtcbnJlamVjdGlvbnMucHVzaChzZXR0bGVkUmVzdWx0LnJlYXNvbik7XG4gfWVsc2V7XG5kb25lfHw9ISFzZXR0bGVkUmVzdWx0LnZhbHVlLmRvbmU7XG5yZXNvbHZlcnMucHVzaChzZXR0bGVkUmVzdWx0LnZhbHVlLnZhbHVlKTtcbiB9XG4gfVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5pZihkb25lUmVzdWx0KXtcbnJlc3VsdD1Qcm9taXNlLnJlc29sdmUoZG9uZVJlc3VsdCk7XG4gfWVsc2UgaWYocmVqZWN0aW9ucy5sZW5ndGgpe1xuY29uc3QgZXJyb3I9bWFrZUVycm9yKFggYFRlZWQgc3RyZWFtIHRocmV3YCk7XG5hbm5vdGF0ZUVycm9yKGVycm9yLFggYFRlZWQgcmVqZWN0aW9uczogJHtyZWplY3Rpb25zfWApO1xucmVzdWx0PVxuc291cmNlU3RyZWFtLnRocm93Py4oZXJyb3IpfHxcblByb21pc2UucmVzb2x2ZShzb3VyY2VTdHJlYW0ucmV0dXJuPy4oKSkudGhlbigoKT0+XG5Qcm9taXNlLnJlamVjdChlcnJvcikpO1xuXG4gfWVsc2UgaWYoZG9uZSl7XG5yZXN1bHQ9XG5zb3VyY2VTdHJlYW0ucmV0dXJuPy4oKXx8XG5Qcm9taXNlLnJlc29sdmUoe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9ZWxzZXtcbnJlc3VsdD1zb3VyY2VTdHJlYW0ubmV4dCgpO1xuIH1cbnJlc3VsdC50aGVuKFxuKHIpPT57XG5pZihyLmRvbmUpe1xuZG9uZVJlc3VsdD1yO1xuIH1cbiB9LFxuKCk9PntcbmRvbmVSZXN1bHQ9e2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9O1xuIH0pO1xuXG5mb3IoY29uc3QgcmVzb2x2ZSBvZiByZXNvbHZlcnMpe1xucmVzb2x2ZShyZXN1bHQpO1xuIH1cbnJldHVybiBwdWxsTmV4dCgpO1xuIH07XG5cbmNvbnN0IHJlYWRlcnM9QXJyYXkuZnJvbSh7bGVuZ3RoOnJlYWRlckNvdW50fSkubWFwKCgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcXVldWU9bWFrZVF1ZXVlKCk7XG5xdWV1ZXMucHVzaChxdWV1ZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWFkZXI9aGFyZGVuKHtcbiAgICAgIGFzeW5jIG5leHQoKXtcbi8qXG5cblxuXG4gICAgICAgICAqL1xuY29uc3R7cHJvbWlzZSxyZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucXVldWUucHV0KHt2YWx1ZTpyZXNvbHZlLGRvbmU6ZmFsc2V9KTtcbnJldHVybiBwcm9taXNlO1xuIH0sXG4gICAgICBhc3luYyByZXR1cm4oKXtcbi8qXG5cblxuXG4gICAgICAgICAqL1xuY29uc3R7cHJvbWlzZSxyZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucXVldWUucHV0KHt2YWx1ZTpyZXNvbHZlLGRvbmU6dHJ1ZX0pO1xucmV0dXJuIHByb21pc2U7XG4gfSxcbiAgICAgIGFzeW5jIHRocm93KHJlYXNvbil7XG5jb25zdCByZWplY3Rpb249UHJvbWlzZS5yZWplY3QocmVhc29uKTtcbnF1ZXVlLnB1dChyZWplY3Rpb24pO1xucmV0dXJuIHJlamVjdGlvbjtcbiB9LFxuLy9cbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiByZWFkZXI7XG4gfSxcbi8vXG4gICAgICBhc3luY1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpe1xuYXdhaXQgcmVhZGVyLnJldHVybigpO1xuIH19KTtcblxucmV0dXJuIHJlYWRlcjtcbiB9KTtcblxudm9pZCBwdWxsTmV4dCgpO1xucmV0dXJuIHJlYWRlcnM7XG4gfTskaM2PX29uY2Uuc3luY2hyb25pemVkVGVlKHN5bmNocm9uaXplZFRlZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJCQVNJU19QT0lOVFMiOlsiQkFTSVNfUE9JTlRTIl0sImRlZXBseUZ1bGZpbGxlZE9iamVjdCI6WyJkZWVwbHlGdWxmaWxsZWRPYmplY3QiXSwiZGVlcE1hcE9iamVjdCI6WyJkZWVwTWFwT2JqZWN0Il0sIlByb21pc2VBbGxPckVycm9ycyI6WyJQcm9taXNlQWxsT3JFcnJvcnMiXSwiYWdncmVnYXRlVHJ5RmluYWxseSI6WyJhZ2dyZWdhdGVUcnlGaW5hbGx5Il0sIndpdGhEZWZlcnJlZENsZWFudXAiOlsid2l0aERlZmVycmVkQ2xlYW51cCJdLCJtYWtlTWVhc3VyZVNlY29uZHMiOlsibWFrZU1lYXN1cmVTZWNvbmRzIl0sImFzc2VydEFsbERlZmluZWQiOlsiYXNzZXJ0QWxsRGVmaW5lZCJdLCJmb3JldmVyIjpbImZvcmV2ZXIiXSwid2hpbGVUcnVlIjpbIndoaWxlVHJ1ZSJdLCJ1bnRpbFRydWUiOlsidW50aWxUcnVlIl0sInppcCI6WyJ6aXAiXSwiYWxsVmFsdWVzIjpbImFsbFZhbHVlcyJdLCJzeW5jaHJvbml6ZWRUZWUiOlsic3luY2hyb25pemVkVGVlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAK74YwMHCAAABwgAADMAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiLi9zdWJzY3JpYmUuanMiXSwiZXhwb3J0cyI6WyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciIsIm9ic2VydmVJdGVyYXRpb24iLCJvYnNlcnZlSXRlcmF0b3IiLCJvYnNlcnZlTm90aWZpZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxzdWJzY3JpYmVMYXRlc3Q7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVMYXRlc3RcIiwgWyRozY9fYSA9PiAoc3Vic2NyaWJlTGF0ZXN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllcj1zdWJzY3JpYmVMYXRlc3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIobWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIpO1xuY29uc3QgICAgICAgIG9ic2VydmVJdGVyYXRvcj0oYXN5bmNJdGVyYXRvclAsaXRlcmF0aW9uT2JzZXJ2ZXIpPT57XG5yZXR1cm4gbmV3IFByb21pc2UoKGFjayxvYnNlcnZlckVycm9yKT0+e1xuY29uc3QgcmVjdXI9KCk9PntcbkUud2hlbihcbkUoYXN5bmNJdGVyYXRvclApLm5leHQoKSxcbih7dmFsdWUsZG9uZX0pPT57XG5pZihkb25lKXtcbml0ZXJhdGlvbk9ic2VydmVyLmZpbmlzaCYmaXRlcmF0aW9uT2JzZXJ2ZXIuZmluaXNoKHZhbHVlKTtcbmFjayh1bmRlZmluZWQpO1xuIH1lbHNle1xuaXRlcmF0aW9uT2JzZXJ2ZXIudXBkYXRlU3RhdGUmJlxuaXRlcmF0aW9uT2JzZXJ2ZXIudXBkYXRlU3RhdGUodmFsdWUpO1xucmVjdXIoKTtcbiB9XG4gfSxcbihyZWFzb24pPT57XG5pdGVyYXRpb25PYnNlcnZlci5mYWlsJiZpdGVyYXRpb25PYnNlcnZlci5mYWlsKHJlYXNvbik7XG5hY2sodW5kZWZpbmVkKTtcbiB9KS5cbmNhdGNoKG9ic2VydmVyRXJyb3IpO1xuIH07XG5yZWN1cigpO1xuIH0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uub2JzZXJ2ZUl0ZXJhdG9yKG9ic2VydmVJdGVyYXRvcik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZUl0ZXJhdGlvbj0oYXN5bmNJdGVyYWJsZVAsaXRlcmF0aW9uT2JzZXJ2ZXIpPT57XG5jb25zdCBpdGVyYXRvclA9RShhc3luY0l0ZXJhYmxlUClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5yZXR1cm4gb2JzZXJ2ZUl0ZXJhdG9yKGl0ZXJhdG9yUCxpdGVyYXRpb25PYnNlcnZlcik7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5vYnNlcnZlSXRlcmF0aW9uKG9ic2VydmVJdGVyYXRpb24pO1xuY29uc3QgICAgICAgIG9ic2VydmVOb3RpZmllcj0obm90aWZpZXJQLGl0ZXJhdGlvbk9ic2VydmVyKT0+XG5vYnNlcnZlSXRlcmF0aW9uKHN1YnNjcmliZUxhdGVzdChub3RpZmllclApLGl0ZXJhdGlvbk9ic2VydmVyKTskaM2PX29uY2Uub2JzZXJ2ZU5vdGlmaWVyKG9ic2VydmVOb3RpZmllcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciI6WyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciJdLCJvYnNlcnZlSXRlcmF0b3IiOlsib2JzZXJ2ZUl0ZXJhdG9yIl0sIm9ic2VydmVJdGVyYXRpb24iOlsib2JzZXJ2ZUl0ZXJhdGlvbiJdLCJvYnNlcnZlTm90aWZpZXIiOlsib2JzZXJ2ZU5vdGlmaWVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALUW0pDdBwAA3QcAACQAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9wdWJsaXNoLWtpdC5qcyIsIi4vc3Vic2NyaWJlLmpzIiwiLi9ub3RpZmllci5qcyIsIi4vc3Vic2NyaWJlci5qcyIsIi4vdG9waWMuanMiLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIiwiLi9zdG9yZXN1Yi5qcyIsIi4vc3RvcmVkLW5vdGlmaWVyLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJleHBvcnRzIjpbIm1ha2VOb3RpZmllcktpdCIsIm1ha2VOb3RpZmllcktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiLCJtYWtlU3Vic2NyaXB0aW9uS2l0Iiwib2JzZXJ2ZUl0ZXJhdG9yIiwib2JzZXJ2ZUl0ZXJhdG9yIiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Iiwic3Vic2NyaWJlTGF0ZXN0Iiwic3Vic2NyaWJlTGF0ZXN0IixudWxsXSwicmVleHBvcnRzIjpbIi4vc3RvcmVkLW5vdGlmaWVyLmpzIiwiLi9zdG9yZXN1Yi5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vcHVibGlzaC1raXQuanNcIiwgW11dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtdXSxbXCIuL25vdGlmaWVyLmpzXCIsIFtdXSxbXCIuL3N1YnNjcmliZXIuanNcIiwgW11dLFtcIi4vdG9waWMuanNcIiwgW11dLFtcIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNcIiwgW11dLFtcIi4vc3RvcmVzdWIuanNcIiwgW11dLFtcIi4vc3RvcmVkLW5vdGlmaWVyLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9wdWJsaXNoLWtpdC5qcyI6W1sibWFrZVB1Ymxpc2hLaXQiLCJtYWtlUHVibGlzaEtpdCJdLFsicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Il0sWyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIiwiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSJdLFsiSXRlcmFibGVFYWNoVG9waWNJIiwiSXRlcmFibGVFYWNoVG9waWNJIl0sWyJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIl0sWyJTdWJzY3JpYmVyU2hhcGUiLCJTdWJzY3JpYmVyU2hhcGUiXV0sIi4vc3Vic2NyaWJlLmpzIjpbWyJzdWJzY3JpYmVFYWNoIiwic3Vic2NyaWJlRWFjaCJdLFsic3Vic2NyaWJlTGF0ZXN0Iiwic3Vic2NyaWJlTGF0ZXN0Il1dLCIuL25vdGlmaWVyLmpzIjpbWyJtYWtlTm90aWZpZXIiLCJtYWtlTm90aWZpZXIiXSxbIm1ha2VOb3RpZmllcktpdCIsIm1ha2VOb3RpZmllcktpdCJdLFsibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiLCJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSJdLFsibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciJdXSwiLi9zdWJzY3JpYmVyLmpzIjpbWyJtYWtlU3Vic2NyaXB0aW9uIiwibWFrZVN1YnNjcmlwdGlvbiJdLFsibWFrZVN1YnNjcmlwdGlvbktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiXV0sIi4vdG9waWMuanMiOltbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiLCJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl1dLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIjpbWyJvYnNlcnZlTm90aWZpZXIiLCJvYnNlcnZlTm90aWZpZXIiXSxbIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVJdGVyYXRvciJdLFsib2JzZXJ2ZUl0ZXJhdGlvbiIsIm9ic2VydmVJdGVyYXRpb24iXSxbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIiwibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANlbosJxEAAAcRAAACcAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvbm90aWZpZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiLi9wdWJsaXNoLWtpdC5qcyIsIi4vc3Vic2NyaWJlLmpzIl0sImV4cG9ydHMiOlsibWFrZU5vdGlmaWVyIiwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciIsIm1ha2VOb3RpZmllcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRSxGYXIsbWFrZVB1Ymxpc2hLaXQsc3Vic2NyaWJlTGF0ZXN0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQdWJsaXNoS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUxhdGVzdFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVMYXRlc3QgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyPShzaGFyYWJsZUludGVybmFsc1ApPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLi4uc3Vic2NyaWJlTGF0ZXN0KHNoYXJhYmxlSW50ZXJuYWxzUCksXG5nZXRVcGRhdGVTaW5jZTphc3luYyh1cGRhdGVDb3VudCk9PlxuRShzaGFyYWJsZUludGVybmFsc1ApLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KSxcblxuLypcblxuXG5cblxuICAgICAqL1xuZ2V0U2hhcmFibGVOb3RpZmllckludGVybmFsczphc3luYygpPT5zaGFyYWJsZUludGVybmFsc1AsXG4vKlxuXG5cblxuICAgICAqL1xuZ2V0U3RvcmVLZXk6KCk9PmhhcmRlbih7bm90aWZpZXJ9KX0pO1xuXG5yZXR1cm4gbm90aWZpZXI7XG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5tYWtlTm90aWZpZXIobWFrZU5vdGlmaWVyKTtcbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcj0oc3Vic2NyaWJlcik9Pntcbi8qXG5cbiAgICovXG5jb25zdCBiYXNlTm90aWZpZXI9aGFyZGVuKHtcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudD11bmRlZmluZWQpPT5cbkUoc3Vic2NyaWJlcikuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi4uLm1ha2VOb3RpZmllcihiYXNlTm90aWZpZXIpLFxuLi4uYmFzZU5vdGlmaWVyfSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9OyRozY9fb25jZS5tYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcihtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcik7XG5oYXJkZW4obWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyS2l0PSguLi5pbml0aWFsU3RhdGVBcnIpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuY29uc3Qgbm90aWZpZXI9bWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIoc3Vic2NyaWJlcik7XG5cbmNvbnN0IHVwZGF0ZXI9RmFyKCd1cGRhdGVyJyx7XG51cGRhdGVTdGF0ZTooc3RhdGUpPT5wdWJsaXNoZXIucHVibGlzaChzdGF0ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbmFzc2VydChpbml0aWFsU3RhdGVBcnIubGVuZ3RoPD0xLCd0b28gbWFueSBhcmd1bWVudHMnKTtcbmlmKGluaXRpYWxTdGF0ZUFyci5sZW5ndGg9PT0xKXtcbnVwZGF0ZXIudXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlQXJyWzBdKTtcbiB9XG5cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7bm90aWZpZXIsdXBkYXRlcn0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlTm90aWZpZXJLaXQobWFrZU5vdGlmaWVyS2l0KTtcbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZT0oYXN5bmNJdGVyYWJsZVApPT57XG5jb25zdCBpdGVyYXRvclA9RShhc3luY0l0ZXJhYmxlUClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBvcHROZXh0UHJvbWlzZTtcbmxldCBjdXJyZW50VXBkYXRlQ291bnQ9MG47XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgY3VycmVudFJlc3BvbnNlO1xubGV0IGZpbmFsPWZhbHNlO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYmFzZU5vdGlmaWVyPUZhcignYmFzZU5vdGlmaWVyJyx7XG5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudD0tMW4pe1xuaWYodXBkYXRlQ291bnQ8Y3VycmVudFVwZGF0ZUNvdW50KXtcbmlmKGN1cnJlbnRSZXNwb25zZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGN1cnJlbnRSZXNwb25zZSk7XG4gfVxuIH1lbHNlIGlmKHVwZGF0ZUNvdW50IT09Y3VycmVudFVwZGF0ZUNvdW50KXtcbnRocm93IEVycm9yKFxuJ2dldFVwZGF0ZVNpbmNlIGFyZ3VtZW50IG11c3QgYmUgYSBwcmV2aW91c2x5LWlzc3VlZCB1cGRhdGVDb3VudC4nKTtcblxuIH1cblxuLy9cbmlmKGZpbmFsKXtcbmFzc2VydChjdXJyZW50UmVzcG9uc2UhPT11bmRlZmluZWQpO1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShjdXJyZW50UmVzcG9uc2UpO1xuIH1cbmlmKCFvcHROZXh0UHJvbWlzZSl7XG5jb25zdCBuZXh0SXRlclJlc3VsdFA9RShpdGVyYXRvclApLm5leHQoKTtcbm9wdE5leHRQcm9taXNlPUUud2hlbihcbm5leHRJdGVyUmVzdWx0UCxcbih7ZG9uZSx2YWx1ZX0pPT57XG5hc3NlcnQoIWZpbmFsKTtcbmlmKGRvbmUpe1xuZmluYWw9dHJ1ZTtcbiB9XG5jdXJyZW50VXBkYXRlQ291bnQrPTFuO1xuY3VycmVudFJlc3BvbnNlPWhhcmRlbih7XG52YWx1ZSxcbnVwZGF0ZUNvdW50OmRvbmU/dW5kZWZpbmVkOmN1cnJlbnRVcGRhdGVDb3VudH0pO1xuXG5vcHROZXh0UHJvbWlzZT11bmRlZmluZWQ7XG5yZXR1cm4gY3VycmVudFJlc3BvbnNlO1xuIH0sXG4oX3JlYXNvbik9PntcbmZpbmFsPXRydWU7XG5jdXJyZW50UmVzcG9uc2U9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbm5leHRJdGVyUmVzdWx0UDtcbm9wdE5leHRQcm9taXNlPXVuZGVmaW5lZDtcbnJldHVybiBjdXJyZW50UmVzcG9uc2U7XG4gfSk7XG5cbiB9XG5yZXR1cm4gb3B0TmV4dFByb21pc2U7XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBub3RpZmllcj1GYXIoJ25vdGlmaWVyJyx7XG4vL1xuLy9cbi4uLm1ha2VOb3RpZmllcihiYXNlTm90aWZpZXIpLFxuLi4uYmFzZU5vdGlmaWVyfSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9OyRozY9fb25jZS5tYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZShtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSk7XG5oYXJkZW4obWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU5vdGlmaWVyIjpbIm1ha2VOb3RpZmllciJdLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciI6WyJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciJdLCJtYWtlTm90aWZpZXJLaXQiOlsibWFrZU5vdGlmaWVyS2l0Il0sIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIjpbIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHR6M6EtKwAALSsAACoAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvcHVibGlzaC1raXQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9wYXR0ZXJucyIsIkBhZ29yaWMvdmF0LWRhdGEiXSwiZXhwb3J0cyI6WyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIiwiSXRlcmFibGVFYWNoVG9waWNJIiwiSXRlcmFibGVMYXRlc3RUb3BpY0kiLCJQdWJsaXNoZXJJIiwiU3Vic2NyaWJlckkiLCJTdWJzY3JpYmVyU2hhcGUiLCJVcGRhdGVDb3VudFNoYXBlIiwibWFrZVB1Ymxpc2hLaXQiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJwdWJsaXNoS2l0SUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsRSxGYXIsbWFrZVByb21pc2VLaXQsTSxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQsY2FuQmVEdXJhYmxlLHByZXBhcmVFeG9DbGFzc0tpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZUd1YXJkUGF5bG9hZFwiLCBbJGjNj19hID0+IChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJjYW5CZUR1cmFibGVcIiwgWyRozY9fYSA9PiAoY2FuQmVEdXJhYmxlID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc0tpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBzaW5rPSgpPT57IH07XG5jb25zdCBtYWtlUXVpZXRSZWplY3Rpb249KHJlYXNvbik9PntcbmNvbnN0IHJlamVjdGlvbj1oYXJkZW4oUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG52b2lkIEUud2hlbihyZWplY3Rpb24sc2luayxzaW5rKTtcbnJldHVybiByZWplY3Rpb247XG4gfTtcbmNvbnN0IHRvb0ZhclJlamVjdGlvbj1tYWtlUXVpZXRSZWplY3Rpb24oXG5oYXJkZW4oRXJyb3IoJ0Nhbm5vdCByZWFkIHBhc3QgZW5kIG9mIGl0ZXJhdGlvbi4nKSkpO1xuXG5cbmNvbnN0ICAgICAgICBQdWJsaXNoZXJJPU0uaW50ZXJmYWNlKCdQdWJsaXNoZXInLHtcbnB1Ymxpc2g6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKSxcbmZpbmlzaDpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpLFxuZmFpbDpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpfSk7XG5cblxuLy9cbiRozY9fb25jZS5QdWJsaXNoZXJJKFB1Ymxpc2hlckkpO2NvbnN0IFVwZGF0ZUNvdW50U2hhcGU9TS5vcihNLmJpZ2ludCgpLE0ubnVtYmVyKCkpOyRozY9fb25jZS5VcGRhdGVDb3VudFNoYXBlKFVwZGF0ZUNvdW50U2hhcGUpO1xuY29uc3QgICAgICAgIFN1YnNjcmliZXJJPU0uaW50ZXJmYWNlKCdTdWJzY3JpYmVyJyx7XG5zdWJzY3JpYmVBZnRlcjpNLmNhbGwoKS5vcHRpb25hbChNLmJpZ2ludCgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldFVwZGF0ZVNpbmNlOk0uY2FsbCgpLm9wdGlvbmFsKFVwZGF0ZUNvdW50U2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpfSk7JGjNj19vbmNlLlN1YnNjcmliZXJJKFN1YnNjcmliZXJJKTtcblxuY29uc3QgICAgICAgIHB1Ymxpc2hLaXRJS2l0PWhhcmRlbih7XG5wdWJsaXNoZXI6UHVibGlzaGVySSxcbnN1YnNjcmliZXI6U3Vic2NyaWJlckl9KTskaM2PX29uY2UucHVibGlzaEtpdElLaXQocHVibGlzaEtpdElLaXQpO1xuXG5cbmNvbnN0ICAgICAgICBGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlPU0uaW50ZXJmYWNlKFxuJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJyxcbntcbmZvcms6TS5jYWxsKCkucmV0dXJucyhNLmFueSgpKSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06TS5jYWxsKCkucmV0dXJucyhNLmFueSgpKSwvL1xubmV4dDpNLmNhbGxXaGVuKCkucmV0dXJucyhNLmFueSgpKX0pOyRozY9fb25jZS5Gb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlKEZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUpO1xuXG5cblxuY29uc3QgICAgICAgIEl0ZXJhYmxlRWFjaFRvcGljST1NLmludGVyZmFjZSgnSXRlcmFibGVFYWNoVG9waWMnLHtcbnN1YnNjcmliZUFmdGVyOlxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKFN1YnNjcmliZXJJKS5tZXRob2RHdWFyZHMuc3Vic2NyaWJlQWZ0ZXIsXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOk0uY2FsbCgpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3InKSl9KTskaM2PX29uY2UuSXRlcmFibGVFYWNoVG9waWNJKEl0ZXJhYmxlRWFjaFRvcGljSSk7XG5cblxuXG5jb25zdCAgICAgICAgSXRlcmFibGVMYXRlc3RUb3BpY0k9TS5pbnRlcmZhY2UoJ0l0ZXJhYmxlTGF0ZXN0VG9waWMnLHtcbmdldFVwZGF0ZVNpbmNlOlxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKFN1YnNjcmliZXJJKS5tZXRob2RHdWFyZHMuZ2V0VXBkYXRlU2luY2UsXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOk0uY2FsbCgpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3InKSl9KTtcblxuXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5JdGVyYWJsZUxhdGVzdFRvcGljSShJdGVyYWJsZUxhdGVzdFRvcGljSSk7XG5jb25zdCB3ZWFrTWVtb2l6ZVVuYXJ5PShmbik9PntcbmNvbnN0IGNhY2hlPW5ldyBXZWFrTWFwKCk7XG5yZXR1cm4oYXJnKT0+e1xuLyogICAgICAgICAgICAgICAgICovXG5jb25zdCBvYXJnPWFyZztcbmlmKGNhY2hlLmhhcyhvYXJnKSl7XG5yZXR1cm4gY2FjaGUuZ2V0KG9hcmcpO1xuIH1cbmNvbnN0IHJlc3VsdD1mbihhcmcpO1xuY2FjaGUuc2V0KG9hcmcscmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBtYWtlVXBkYXRlUmVjb3JkRnJvbVB1YmxpY2F0aW9uUmVjb3JkPShyZWNvcmQpPT57XG5jb25zdHtcbmhlYWQ6e3ZhbHVlLGRvbmV9LFxucHVibGlzaENvdW50fT1cbnJlY29yZDtcbmlmKGRvbmUpe1xuLy9cbnJldHVybiBoYXJkZW4oe3ZhbHVlLHVwZGF0ZUNvdW50OnVuZGVmaW5lZH0pO1xuIH1cbnJldHVybiBoYXJkZW4oe3ZhbHVlLHVwZGF0ZUNvdW50OnB1Ymxpc2hDb3VudH0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUHVibGlzaEtpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB0YWlsUDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHRhaWxSO1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xuXG5sZXQgY3VycmVudFB1Ymxpc2hDb3VudD0wbjtcbmxldCBjdXJyZW50UD10YWlsUDtcbmNvbnN0IGFkdmFuY2VDdXJyZW50PShkb25lLHZhbHVlLHJlamVjdGlvbik9PntcbmlmKHRhaWxSPT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKCdDYW5ub3QgdXBkYXRlIHN0YXRlIGFmdGVyIHRlcm1pbmF0aW9uLicpO1xuIH1cblxuY3VycmVudFB1Ymxpc2hDb3VudCs9MW47XG5jdXJyZW50UD10YWlsUDtcbmNvbnN0IHJlc29sdmVDdXJyZW50PXRhaWxSO1xuXG5pZihkb25lKXtcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbnRhaWxSPXVuZGVmaW5lZDtcbiB9ZWxzZXtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcbiB9XG5cbmlmKHJlamVjdGlvbil7XG5yZXNvbHZlQ3VycmVudChyZWplY3Rpb24pO1xuIH1lbHNle1xucmVzb2x2ZUN1cnJlbnQoXG5oYXJkZW4oe1xuaGVhZDp7dmFsdWUsZG9uZX0sXG5wdWJsaXNoQ291bnQ6Y3VycmVudFB1Ymxpc2hDb3VudCxcbnRhaWw6dGFpbFB9KSk7XG5cblxuIH1cbiB9O1xuXG5jb25zdCBtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQ9d2Vha01lbW9pemVVbmFyeShcbm1ha2VVcGRhdGVSZWNvcmRGcm9tUHVibGljYXRpb25SZWNvcmQpO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHN1YnNjcmliZXI9RmFyKCdTdWJzY3JpYmVyJyx7XG5zdWJzY3JpYmVBZnRlcjoocHVibGlzaENvdW50PS0xbik9PntcbmFzc2VydC50eXBlb2YocHVibGlzaENvdW50LCdiaWdpbnQnKTtcbmlmKHB1Ymxpc2hDb3VudD09PWN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIHRhaWxQO1xuIH1lbHNlIGlmKHB1Ymxpc2hDb3VudDxjdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiBjdXJyZW50UDtcbiB9ZWxzZXtcbnRocm93IEVycm9yKFxuJ3N1YnNjcmliZUFmdGVyIGFyZ3VtZW50IG11c3QgYmUgYSBwcmV2aW91c2x5LWlzc3VlZCBwdWJsaXNoQ291bnQuJyk7XG5cbiB9XG4gfSxcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudCk9PntcbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBzdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKCkudGhlbihtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQpO1xuIH1cbnVwZGF0ZUNvdW50PUJpZ0ludCh1cGRhdGVDb3VudCk7XG5yZXR1cm4oXG5zdWJzY3JpYmVyXG4vL1xuLy9cbi8vXG4uc3Vic2NyaWJlQWZ0ZXIodXBkYXRlQ291bnQpXG4vL1xuLy9cbi50aGVuKCgpPT5zdWJzY3JpYmVyLmdldFVwZGF0ZVNpbmNlKCkpKTtcblxuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1Ymxpc2hlcj1GYXIoJ1B1Ymxpc2hlcicse1xucHVibGlzaDoodmFsdWUpPT57XG5hZHZhbmNlQ3VycmVudChmYWxzZSx2YWx1ZSk7XG4gfSxcbmZpbmlzaDooZmluYWxWYWx1ZSk9PntcbmFkdmFuY2VDdXJyZW50KHRydWUsZmluYWxWYWx1ZSk7XG4gfSxcbmZhaWw6KHJlYXNvbik9PntcbmFkdmFuY2VDdXJyZW50KHRydWUsdW5kZWZpbmVkLG1ha2VRdWlldFJlamVjdGlvbihyZWFzb24pKTtcbiB9fSk7XG5cbnJldHVybiBoYXJkZW4oe3B1Ymxpc2hlcixzdWJzY3JpYmVyfSk7XG4gfTskaM2PX29uY2UubWFrZVB1Ymxpc2hLaXQobWFrZVB1Ymxpc2hLaXQpO1xuaGFyZGVuKG1ha2VQdWJsaXNoS2l0KTtcblxuY29uc3QgRHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZVNoYXBlPWhhcmRlbih7XG52YWx1ZUR1cmFiaWxpdHk6TS5hbnkoKSxcbnB1Ymxpc2hDb3VudDpNLmFueSgpLFxuc3RhdHVzOk0uYW55KCksXG5oYXNWYWx1ZTpNLmFueSgpLFxudmFsdWU6TS5hbnkoKX0pO1xuXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGluaXREdXJhYmxlUHVibGlzaEtpdFN0YXRlPShvcHRpb25zPXt9KT0+e1xuY29uc3R7dmFsdWVEdXJhYmlsaXR5PSdtYW5kYXRvcnknfT1vcHRpb25zO1xuYXNzZXJ0LmVxdWFsKHZhbHVlRHVyYWJpbGl0eSwnbWFuZGF0b3J5Jyk7XG5yZXR1cm57XG4vL1xudmFsdWVEdXJhYmlsaXR5LFxuXG4vL1xucHVibGlzaENvdW50OjBuLFxuc3RhdHVzOidsaXZlJywvL1xuXG4vL1xuLy9cbi8vXG5oYXNWYWx1ZTpmYWxzZSxcbnZhbHVlOnVuZGVmaW5lZH07XG5cbiB9O1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG4gKi9cbmNvbnN0IGdldEVwaGVtZXJhbEtleT0oZmFjZXRzKT0+ZmFjZXRzLnB1Ymxpc2hlcjtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGE9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHByb3ZpZGVDdXJyZW50UD0oc3RhdGUsZmFjZXRzLHRhaWwpPT57XG5jb25zdCBlcGhlbWVyYWxLZXk9Z2V0RXBoZW1lcmFsS2V5KGZhY2V0cyk7XG5jb25zdCBmb3VuZERhdGE9ZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLmdldChlcGhlbWVyYWxLZXkpO1xuY29uc3QgY3VycmVudFA9Zm91bmREYXRhJiZmb3VuZERhdGEuY3VycmVudFA7XG5pZihjdXJyZW50UCl7XG5yZXR1cm4gY3VycmVudFA7XG4gfVxuXG5jb25zdHtwdWJsaXNoQ291bnQsc3RhdHVzLGhhc1ZhbHVlLHZhbHVlfT1zdGF0ZTtcbmlmKCFoYXNWYWx1ZSl7XG5hc3NlcnQoc3RhdHVzPT09J2xpdmUnKTtcbnJldHVybiB0YWlsO1xuIH1cbmlmKHN0YXR1cz09PSdsaXZlJ3x8c3RhdHVzPT09J2ZpbmlzaGVkJyl7XG5jb25zdCBjZWxsPWhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lOnN0YXR1cyE9PSdsaXZlJ30sXG5wdWJsaXNoQ291bnQsXG50YWlsfSk7XG5cbnJldHVybiBFLnJlc29sdmUoY2VsbCk7XG4gfWVsc2UgaWYoc3RhdHVzPT09J2ZhaWxlZCcpe1xucmV0dXJuIG1ha2VRdWlldFJlamVjdGlvbih2YWx1ZSk7XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBJbnZhbGlkIGR1cmFibGUgcHJvbWlzZSBraXQgc3RhdHVzOiAke3Eoc3RhdHVzKX1gO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YT0oc3RhdGUsZmFjZXRzKT0+e1xuY29uc3QgZXBoZW1lcmFsS2V5PWdldEVwaGVtZXJhbEtleShmYWNldHMpO1xuY29uc3QgZm91bmREYXRhPWR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5nZXQoZXBoZW1lcmFsS2V5KTtcbmlmKGZvdW5kRGF0YSl7XG5yZXR1cm4gZm91bmREYXRhO1xuIH1cblxuY29uc3R7c3RhdHVzfT1zdGF0ZTtcbmxldCB0YWlsUDtcbmxldCB0YWlsUjtcbmlmKHN0YXR1cz09PSdsaXZlJyl7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG52b2lkIEUud2hlbih0YWlsUCxzaW5rLHNpbmspO1xuIH1lbHNlIGlmKHN0YXR1cz09PSdmaW5pc2hlZCd8fHN0YXR1cz09PSdmYWlsZWQnKXtcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYEludmFsaWQgZHVyYWJsZSBwcm9taXNlIGtpdCBzdGF0dXM6ICR7cShzdGF0dXMpfWA7XG4gfVxuLy9cbmNvbnN0IG9iaj1oYXJkZW4oe2N1cnJlbnRQOnVuZGVmaW5lZCx0YWlsUCx0YWlsUn0pO1xuZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLnNldChlcGhlbWVyYWxLZXksb2JqKTtcbnJldHVybiBvYmo7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdD0oY29udGV4dCx2YWx1ZSx0YXJnZXRTdGF0dXM9J2xpdmUnKT0+e1xuY29uc3R7c3RhdGUsZmFjZXRzfT1jb250ZXh0O1xuY29uc3R7dmFsdWVEdXJhYmlsaXR5LHN0YXR1c309c3RhdGU7XG5pZihzdGF0dXMhPT0nbGl2ZScpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgc3RhdGUgYWZ0ZXIgdGVybWluYXRpb24uJyk7XG4gfVxuY29uc3QgZG9uZT10YXJnZXRTdGF0dXMhPT0nbGl2ZSc7XG5pZihkb25lfHx2YWx1ZUR1cmFiaWxpdHk9PT0nbWFuZGF0b3J5Jyl7XG5jYW5CZUR1cmFibGUodmFsdWUpfHxGYWlsIGBDYW5ub3QgYWNjZXB0IG5vbi1kdXJhYmxlIHZhbHVlOiAke3ZhbHVlfWA7XG4gfVxuY29uc3R7dGFpbFA6b2xkVGFpbFAsdGFpbFI6cmVzb2x2ZU9sZFRhaWx9PVxucHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YShzdGF0ZSxmYWNldHMpO1xuYXNzZXJ0LnR5cGVvZihyZXNvbHZlT2xkVGFpbCwnZnVuY3Rpb24nKTtcblxuY29uc3QgcHVibGlzaENvdW50PXN0YXRlLnB1Ymxpc2hDb3VudCsxbjtcbnN0YXRlLnB1Ymxpc2hDb3VudD1wdWJsaXNoQ291bnQ7XG5cbmxldCB0YWlsUDtcbmxldCB0YWlsUjtcbmlmKGRvbmUpe1xuc3RhdGUuc3RhdHVzPXRhcmdldFN0YXR1cztcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbnRhaWxSPXVuZGVmaW5lZDtcbiB9ZWxzZXtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcbnZvaWQgRS53aGVuKHRhaWxQLHNpbmssc2luayk7XG4gfVxuXG5sZXQgY3VycmVudFA7XG5pZih0YXJnZXRTdGF0dXM9PT0nZmFpbGVkJyl7XG5zdGF0ZS5oYXNWYWx1ZT10cnVlO1xuc3RhdGUudmFsdWU9dmFsdWU7XG5jb25zdCByZWplY3Rpb249bWFrZVF1aWV0UmVqZWN0aW9uKHZhbHVlKTtcbnJlc29sdmVPbGRUYWlsKHJlamVjdGlvbik7XG4gfWVsc2V7XG4vL1xuLy9cbmlmKGRvbmV8fHZhbHVlRHVyYWJpbGl0eSE9PSdpZ25vcmVkJyYmY2FuQmVEdXJhYmxlKHZhbHVlKSl7XG5zdGF0ZS5oYXNWYWx1ZT10cnVlO1xuc3RhdGUudmFsdWU9dmFsdWU7XG4gfWVsc2V7XG5zdGF0ZS5oYXNWYWx1ZT1mYWxzZTtcbnN0YXRlLnZhbHVlPXVuZGVmaW5lZDtcbi8vXG5jdXJyZW50UD1vbGRUYWlsUDtcbiB9XG5cbnJlc29sdmVPbGRUYWlsKFxuaGFyZGVuKHtcbmhlYWQ6e3ZhbHVlLGRvbmV9LFxucHVibGlzaENvdW50LFxudGFpbDp0YWlsUH0pKTtcblxuXG4gfVxuXG5kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuc2V0KFxuZ2V0RXBoZW1lcmFsS2V5KGZhY2V0cyksXG5oYXJkZW4oe2N1cnJlbnRQLHRhaWxQLHRhaWxSfSkpO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQ9KGJhZ2dhZ2Usa2luZE5hbWUpPT57XG4vL1xuLy9cbmNvbnN0IG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZD1tYWtlVXBkYXRlUmVjb3JkRnJvbVB1YmxpY2F0aW9uUmVjb3JkO1xuXG4vKlxuXG4gICAqL1xucmV0dXJuIHByZXBhcmVFeG9DbGFzc0tpdChcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbnB1Ymxpc2hLaXRJS2l0LFxuaW5pdER1cmFibGVQdWJsaXNoS2l0U3RhdGUsXG57XG4vL1xuLy9cbnB1Ymxpc2hlcjp7XG5wdWJsaXNoKHZhbHVlKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLHZhbHVlKTtcbiB9LFxuZmluaXNoKGZpbmFsVmFsdWUpe1xuYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0KHRoaXMsZmluYWxWYWx1ZSwnZmluaXNoZWQnKTtcbiB9LFxuZmFpbChyZWFzb24pe1xuYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0KHRoaXMscmVhc29uLCdmYWlsZWQnKTtcbiB9fSxcblxuXG4vL1xuLy9cbnN1YnNjcmliZXI6e1xuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50PS0xbil7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG5jb25zdHtwdWJsaXNoQ291bnQ6Y3VycmVudFB1Ymxpc2hDb3VudH09c3RhdGU7XG5jb25zdHtjdXJyZW50UCx0YWlsUH09cHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YShcbnN0YXRlLFxuZmFjZXRzKTtcblxuaWYocHVibGlzaENvdW50PT09Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gdGFpbFA7XG4gfWVsc2UgaWYocHVibGlzaENvdW50PGN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIGN1cnJlbnRQfHxwcm92aWRlQ3VycmVudFAoc3RhdGUsZmFjZXRzLHRhaWxQKTtcbiB9ZWxzZXtcbnRocm93IEVycm9yKFxuJ3N1YnNjcmliZUFmdGVyIGFyZ3VtZW50IG11c3QgYmUgYSBwcmV2aW91c2x5LWlzc3VlZCBwdWJsaXNoQ291bnQuJyk7XG5cbiB9XG4gfSxcbmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KXtcbmNvbnN0e1xuZmFjZXRzOntzdWJzY3JpYmVyfX09XG50aGlzO1xuaWYodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKS50aGVuKG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZCk7XG4gfVxudXBkYXRlQ291bnQ9QmlnSW50KHVwZGF0ZUNvdW50KTtcbnJldHVybihcbnN1YnNjcmliZXJcbi8vXG4vL1xuLy9cbi5zdWJzY3JpYmVBZnRlcih1cGRhdGVDb3VudClcbi8vXG4vL1xuLnRoZW4oKCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UoKSkpO1xuXG4gfX19LFxuXG5cbntcbnN0YXRlU2hhcGU6RHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZVNoYXBlfSk7XG5cblxuIH07JGjNj19vbmNlLnByZXBhcmVEdXJhYmxlUHVibGlzaEtpdChwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQpO1xuaGFyZGVuKHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCk7XG5cbmNvbnN0ICAgICAgICBTdWJzY3JpYmVyU2hhcGU9TS5yZW1vdGFibGUoJ1N1YnNjcmliZXInKTskaM2PX29uY2UuU3Vic2NyaWJlclNoYXBlKFN1YnNjcmliZXJTaGFwZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJQdWJsaXNoZXJJIjpbIlB1Ymxpc2hlckkiXSwiVXBkYXRlQ291bnRTaGFwZSI6WyJVcGRhdGVDb3VudFNoYXBlIl0sIlN1YnNjcmliZXJJIjpbIlN1YnNjcmliZXJJIl0sInB1Ymxpc2hLaXRJS2l0IjpbInB1Ymxpc2hLaXRJS2l0Il0sIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiOlsiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSJdLCJJdGVyYWJsZUVhY2hUb3BpY0kiOlsiSXRlcmFibGVFYWNoVG9waWNJIl0sIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIjpbIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIl0sIm1ha2VQdWJsaXNoS2l0IjpbIm1ha2VQdWJsaXNoS2l0Il0sInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCI6WyJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiXSwiU3Vic2NyaWJlclNoYXBlIjpbIlN1YnNjcmliZXJTaGFwZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAConRhcEQgAABEIAAAuAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N0b3JlZC1ub3RpZmllci5qc3siaW1wb3J0cyI6WyJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsIkBlbmRvL2ZhciIsIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlU3RvcmVkTm90aWZpZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLEUsRmFyLG9ic2VydmVOb3RpZmllcjskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFzc2VydEFsbERlZmluZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QWxsRGVmaW5lZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlTm90aWZpZXJcIiwgWyRozY9fYSA9PiAob2JzZXJ2ZU5vdGlmaWVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkTm90aWZpZXI9KG5vdGlmaWVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5hc3NlcnRBbGxEZWZpbmVkKHtub3RpZmllcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyfSk7XG5cbmNvbnN0IG1hcnNoYWxsVG9TdG9yYWdlPW1ha2VTZXJpYWxpemVUb1N0b3JhZ2Uoc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik7XG5cbm9ic2VydmVOb3RpZmllcihub3RpZmllcix7XG51cGRhdGVTdGF0ZSh2YWx1ZSl7XG5tYXJzaGFsbFRvU3RvcmFnZSh2YWx1ZSkuY2F0Y2goKHJlYXNvbik9PlxuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgZmFpbGVkIHRvIHVwZGF0ZVN0YXRlJyxyZWFzb24pKTtcblxuIH0sXG5mYWlsKHJlYXNvbil7XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBmYWlsZWQgdG8gaXRlcmF0ZScscmVhc29uKTtcbiB9fSkuXG5jYXRjaCgocmVhc29uKT0+e1xuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgaGFsdGVkIGl0ZXJhdGlvbicscmVhc29uKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZWROb3RpZmllcj1GYXIoJ1N0b3JlZE5vdGlmaWVyJyx7XG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT5FKG5vdGlmaWVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5nZXRQYXRoOigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRQYXRoKCksXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcn0pO1xuXG5yZXR1cm4gc3RvcmVkTm90aWZpZXI7XG4gfTskaM2PX29uY2UubWFrZVN0b3JlZE5vdGlmaWVyKG1ha2VTdG9yZWROb3RpZmllcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3RvcmVkTm90aWZpZXIiOlsibWFrZVN0b3JlZE5vdGlmaWVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKcTAjPtFQAA7RUAACcAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVzdWIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZXIuanMiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCIsIm1ha2VTdG9yZWRQdWJsaXNoS2l0IiwibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCIsIm1ha2VTdG9yZWRTdWJzY3JpYmVyIiwibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixtYWtlTWFyc2hhbCxhc3NlcnRBbGxEZWZpbmVkLG1ha2VTZXJpYWxpemVUb1N0b3JhZ2Usb2JzZXJ2ZUl0ZXJhdGlvbixtYWtlUHVibGlzaEtpdCxtYWtlU3Vic2NyaXB0aW9uS2l0LHN1YnNjcmliZUVhY2g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRozY9fYSA9PiAobWFrZU1hcnNoYWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJhc3NlcnRBbGxEZWZpbmVkXCIsIFskaM2PX2EgPT4gKGFzc2VydEFsbERlZmluZWQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzXCIsIFtbXCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlXCIsIFskaM2PX2EgPT4gKG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UgPSAkaM2PX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlSXRlcmF0aW9uXCIsIFskaM2PX2EgPT4gKG9ic2VydmVJdGVyYXRpb24gPSAkaM2PX2EpXV1dXSxbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtbXCJtYWtlUHVibGlzaEtpdFwiLCBbJGjNj19hID0+IChtYWtlUHVibGlzaEtpdCA9ICRozY9fYSldXV1dLFtcIi4vc3Vic2NyaWJlci5qc1wiLCBbW1wibWFrZVN1YnNjcmlwdGlvbktpdFwiLCBbJGjNj19hID0+IChtYWtlU3Vic2NyaXB0aW9uS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUVhY2hcIiwgWyRozY9fYSA9PiAoc3Vic2NyaWJlRWFjaCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkPWFzeW5jKHN1YnNjcmliZXIsY29uc3VtZVZhbHVlKT0+e1xuLy9cbi8vXG5jb25zdCBpdGVyYXRvcj1zdWJzY3JpYmVFYWNoKHN1YnNjcmliZXIpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuXG5sZXQgZmluaXNoZWQ9ZmFsc2U7XG5hd2FpdCBudWxsO1xud2hpbGUoIWZpbmlzaGVkKXtcbmNvbnN0e3ZhbHVlLGRvbmV9PWF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcbmF3YWl0IGNvbnN1bWVWYWx1ZSh2YWx1ZSk7XG5maW5pc2hlZD0hIWRvbmU7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5mb3JFYWNoUHVibGljYXRpb25SZWNvcmQoZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkU3Vic2NyaWJlcj0oc3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKT0+e1xuYXNzZXJ0QWxsRGVmaW5lZCh7c3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyfSk7XG5cbmNvbnN0IG1hcnNoYWxsVG9TdG9yYWdlPW1ha2VTZXJpYWxpemVUb1N0b3JhZ2Uoc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik7XG5cbi8vXG5mb3JFYWNoUHVibGljYXRpb25SZWNvcmQoc3Vic2NyaWJlcixtYXJzaGFsbFRvU3RvcmFnZSkuY2F0Y2goKGVycik9Pntcbi8vXG4vL1xuY29uc29sZS5lcnJvcignU3RvcmVkU3Vic2NyaWJlciBmYWlsZWQgdG8gaXRlcmF0ZScsZXJyKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3Jlc3ViPUZhcignU3RvcmVkU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudCk9PnN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KSxcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpLFxuZ2V0UGF0aDooKT0+RShzdG9yYWdlTm9kZSkuZ2V0UGF0aCgpLFxuZ2V0U3RvcmVLZXk6KCk9PkUoc3RvcmFnZU5vZGUpLmdldFN0b3JlS2V5KCksXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcn0pO1xuXG5yZXR1cm4gc3RvcmVzdWI7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVN0b3JlZFN1YnNjcmliZXIobWFrZVN0b3JlZFN1YnNjcmliZXIpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRTdWJzY3JpcHRpb249KFxuc3Vic2NyaXB0aW9uLFxuc3RvcmFnZU5vZGUsXG5tYXJzaGFsbGVyPW1ha2VNYXJzaGFsKHVuZGVmaW5lZCx1bmRlZmluZWQse1xubWFyc2hhbFNhdmVFcnJvcjooKT0+eyB9LFxuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pKT0+XG5cbntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdW5zZXJpYWxpemVyPUZhcigndW5zZXJpYWxpemVyJyx7XG5mcm9tQ2FwRGF0YTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSksXG51bnNlcmlhbGl6ZTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSl9KTtcblxuXG4vL1xubGV0IHB1Ymxpc2hGYWlsZWQ9ZmFsc2U7XG5sZXQgcHVibGlzaEV4Y2VwdGlvbjtcblxuY29uc3QgZmFpbD0oZXJyKT0+e1xucHVibGlzaEZhaWxlZD10cnVlO1xucHVibGlzaEV4Y2VwdGlvbj1lcnI7XG4gfTtcblxuLy9cbi8vXG5jb25zdCBwdWJsaXNoVmFsdWU9KG9iaik9PntcbmFzc2VydChzdG9yYWdlTm9kZSk7XG5pZihwdWJsaXNoRmFpbGVkKXtcbi8vXG50aHJvdyBwdWJsaXNoRXhjZXB0aW9uO1xuIH1cblxuLy9cbkUobWFyc2hhbGxlcikuXG50b0NhcERhdGEob2JqKS5cbnRoZW4oKHNlcmlhbGl6ZWQpPT57XG5jb25zdCBlbmNvZGVkPUpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWQpO1xucmV0dXJuIEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKGVuY29kZWQpO1xuIH0pLlxuY2F0Y2goZmFpbCk7XG4gfTtcblxuaWYoc3RvcmFnZU5vZGUpe1xuLy9cbm9ic2VydmVJdGVyYXRpb24oc3Vic2NyaXB0aW9uLHtcbnVwZGF0ZVN0YXRlOnB1Ymxpc2hWYWx1ZSxcbmZpbmlzaDpwdWJsaXNoVmFsdWV9KS5cbmNhdGNoKGZhaWwpO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZXN1Yj1GYXIoJ1N0b3JlZFN1YnNjcmlwdGlvbicse1xuLy9cbmdldFN0b3JlS2V5OmFzeW5jKCk9PntcbmlmKCFzdG9yYWdlTm9kZSl7XG5yZXR1cm4gaGFyZGVuKHtzdWJzY3JpcHRpb259KTtcbiB9XG5jb25zdCBzdG9yZUtleT1hd2FpdCBFKHN0b3JhZ2VOb2RlKS5nZXRTdG9yZUtleSgpO1xucmV0dXJuIGhhcmRlbih7Li4uc3RvcmVLZXksc3Vic2NyaXB0aW9ufSk7XG4gfSxcbmdldFVuc2VyaWFsaXplcjooKT0+dW5zZXJpYWxpemVyLFxuZ2V0U2hhcmFibGVTdWJzY3JpcHRpb25JbnRlcm5hbHM6KCk9Plxuc3Vic2NyaXB0aW9uLmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzKCksXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zdWJzY3JpcHRpb25bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksXG5zdWJzY3JpYmVBZnRlcjoocHVibGlzaENvdW50KT0+c3Vic2NyaXB0aW9uLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCl9KTtcblxucmV0dXJuIHN0b3Jlc3ViO1xuIH07JGjNj19vbmNlLm1ha2VTdG9yZWRTdWJzY3JpcHRpb24obWFrZVN0b3JlZFN1YnNjcmlwdGlvbik7XG5oYXJkZW4obWFrZVN0b3JlZFN1YnNjcmlwdGlvbik7XG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRQdWJsaXNoZXJLaXQ9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIsY2hpbGRQYXRoKT0+e1xuY29uc3R7cHVibGljYXRpb24sc3Vic2NyaXB0aW9ufT1tYWtlU3Vic2NyaXB0aW9uS2l0KCk7XG5cbmlmKHN0b3JhZ2VOb2RlJiZjaGlsZFBhdGgpe1xuc3RvcmFnZU5vZGU9RShzdG9yYWdlTm9kZSkubWFrZUNoaWxkTm9kZShjaGlsZFBhdGgpO1xuIH1cblxuLy9cbmNvbnN0IHN1YnNjcmliZXI9bWFrZVN0b3JlZFN1YnNjcmlwdGlvbihcbnN1YnNjcmlwdGlvbixcbnN0b3JhZ2VOb2RlLFxubWFyc2hhbGxlcik7XG5cblxucmV0dXJue1xucHVibGlzaGVyOnB1YmxpY2F0aW9uLFxuc3Vic2NyaWJlcn07XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQobWFrZVN0b3JlZFB1Ymxpc2hlcktpdCk7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFB1Ymxpc2hLaXQ9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxucmV0dXJue1xucHVibGlzaGVyLFxuLy9cbnN1YnNjcmliZXI6bWFrZVN0b3JlZFN1YnNjcmliZXIoc3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKX07XG5cbiB9OyRozY9fb25jZS5tYWtlU3RvcmVkUHVibGlzaEtpdChtYWtlU3RvcmVkUHVibGlzaEtpdCk7XG5oYXJkZW4obWFrZVN0b3JlZFB1Ymxpc2hLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkIjpbImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCJdLCJtYWtlU3RvcmVkU3Vic2NyaWJlciI6WyJtYWtlU3RvcmVkU3Vic2NyaWJlciJdLCJtYWtlU3RvcmVkU3Vic2NyaXB0aW9uIjpbIm1ha2VTdG9yZWRTdWJzY3JpcHRpb24iXSwibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCI6WyJtYWtlU3RvcmVkUHVibGlzaGVyS2l0Il0sIm1ha2VTdG9yZWRQdWJsaXNoS2l0IjpbIm1ha2VTdG9yZWRQdWJsaXNoS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABUHXvMhEgAAIRIAACgAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3Vic2NyaWJlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qcyJdLCJleHBvcnRzIjpbInN1YnNjcmliZSIsInN1YnNjcmliZUVhY2giLCJzdWJzY3JpYmVMYXRlc3QiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxGYWlsLGFubm90YXRlRXJyb3IsRSxGYXIsaXNPYmplY3QsaXNVcGdyYWRlRGlzY29ubmVjdGlvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qc1wiLCBbW1wiaXNVcGdyYWRlRGlzY29ubmVjdGlvblwiLCBbJGjNj19hID0+IChpc1VwZ3JhZGVEaXNjb25uZWN0aW9uID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3Qgc2luaz0oKT0+eyB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHJlY29ubmVjdEFzTmVlZGVkPWFzeW5jKGdldHRlcixzZWVkPVtdKT0+e1xubGV0IGRpc2Nvbm5lY3Rpb247XG5sZXQgbGFzdFZlcnNpb249LUluZmluaXR5O1xuLy9cbmF3YWl0IG51bGw7XG5mb3IobGV0IGk9MDs7aSs9MSl7XG50cnl7XG5jb25zdCByZXN1bHRQPWk8c2VlZC5sZW5ndGg/c2VlZFtpXTpnZXR0ZXIoKTtcbmNvbnN0IHJlc3VsdD1hd2FpdCByZXN1bHRQO1xucmV0dXJuIHJlc3VsdDtcbiB9Y2F0Y2goZXJyKXtcbmlmKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24oZXJyKSl7XG5pZighZGlzY29ubmVjdGlvbil7XG5kaXNjb25uZWN0aW9uPWVycjtcbiB9XG5jb25zdHtpbmNhcm5hdGlvbk51bWJlcjp2ZXJzaW9ufT1lcnI7XG5pZih2ZXJzaW9uPmxhc3RWZXJzaW9uKXtcbi8vXG4vL1xuLy9cbmxhc3RWZXJzaW9uPXZlcnNpb247XG5jb250aW51ZTtcbiB9XG4gfVxuLy9cbi8vXG4vL1xuaWYoaXNPYmplY3QoZXJyKSYmZGlzY29ubmVjdGlvbiYmZGlzY29ubmVjdGlvbiE9PWVycil7XG50cnl7XG5hbm5vdGF0ZUVycm9yKFxuZXJyLFxuWCBgQXR0ZW1wdGluZyB0byByZWNvdmVyIGZyb20gZGlzY29ubmVjdGlvbjogJHtkaXNjb25uZWN0aW9ufWApO1xuXG4gfWNhdGNoKF9lcnIpe1xuLy9cbiB9XG4gfVxudGhyb3cgZXJyO1xuIH1cbiB9XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc3Vic2NyaWJlPShpdFApPT5cbkZhcignQXN5bmNJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+e1xuY29uc3QgaXQ9RShpdFApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuY29uc3Qgc2VsZj1GYXIoJ0FzeW5jSXRlcmFibGVJdGVyYXRvcicse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c2VsZixcbm5leHQ6YXN5bmMoKT0+RShpdCkubmV4dCgpfSk7XG5cbnJldHVybiBzZWxmO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLnN1YnNjcmliZShzdWJzY3JpYmUpO1xuY29uc3QgbWFrZUVhY2hJdGVyYXRvcj0odG9waWMsbmV4dENlbGxQKT0+e1xuLy9cbi8vXG5jb25zdCBzZWxmPUZhcignRWFjaEl0ZXJhdG9yJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDooKT0+e1xuY29uc3R7XG5oZWFkOnJlc3VsdFAsXG5wdWJsaXNoQ291bnQ6cHVibGlzaENvdW50UCxcbnRhaWw6dGFpbFB9PVxuRS5nZXQobmV4dENlbGxQKTtcblxuLy9cbi8vXG5jb25zdCBnZXRTdWNjZXNzb3I9YXN5bmMoKT0+e1xuY29uc3QgcHVibGlzaENvdW50PWF3YWl0IHB1Ymxpc2hDb3VudFA7XG5hc3NlcnQudHlwZW9mKHB1Ymxpc2hDb3VudCwnYmlnaW50Jyk7XG5jb25zdCBzdWNjZXNzb3I9YXdhaXQgRSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KTtcbmNvbnN0IG5ld1B1Ymxpc2hDb3VudD1zdWNjZXNzb3IucHVibGlzaENvdW50O1xuaWYobmV3UHVibGlzaENvdW50IT09cHVibGlzaENvdW50KzFuKXtcbkZhaWwgYGVhY2hJdGVyYXRvciBicm9rZW4gYnkgZ2FwIGZyb20gcHVibGlzaENvdW50ICR7cHVibGlzaENvdW50fSB0byAke25ld1B1Ymxpc2hDb3VudH1gO1xuIH1cbnJldHVybiBzdWNjZXNzb3I7XG4gfTtcblxuLy9cbi8vXG5uZXh0Q2VsbFA9cmVjb25uZWN0QXNOZWVkZWQoZ2V0U3VjY2Vzc29yLFt0YWlsUF0pO1xuXG4vL1xuLy9cbi8vXG4vL1xudm9pZCBFLndoZW4ocHVibGlzaENvdW50UCxzaW5rLHNpbmspO1xudm9pZCBFLndoZW4obmV4dENlbGxQLHNpbmssc2luayk7XG5yZXR1cm4gcmVzdWx0UDtcbiB9LFxuZm9yazooKT0+bWFrZUVhY2hJdGVyYXRvcih0b3BpYyxuZXh0Q2VsbFApfSk7XG5cbnJldHVybiBzZWxmO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc3Vic2NyaWJlRWFjaD0odG9waWMpPT57XG5jb25zdCBpdGVyYWJsZT1GYXIoJ0VhY2hJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+e1xuY29uc3QgZmlyc3RDZWxsUD1yZWNvbm5lY3RBc05lZWRlZCgoKT0+RSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIoKSk7XG5yZXR1cm4gbWFrZUVhY2hJdGVyYXRvcih0b3BpYyxmaXJzdENlbGxQKTtcbiB9fSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRozY9fb25jZS5zdWJzY3JpYmVFYWNoKHN1YnNjcmliZUVhY2gpO1xuaGFyZGVuKHN1YnNjcmliZUVhY2gpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2xvbmVMYXRlc3RJdGVyYXRvcj0odG9waWMsbG9jYWxVcGRhdGVDb3VudCx0ZXJtaW5hbFJlc3VsdCk9PntcbmxldCBtdXRleD1Qcm9taXNlLnJlc29sdmUoKTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlUmVxdWVzdE5leHRSZXN1bHQ9YXN5bmMoKT0+e1xuaWYodGVybWluYWxSZXN1bHQpe1xuLy9cbi8vXG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxuXG4vL1xuLy9cbmNvbnN0e3ZhbHVlLHVwZGF0ZUNvdW50fT1hd2FpdCByZWNvbm5lY3RBc05lZWRlZCgoKT0+XG5FKHRvcGljKS5nZXRVcGRhdGVTaW5jZShsb2NhbFVwZGF0ZUNvdW50KSk7XG5cbi8vXG5sb2NhbFVwZGF0ZUNvdW50PXVwZGF0ZUNvdW50O1xuXG4vL1xuaWYodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpe1xudGVybWluYWxSZXN1bHQ9aGFyZGVuKHtkb25lOnRydWUsdmFsdWV9KTtcbnJldHVybiB0ZXJtaW5hbFJlc3VsdDtcbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfTtcblxuY29uc3Qgc2VsZj1GYXIoJ0xhdGVzdEl0ZXJhdG9yJyx7XG5mb3JrOigpPT5jbG9uZUxhdGVzdEl0ZXJhdG9yKHRvcGljLGxvY2FsVXBkYXRlQ291bnQsdGVybWluYWxSZXN1bHQpLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c2VsZixcbm5leHQ6YXN5bmMoKT0+e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5pZih0ZXJtaW5hbFJlc3VsdCl7XG4vL1xuLy9cbnJldHVybiB0ZXJtaW5hbFJlc3VsdDtcbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBuZXh0UmVzdWx0PW11dGV4LnRoZW4obWF5YmVSZXF1ZXN0TmV4dFJlc3VsdCk7XG5tdXRleD1uZXh0UmVzdWx0LnRoZW4oc2luayxzaW5rKTtcbi8vXG5cbnJldHVybiBuZXh0UmVzdWx0O1xuIH19KTtcblxucmV0dXJuIHNlbGY7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZUxhdGVzdEl0ZXJhdG9yPSh0b3BpYyk9PmNsb25lTGF0ZXN0SXRlcmF0b3IodG9waWMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHN1YnNjcmliZUxhdGVzdD0odG9waWMpPT57XG5jb25zdCBpdGVyYWJsZT1GYXIoJ0xhdGVzdEl0ZXJhYmxlJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5tYWtlTGF0ZXN0SXRlcmF0b3IodG9waWMpfSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRozY9fb25jZS5zdWJzY3JpYmVMYXRlc3Qoc3Vic2NyaWJlTGF0ZXN0KTtcbmhhcmRlbihzdWJzY3JpYmVMYXRlc3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic3Vic2NyaWJlIjpbInN1YnNjcmliZSJdLCJzdWJzY3JpYmVFYWNoIjpbInN1YnNjcmliZUVhY2giXSwic3Vic2NyaWJlTGF0ZXN0IjpbInN1YnNjcmliZUxhdGVzdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHaHtf0QcAANEHAAApAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N1YnNjcmliZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiLi9zdWJzY3JpYmUuanMiLCIuL3B1Ymxpc2gta2l0LmpzIiwiLi90b3BpYy5qcyJdLCJleHBvcnRzIjpbIm1ha2VTdWJzY3JpcHRpb24iLCJtYWtlU3Vic2NyaXB0aW9uS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLHN1YnNjcmliZUVhY2gsbWFrZVB1Ymxpc2hLaXQsbWFrZVBpbm5lZEhpc3RvcnlUb3BpYzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlRWFjaFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVFYWNoID0gJGjNj19hKV1dXV0sW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbW1wibWFrZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3RvcGljLmpzXCIsIFtbXCJtYWtlUGlubmVkSGlzdG9yeVRvcGljXCIsIFskaM2PX2EgPT4gKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTdWJzY3JpcHRpb249KHRvcGljKT0+e1xuY29uc3Qgc3Vic2NyaXB0aW9uPUZhcignU3Vic2NyaXB0aW9uJyx7XG4uLi5zdWJzY3JpYmVFYWNoKHRvcGljKSxcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudCk9PkUodG9waWMpLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzOmFzeW5jKCk9PnRvcGljLFxuXG5nZXRTdG9yZUtleTooKT0+aGFyZGVuKHtzdWJzY3JpcHRpb259KX0pO1xuXG5yZXR1cm4gc3Vic2NyaXB0aW9uO1xuIH07JGjNj19vbmNlLm1ha2VTdWJzY3JpcHRpb24obWFrZVN1YnNjcmlwdGlvbik7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbik7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlU3Vic2NyaXB0aW9uS2l0PSgpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuLy9cbi8vXG5cbmNvbnN0IHBpbm5lZEhpc3RvcnlUb3BpYz1tYWtlUGlubmVkSGlzdG9yeVRvcGljKHN1YnNjcmliZXIpO1xuY29uc3Qgc3Vic2NyaXB0aW9uPW1ha2VTdWJzY3JpcHRpb24ocGlubmVkSGlzdG9yeVRvcGljKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1YmxpY2F0aW9uPUZhcigncHVibGljYXRpb24nLHtcbnVwZGF0ZVN0YXRlOihub25GaW5hbFZhbHVlKT0+cHVibGlzaGVyLnB1Ymxpc2gobm9uRmluYWxWYWx1ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe3B1YmxpY2F0aW9uLHN1YnNjcmlwdGlvbn0pO1xuIH07JGjNj19vbmNlLm1ha2VTdWJzY3JpcHRpb25LaXQobWFrZVN1YnNjcmlwdGlvbktpdCk7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3Vic2NyaXB0aW9uIjpbIm1ha2VTdWJzY3JpcHRpb24iXSwibWFrZVN1YnNjcmlwdGlvbktpdCI6WyJtYWtlU3Vic2NyaXB0aW9uS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEdaGtrtAwAA7QMAACQAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvdG9waWMuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIl0sImV4cG9ydHMiOlsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQaW5uZWRIaXN0b3J5VG9waWM9KHRvcGljKT0+e1xuLy9cblxuLy9cbmNvbnN0IHBpbm5lZFB1Ykxpc3Q9dG9waWMuc3Vic2NyaWJlQWZ0ZXIoKTtcblxucmV0dXJuIEZhcignUGlubmVkSGlzdG9yeVRvcGljJyx7XG5zdWJzY3JpYmVBZnRlcjphc3luYyhwdWJsaXNoQ291bnQ9LTFuKT0+e1xuaWYocHVibGlzaENvdW50PT09LTFuKXtcbnJldHVybiBwaW5uZWRQdWJMaXN0O1xuIH1cbnJldHVybiB0b3BpYy5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpO1xuIH0sXG5nZXRVcGRhdGVTaW5jZTphc3luYyh1cGRhdGVDb3VudD11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuIHRvcGljLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KTtcbiB9fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlUGlubmVkSGlzdG9yeVRvcGljKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMpO1xuaGFyZGVuKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyI6WyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACoAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMhA0AaUDQAAlA0AACEAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiLCIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzIiwiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanMiLCJAZW5kby9leG8iLCIuL2xlZ2FjeS9sZWdhY3lNYXAuanMiLCIuL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzIiwiLi90eXBlcy5qcyJdLCJleHBvcnRzIjpbImFzc2VydEtleSIsImFzc2VydEtleSIsImRlZmluZUV4b0NsYXNzIiwiZGVmaW5lRXhvQ2xhc3MiLCJtdXN0TWF0Y2giLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCB0eXBlbGVzc011c3RNYXRjaDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAodHlwZWxlc3NNdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXSxbXCIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qc1wiLCBbXV0sW1wiQGVuZG8vZXhvXCIsIFtdXSxbXCIuL2xlZ2FjeS9sZWdhY3lNYXAuanNcIiwgW11dLFtcIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanNcIiwgW11dLFtcIi4vdHlwZXMuanNcIiwgW11dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbXVzdE1hdGNoPXR5cGVsZXNzTXVzdE1hdGNoOyRozY9fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyI6W1sibWFrZVNjYWxhcldlYWtTZXRTdG9yZSIsIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXV0sIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIjpbWyJtYWtlU2NhbGFyU2V0U3RvcmUiLCJtYWtlU2NhbGFyU2V0U3RvcmUiXV0sIi4vc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyI6W1sibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiXV0sIi4vc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzIjpbWyJtYWtlU2NhbGFyTWFwU3RvcmUiLCJtYWtlU2NhbGFyTWFwU3RvcmUiXV0sIi4vc3RvcmVzL3N0b3JlLXV0aWxzLmpzIjpbWyJwcm92aWRlTGF6eSIsInByb3ZpZGVMYXp5Il1dLCJAZW5kby9wYXR0ZXJucyI6W1siaXNLZXkiLCJpc0tleSJdLFsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5Il0sWyJhc3NlcnRTY2FsYXJLZXkiLCJhc3NlcnRTY2FsYXJLZXkiXSxbIm1ha2VDb3B5U2V0IiwibWFrZUNvcHlTZXQiXSxbImdldENvcHlTZXRLZXlzIiwiZ2V0Q29weVNldEtleXMiXSxbIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWciXSxbIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSxbImdldENvcHlCYWdFbnRyaWVzIiwiZ2V0Q29weUJhZ0VudHJpZXMiXSxbIm1ha2VDb3B5TWFwIiwibWFrZUNvcHlNYXAiXSxbImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJpZXMiXSxbImNvZXJjZVRvRWxlbWVudHMiLCJjb2VyY2VUb0VsZW1lbnRzIl0sWyJjb2VyY2VUb0JhZ0VudHJpZXMiLCJjb2VyY2VUb0JhZ0VudHJpZXMiXSxbImNvbXBhcmVLZXlzIiwiY29tcGFyZUtleXMiXSxbImtleUxUIiwia2V5TFQiXSxbImtleUxURSIsImtleUxURSJdLFsia2V5RVEiLCJrZXlFUSJdLFsia2V5R1RFIiwia2V5R1RFIl0sWyJrZXlHVCIsImtleUdUIl0sWyJlbGVtZW50c0lzU3VwZXJzZXQiLCJlbGVtZW50c0lzU3VwZXJzZXQiXSxbImVsZW1lbnRzSXNEaXNqb2ludCIsImVsZW1lbnRzSXNEaXNqb2ludCJdLFsiZWxlbWVudHNDb21wYXJlIiwiZWxlbWVudHNDb21wYXJlIl0sWyJlbGVtZW50c1VuaW9uIiwiZWxlbWVudHNVbmlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFVuaW9uIiwiZWxlbWVudHNEaXNqb2ludFVuaW9uIl0sWyJlbGVtZW50c0ludGVyc2VjdGlvbiIsImVsZW1lbnRzSW50ZXJzZWN0aW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QiLCJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QiXSxbInNldElzU3VwZXJzZXQiLCJzZXRJc1N1cGVyc2V0Il0sWyJzZXRJc0Rpc2pvaW50Iiwic2V0SXNEaXNqb2ludCJdLFsic2V0Q29tcGFyZSIsInNldENvbXBhcmUiXSxbInNldFVuaW9uIiwic2V0VW5pb24iXSxbInNldERpc2pvaW50VW5pb24iLCJzZXREaXNqb2ludFVuaW9uIl0sWyJzZXRJbnRlcnNlY3Rpb24iLCJzZXRJbnRlcnNlY3Rpb24iXSxbInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFN1YnRyYWN0Il0sWyJiYWdJc1N1cGVyYmFnIiwiYmFnSXNTdXBlcmJhZyJdLFsiYmFnQ29tcGFyZSIsImJhZ0NvbXBhcmUiXSxbImJhZ1VuaW9uIiwiYmFnVW5pb24iXSxbImJhZ0ludGVyc2VjdGlvbiIsImJhZ0ludGVyc2VjdGlvbiJdLFsiYmFnRGlzam9pbnRTdWJ0cmFjdCIsImJhZ0Rpc2pvaW50U3VidHJhY3QiXSxbIk0iLCJNIl0sWyJnZXRSYW5rQ292ZXIiLCJnZXRSYW5rQ292ZXIiXSxbImlzUGF0dGVybiIsImlzUGF0dGVybiJdLFsiYXNzZXJ0UGF0dGVybiIsImFzc2VydFBhdHRlcm4iXSxbIm1hdGNoZXMiLCJtYXRjaGVzIl0sWyJpc0NvcHlTZXQiLCJpc0NvcHlTZXQiXSxbImlzQ29weU1hcCIsImlzQ29weU1hcCJdXSwiQGVuZG8vZXhvIjpbWyJpbml0RW1wdHkiLCJpbml0RW1wdHkiXSxbImRlZmluZUV4b0NsYXNzIiwiZGVmaW5lRXhvQ2xhc3MiXSxbImRlZmluZUV4b0NsYXNzS2l0IiwiZGVmaW5lRXhvQ2xhc3NLaXQiXSxbIm1ha2VFeG8iLCJtYWtlRXhvIl1dLCIuL2xlZ2FjeS9sZWdhY3lNYXAuanMiOltbIm1ha2VMZWdhY3lNYXAiLCJtYWtlTGVnYWN5TWFwIl1dLCIuL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzIjpbWyJtYWtlTGVnYWN5V2Vha01hcCIsIm1ha2VMZWdhY3lXZWFrTWFwIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im11c3RNYXRjaCI6WyJtdXN0TWF0Y2giXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8CKrrjUFAAA1BQAALAAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9sZWdhY3kvbGVnYWN5TWFwLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VMZWdhY3lNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUxlZ2FjeU1hcD0odGFnPSdrZXknKT0+e1xuY29uc3QgbT1uZXcgTWFwKCk7XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIW0uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxubS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IG5vdCBmb3VuZDogJHtrZXl9YDtcbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4gbS5oYXMoa2V5KTtcbiB9LFxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5tLnNldChrZXksdmFsdWUpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xucmV0dXJuIG0uZ2V0KGtleSk7XG4gfSxcbnNldDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5tLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xubS5kZWxldGUoa2V5KTtcbiB9LFxua2V5czooKT0+bS5rZXlzKCksXG52YWx1ZXM6KCk9Pm0udmFsdWVzKCksXG5lbnRyaWVzOigpPT5tLmVudHJpZXMoKSxcbmdldFNpemU6KCk9Pm0uc2l6ZSxcbmNsZWFyOigpPT5tLmNsZWFyKCl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VMZWdhY3lNYXAobWFrZUxlZ2FjeU1hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeU1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTGVnYWN5TWFwIjpbIm1ha2VMZWdhY3lNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAusRN7fcEAAD3BAAAMAAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlTGVnYWN5V2Vha01hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUxlZ2FjeVdlYWtNYXA9KHRhZz0na2V5Jyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdtPW5ldyBXZWFrTWFwKCk7XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIXdtLmhhcyhrZXkpfHxGYWlsIGAke3EodGFnKX0gYWxyZWFkeSByZWdpc3RlcmVkOiAke2tleX1gO1xuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbndtLmhhcyhrZXkpfHxGYWlsIGAke3EodGFnKX0gbm90IGZvdW5kOiAke2tleX1gO1xucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiB3bS5oYXMoa2V5KTtcbiB9LFxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG53bS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi93bS5nZXQoa2V5KSk7XG4gfSxcbnNldDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG53bS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbndtLmRlbGV0ZShrZXkpO1xuIH19KTtcblxuIH07JGjNj19vbmNlLm1ha2VMZWdhY3lXZWFrTWFwKG1ha2VMZWdhY3lXZWFrTWFwKTtcbmhhcmRlbihtYWtlTGVnYWN5V2Vha01hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTGVnYWN5V2Vha01hcCI6WyJtYWtlTGVnYWN5V2Vha01hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA7XjyCnBAAAJwQAAAxAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIiwiLi9zY2FsYXJXZWFrTWFwU3RvcmUuanMiLCIuL3N0b3JlLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsibWFrZU1hcFN0b3JlTWV0aG9kcyIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhcixhc3NlcnRQYXNzYWJsZSxmaWx0ZXJJdGVyYWJsZSxtYXBJdGVyYWJsZSxjb21wYXJlUmFuayxhc3NlcnRTY2FsYXJLZXksbWFrZUNvcHlNYXAsbWF0Y2hlcyxtdXN0TWF0Y2gsYXNzZXJ0UGF0dGVybixtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyxtYWtlQ3VycmVudEtleXNLaXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV0sW1wiZmlsdGVySXRlcmFibGVcIiwgWyRozY9fYSA9PiAoZmlsdGVySXRlcmFibGUgPSAkaM2PX2EpXV0sW1wibWFwSXRlcmFibGVcIiwgWyRozY9fYSA9PiAobWFwSXRlcmFibGUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJjb21wYXJlUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlUmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJhc3NlcnRTY2FsYXJLZXlcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2NhbGFyS2V5ID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5TWFwXCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5TWFwID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXV1dLFtcIi4vc2NhbGFyV2Vha01hcFN0b3JlLmpzXCIsIFtbXCJtYWtlV2Vha01hcFN0b3JlTWV0aG9kc1wiLCBbJGjNj19hID0+IChtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyA9ICRozY9fYSldXV1dLFtcIi4vc3RvcmUtdXRpbHMuanNcIiwgW1tcIm1ha2VDdXJyZW50S2V5c0tpdFwiLCBbJGjNj19hID0+IChtYWtlQ3VycmVudEtleXNLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWFwU3RvcmVNZXRob2RzPShcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG50YWc9J2tleScpPT5cbntcbmNvbnN0e2Fzc2VydFVwZGF0ZU9uQWRkLGFzc2VydFVwZGF0ZU9uRGVsZXRlLGl0ZXJhYmxlS2V5c309XG5tYWtlQ3VycmVudEtleXNLaXQoXG4oKT0+anNtYXAua2V5cygpLFxuKGspPT5qc21hcC5oYXMoayksXG5jb21wYXJlUmFuayxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtleU9rVG9EZWxldGUsXG50YWcpO1xuXG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3Qga2V5cz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PntcbmlmKGtleVBhdHQ9PT11bmRlZmluZWQmJnZhbHVlUGF0dD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gaXRlcmFibGVLZXlzO1xuIH1cbmNvbnN0IGZpbHRlcj0oayk9PntcbmlmKGtleVBhdHQhPT11bmRlZmluZWQmJiFtYXRjaGVzKGssa2V5UGF0dCkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbi8vXG5pZih2YWx1ZVBhdHQhPT11bmRlZmluZWQmJiFtYXRjaGVzKGpzbWFwLmdldChrKSx2YWx1ZVBhdHQpKXtcbnJldHVybiBmYWxzZTtcbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xucmV0dXJuIGZpbHRlckl0ZXJhYmxlKGl0ZXJhYmxlS2V5cyxmaWx0ZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgdmFsdWVzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYXBJdGVyYWJsZShrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSwoayk9Pi8qICAgICAgICAgICAgKi9qc21hcC5nZXQoaykpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGVudHJpZXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbm1hcEl0ZXJhYmxlKGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpLChrKT0+W1xuayxcbi8qICAgICAgICAgICAgKi9qc21hcC5nZXQoayldKTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbi4uLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKFxuanNtYXAsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2Fzc2VydFVwZGF0ZU9uQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxuYXNzZXJ0VXBkYXRlT25EZWxldGUsXG50YWcpLFxuXG5rZXlzLFxudmFsdWVzLFxuZW50cmllcyxcblxuc25hcHNob3Q6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbm1ha2VDb3B5TWFwKGVudHJpZXMoa2V5UGF0dCx2YWx1ZVBhdHQpKSxcblxuZ2V0U2l6ZTooa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9Plxua2V5UGF0dD09PXVuZGVmaW5lZCYmdmFsdWVQYXR0PT09dW5kZWZpbmVkP1xuanNtYXAuc2l6ZTpcblsuLi5rZXlzKGtleVBhdHQsdmFsdWVQYXR0KV0ubGVuZ3RoLFxuXG5jbGVhcjooa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PntcbmlmKGtleVBhdHQ9PT11bmRlZmluZWQmJnZhbHVlUGF0dD09PXVuZGVmaW5lZCl7XG5qc21hcC5jbGVhcigpO1xuIH1cbmZvcihjb25zdCBrZXkgb2Yga2V5cyhrZXlQYXR0LHZhbHVlUGF0dCkpe1xuanNtYXAuZGVsZXRlKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlTWFwU3RvcmVNZXRob2RzKG1ha2VNYXBTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJNYXBTdG9yZT0oXG50YWc9J2tleScsXG57a2V5U2hhcGU9dW5kZWZpbmVkLHZhbHVlU2hhcGU9dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QganNtYXA9bmV3IE1hcCgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKHZhbHVlU2hhcGUpO1xuIH1cblxuY29uc3QgYXNzZXJ0S1ZPa1RvU2V0PShfa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4odmFsdWUpO1xuXG5hc3NlcnRQYXNzYWJsZSh2YWx1ZSk7XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlLCdtYXBTdG9yZSB2YWx1ZScpO1xuIH1cbiB9O1xuXG5jb25zdCBhc3NlcnRLVk9rVG9BZGQ9KGtleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5cbmFzc2VydFNjYWxhcktleShrZXkpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnbWFwU3RvcmUga2V5Jyk7XG4gfVxuYXNzZXJ0S1ZPa1RvU2V0KGtleSx2YWx1ZSk7XG4gfTtcblxucmV0dXJuIEZhciggYHNjYWxhciBNYXBTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VNYXBTdG9yZU1ldGhvZHMoXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbnVuZGVmaW5lZCxcbnRhZyl9KTtcblxuXG4gfTskaM2PX29uY2UubWFrZVNjYWxhck1hcFN0b3JlKG1ha2VTY2FsYXJNYXBTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhck1hcFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNYXBTdG9yZU1ldGhvZHMiOlsibWFrZU1hcFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyTWFwU3RvcmUiOlsibWFrZVNjYWxhck1hcFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJgs3yXNCwAAzQsAADEAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiLCIuL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmUtdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyU2V0U3RvcmUiLCJtYWtlU2V0U3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFyLGZpbHRlckl0ZXJhYmxlLGNvbXBhcmVSYW5rLGFzc2VydFNjYWxhcktleSxtYWtlQ29weVNldCxtYXRjaGVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzLG1ha2VDdXJyZW50S2V5c0tpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjNj19hID0+IChmaWx0ZXJJdGVyYWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImFzc2VydFNjYWxhcktleVwiLCBbJGjNj19hID0+IChhc3NlcnRTY2FsYXJLZXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlTZXQgPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanNcIiwgW1tcIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzXCIsIFskaM2PX2EgPT4gKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZS11dGlscy5qc1wiLCBbW1wibWFrZUN1cnJlbnRLZXlzS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VDdXJyZW50S2V5c0tpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNldFN0b3JlTWV0aG9kcz0oXG5qc3NldCxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0e2Fzc2VydFVwZGF0ZU9uQWRkLGFzc2VydFVwZGF0ZU9uRGVsZXRlLGl0ZXJhYmxlS2V5c309XG5tYWtlQ3VycmVudEtleXNLaXQoXG4oKT0+anNzZXQua2V5cygpLFxuKGspPT5qc3NldC5oYXMoayksXG5jb21wYXJlUmFuayxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxua2V5TmFtZSk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qga2V5cz0oa2V5UGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQ/XG5pdGVyYWJsZUtleXM6XG5maWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsKGspPT5tYXRjaGVzKGssa2V5UGF0dCkpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKFxuanNzZXQsXG5hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxua2V5TmFtZSksXG5cblxua2V5cyxcblxudmFsdWVzOmtleXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCk9Pm1ha2VDb3B5U2V0KGtleXMoa2V5UGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCk9Plxua2V5UGF0dD09PXVuZGVmaW5lZD9qc3NldC5zaXplOlsuLi5rZXlzKGtleVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCk9PntcbmlmKGtleVBhdHQ9PT11bmRlZmluZWQpe1xuanNzZXQuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCkpe1xuanNzZXQuZGVsZXRlKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTZXRTdG9yZU1ldGhvZHMobWFrZVNldFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhclNldFN0b3JlPShcbnRhZz0na2V5JyxcbntrZXlTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc3NldD1uZXcgU2V0KCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5cbmFzc2VydFNjYWxhcktleShrZXkpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnc2V0U3RvcmUga2V5Jyk7XG4gfVxuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgU2V0U3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJTZXRTdG9yZShtYWtlU2NhbGFyU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU2V0U3RvcmVNZXRob2RzIjpbIm1ha2VTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhclNldFN0b3JlIjpbIm1ha2VTY2FsYXJTZXRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADpDjncsA0AALANAAA1AAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxGYXIsYXNzZXJ0UGFzc2FibGUscGFzc1N0eWxlT2YsZ2V0Q29weU1hcEVudHJpZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4saXNDb3B5TWFwOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRDb3B5TWFwRW50cmllc1wiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwRW50cmllcyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXSxbXCJpc0NvcHlNYXBcIiwgWyRozY9fYSA9PiAoaXNDb3B5TWFwID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtNYXBTdG9yZU1ldGhvZHM9KFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0IGFzc2VydEtleURvZXNOb3RFeGlzdD0oa2V5KT0+XG4hanNtYXAuaGFzKGtleSl8fEZhaWwgYCR7cShrZXlOYW1lKX0gYWxyZWFkeSByZWdpc3RlcmVkOiAke2tleX1gO1xuXG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxuanNtYXAuaGFzKGtleSl8fEZhaWwgYCR7cShrZXlOYW1lKX0gbm90IGZvdW5kOiAke2tleX1gO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIGpzbWFwLmhhcyhrZXkpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuLy9cbnJldHVybiAoLyogICAgICAgICAgICAqL2pzbWFwLmdldChrZXkpKTtcbiB9LFxuXG5pbml0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlEb2VzTm90RXhpc3Qoa2V5KTtcbmFzc2VydEtWT2tUb0FkZChrZXksdmFsdWUpO1xuanNtYXAuc2V0KGtleSx2YWx1ZSk7XG4gfSxcbnNldDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuaWYoYXNzZXJ0S2V5T2tUb0RlbGV0ZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRLZXlPa1RvRGVsZXRlKGtleSk7XG4gfVxuanNtYXAuZGVsZXRlKGtleSk7XG4gfSxcblxuYWRkQWxsOihlbnRyaWVzKT0+e1xuaWYodHlwZW9mIGVudHJpZXNbU3ltYm9sLml0ZXJhdG9yXSE9PSdmdW5jdGlvbicpe1xuaWYoT2JqZWN0LmlzRnJvemVuKGVudHJpZXMpJiZpc0NvcHlNYXAoZW50cmllcykpe1xuLy9cbmVudHJpZXM9Z2V0Q29weU1hcEVudHJpZXMoZW50cmllcyk7XG4gfWVsc2V7XG5GYWlsIGBwcm92aWRlZCBkYXRhIHNvdXJjZSBpcyBub3QgaXRlcmFibGU6ICR7ZW50cmllc31gO1xuIH1cbiB9XG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL2VudHJpZXMpe1xuLy9cbmFzc2VydEtWT2tUb0FkZChrZXksdmFsdWUpO1xuanNtYXAuc2V0KGtleSx2YWx1ZSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlV2Vha01hcFN0b3JlTWV0aG9kcyhtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhcldlYWtNYXBTdG9yZT0oXG50YWc9J2tleScsXG57bG9uZ0xpdmVkPXRydWUsa2V5U2hhcGU9dW5kZWZpbmVkLHZhbHVlU2hhcGU9dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QganNtYXA9bmV3KGxvbmdMaXZlZD9XZWFrTWFwOk1hcCkoKTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oa2V5U2hhcGUpO1xuIH1cbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybih2YWx1ZVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtWT2tUb1NldD0oX2tleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKHZhbHVlKTtcblxuYXNzZXJ0UGFzc2FibGUodmFsdWUpO1xuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSwnd2Vha01hcFN0b3JlIHZhbHVlJyk7XG4gfVxuIH07XG5cbmNvbnN0IGFzc2VydEtWT2tUb0FkZD0oa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4oa2V5KTtcbnBhc3NTdHlsZU9mKGtleSk9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGBPbmx5IHJlbW90YWJsZXMgY2FuIGJlIGtleXMgb2Ygc2NhbGFyIFdlYWtNYXBTdG9yZXM6ICR7a2V5fWA7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2goa2V5LGtleVNoYXBlLCd3ZWFrTWFwU3RvcmUga2V5Jyk7XG4gfVxuYXNzZXJ0S1ZPa1RvU2V0KGtleSx2YWx1ZSk7XG4gfTtcblxucmV0dXJuIEZhciggYHNjYWxhciBXZWFrTWFwU3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlV2Vha01hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxudW5kZWZpbmVkLFxudGFnKX0pO1xuXG5cbiB9OyRozY9fb25jZS5tYWtlU2NhbGFyV2Vha01hcFN0b3JlKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMiOlsibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhcldlYWtNYXBTdG9yZSI6WyJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFR9JxVzCgAAcwoAADUAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIiwibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLEZhcixwYXNzU3R5bGVPZixnZXRDb3B5U2V0S2V5cyxtdXN0TWF0Y2gsYXNzZXJ0UGF0dGVybixpc0NvcHlTZXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImdldENvcHlTZXRLZXlzXCIsIFskaM2PX2EgPT4gKGdldENvcHlTZXRLZXlzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dLFtcImlzQ29weVNldFwiLCBbJGjNj19hID0+IChpc0NvcHlTZXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha1NldFN0b3JlTWV0aG9kcz0oXG5qc3NldCxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG5qc3NldC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5cbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4ganNzZXQuaGFzKGtleSk7XG4gfSxcblxuYWRkOihrZXkpPT57XG5hc3NlcnRLZXlPa1RvQWRkKGtleSk7XG5qc3NldC5hZGQoa2V5KTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmlmKGFzc2VydEtleU9rVG9EZWxldGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0S2V5T2tUb0RlbGV0ZShrZXkpO1xuIH1cbmpzc2V0LmRlbGV0ZShrZXkpO1xuIH0sXG5cbmFkZEFsbDooa2V5cyk9PntcbmlmKHR5cGVvZiBrZXlzW1N5bWJvbC5pdGVyYXRvcl0hPT0nZnVuY3Rpb24nKXtcbmlmKE9iamVjdC5pc0Zyb3plbihrZXlzKSYmaXNDb3B5U2V0KGtleXMpKXtcbi8vXG5rZXlzPWdldENvcHlTZXRLZXlzKGtleXMpO1xuIH1lbHNle1xuRmFpbCBgcHJvdmlkZWQgZGF0YSBzb3VyY2UgaXMgbm90IGl0ZXJhYmxlOiAke2tleXN9YDtcbiB9XG4gfVxuZm9yKGNvbnN0IGtleSBvZi8qICAgICAgICAgICAgICAgICAgICAgICova2V5cyl7XG5hc3NlcnRLZXlPa1RvQWRkKGtleSk7XG5qc3NldC5hZGQoa2V5KTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlV2Vha1NldFN0b3JlTWV0aG9kcyhtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhcldlYWtTZXRTdG9yZT0oXG50YWc9J2tleScsXG57bG9uZ0xpdmVkPXRydWUsa2V5U2hhcGU9dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QganNzZXQ9bmV3KGxvbmdMaXZlZD9XZWFrU2V0OlNldCkoKTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oa2V5U2hhcGUpO1xuIH1cblxuY29uc3QgYXNzZXJ0S2V5T2tUb0FkZD0oa2V5KT0+e1xuLy9cbi8vXG5oYXJkZW4oa2V5KTtcbnBhc3NTdHlsZU9mKGtleSk9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGBPbmx5IHJlbW90YWJsZXMgY2FuIGJlIGtleXMgb2Ygc2NhbGFyIFdlYWtTdG9yZXM6ICR7a2V5fWA7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2goa2V5LGtleVNoYXBlLCd3ZWFrU2V0U3RvcmUga2V5Jyk7XG4gfVxuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgV2Vha1NldFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMoanNzZXQsYXNzZXJ0S2V5T2tUb0FkZCx1bmRlZmluZWQsdGFnKX0pO1xuXG4gfTskaM2PX29uY2UubWFrZVNjYWxhcldlYWtTZXRTdG9yZShtYWtlU2NhbGFyV2Vha1NldFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyV2Vha1NldFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXZWFrU2V0U3RvcmVNZXRob2RzIjpbIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiOlsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB52wuHqw4AAKsOAAAuAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJhcHBlbmRUb1N0b3JlZEFycmF5IiwiaXNDb3B5TWFwIiwiaXNDb3B5U2V0IiwibWFrZUF0b21pY1Byb3ZpZGVyIiwibWFrZUN1cnJlbnRLZXlzS2l0IiwicHJvdmlkZUxhenkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEZhcixNLG1hdGNoZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9Pm1hdGNoZXMocyxNLnNldCgpKTtcblxuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9Pm1hdGNoZXMobSxNLm1hcCgpKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzQ29weU1hcChpc0NvcHlNYXApO1xuY29uc3QgICAgICAgIG1ha2VDdXJyZW50S2V5c0tpdD0oXG5nZXRSYXdLZXlzLFxuY2hlY2tIYXMsXG5jb21wYXJlLFxuYXNzZXJ0T2tUb0FkZCxcbmFzc2VydE9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xubGV0IHVwZGF0ZUNvdW50PTA7XG5sZXQgc29ydGVkS2V5c01lbW87XG5cbmNvbnN0IGFzc2VydFVwZGF0ZU9uQWRkPShrLHY9dW5kZWZpbmVkKT0+e1xuYXNzZXJ0T2tUb0FkZChrLHYpO1xudXBkYXRlQ291bnQrPTE7XG5zb3J0ZWRLZXlzTWVtbz11bmRlZmluZWQ7XG4gfTtcblxuY29uc3QgYXNzZXJ0VXBkYXRlT25EZWxldGU9KGspPT5hc3NlcnRPa1RvRGVsZXRlJiZhc3NlcnRPa1RvRGVsZXRlKGspO1xuXG5jb25zdCBnZXRTb3J0ZWRLZXlzPSgpPT57XG5pZihzb3J0ZWRLZXlzTWVtbz09PXVuZGVmaW5lZCl7XG5zb3J0ZWRLZXlzTWVtbz1oYXJkZW4oWy4uLmdldFJhd0tleXMoKV0uc29ydChjb21wYXJlKSk7XG4gfVxucmV0dXJuIHNvcnRlZEtleXNNZW1vO1xuIH07XG5cbmNvbnN0IGl0ZXJhYmxlS2V5cz1GYXIoJ0l0ZXJhYmxlIG9mIGtleXMnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBnZW5lcmF0aW9uPXVwZGF0ZUNvdW50O1xuZ2V0U29ydGVkS2V5cygpO1xuY29uc3QgbGVuPXNvcnRlZEtleXNNZW1vLmxlbmd0aDtcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdJdGVyYXRvciBvZiBrZXlzJyx7XG5uZXh0OigpPT57XG5nZW5lcmF0aW9uPT09dXBkYXRlQ291bnR8fEZhaWwgYFN0b3JlICR7cShrZXlOYW1lKX0gY3Vyc29yIHN0YWxlYDtcbi8vXG4vL1xuZm9yKDs7KXtcbmlmKGk8bGVuKXtcbmNvbnN0IHZhbHVlPXNvcnRlZEtleXNNZW1vW2ldO1xuaSs9MTtcbmlmKGNoZWNrSGFzKHZhbHVlKSl7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH1cbiB9XG4gfX0pO1xuXG4gfX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbml0ZXJhYmxlS2V5c30pO1xuXG4gfTskaM2PX29uY2UubWFrZUN1cnJlbnRLZXlzS2l0KG1ha2VDdXJyZW50S2V5c0tpdCk7XG5oYXJkZW4obWFrZUN1cnJlbnRLZXlzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJvdmlkZUxhenk9KG1hcFN0b3JlLGtleSxtYWtlVmFsdWUpPT57XG5pZighbWFwU3RvcmUuaGFzKGtleSkpe1xubWFwU3RvcmUuaW5pdChrZXksbWFrZVZhbHVlKGtleSkpO1xuIH1cbnJldHVybiBtYXBTdG9yZS5nZXQoa2V5KTtcbiB9OyRozY9fb25jZS5wcm92aWRlTGF6eShwcm92aWRlTGF6eSk7XG5oYXJkZW4ocHJvdmlkZUxhenkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXRvbWljUHJvdmlkZXI9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwZW5kaW5nPW5ldyBNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUFzeW5jPShrZXksbWFrZVZhbHVlLGZpbmlzaFZhbHVlKT0+e1xuaWYoc3RvcmUuaGFzKGtleSkpe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShzdG9yZS5nZXQoa2V5KSk7XG4gfVxuaWYoIXBlbmRpbmcuaGFzKGtleSkpe1xuY29uc3QgdmFsUD1tYWtlVmFsdWUoa2V5KS5cbnRoZW4oKHYpPT57XG5zdG9yZS5pbml0KGtleSx2KTtcbnJldHVybiB2O1xuIH0pLlxudGhlbigodik9PntcbmlmKGZpbmlzaFZhbHVlKXtcbnJldHVybiBmaW5pc2hWYWx1ZShrZXksdikudGhlbigoKT0+dik7XG4gfVxucmV0dXJuIHY7XG4gfSkuXG5maW5hbGx5KCgpPT57XG5wZW5kaW5nLmRlbGV0ZShrZXkpO1xuIH0pO1xucGVuZGluZy5zZXQoa2V5LHZhbFApO1xuIH1cbmNvbnN0IHZhbFA9cGVuZGluZy5nZXQoa2V5KTtcbmFzc2VydCh2YWxQKTtcbnJldHVybiB2YWxQO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Byb3ZpZGVBc3luY30pO1xuIH07JGjNj19vbmNlLm1ha2VBdG9taWNQcm92aWRlcihtYWtlQXRvbWljUHJvdmlkZXIpO1xuaGFyZGVuKG1ha2VBdG9taWNQcm92aWRlcik7XG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXBwZW5kVG9TdG9yZWRBcnJheT0obWFwU3RvcmUsa2V5LGl0ZW0pPT57XG5pZihtYXBTdG9yZS5oYXMoa2V5KSl7XG5jb25zdCBleHRhbnQ9bWFwU3RvcmUuZ2V0KGtleSk7XG5tYXBTdG9yZS5zZXQoa2V5LGhhcmRlbihbLi4uZXh0YW50LGl0ZW1dKSk7XG4gfWVsc2V7XG5tYXBTdG9yZS5pbml0KGtleSxoYXJkZW4oW2l0ZW1dKSk7XG4gfVxuIH07JGjNj19vbmNlLmFwcGVuZFRvU3RvcmVkQXJyYXkoYXBwZW5kVG9TdG9yZWRBcnJheSk7XG5oYXJkZW4oYXBwZW5kVG9TdG9yZWRBcnJheSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlTZXQiOlsiaXNDb3B5U2V0Il0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwibWFrZUN1cnJlbnRLZXlzS2l0IjpbIm1ha2VDdXJyZW50S2V5c0tpdCJdLCJwcm92aWRlTGF6eSI6WyJwcm92aWRlTGF6eSJdLCJtYWtlQXRvbWljUHJvdmlkZXIiOlsibWFrZUF0b21pY1Byb3ZpZGVyIl0sImFwcGVuZFRvU3RvcmVkQXJyYXkiOlsiYXBwZW5kVG9TdG9yZWRBcnJheSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAhAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADfeBBmIgIAACICAAAcAAAAQGFnb3JpYy90aW1lLXYwLjMuMi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy90aW1lTWF0aC5qcyIsIi4vc3JjL3R5cGVHdWFyZHMuanMiLCIuL3NyYy90eXBlcy1pbmRleC5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL3RpbWVNYXRoLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL3R5cGVzLWluZGV4LmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy90aW1lTWF0aC5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMtaW5kZXguanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMZ1iznETAABxEwAAIwAAAEBhZ29yaWMvdGltZS12MC4zLjIvc3JjL3RpbWVNYXRoLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJUaW1lTWF0aCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsRmFpbCxxLG11c3RNYXRjaCxSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSxUaW1lc3RhbXBSZWNvcmRTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW1tcIlJlbGF0aXZlVGltZVJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKFJlbGF0aXZlVGltZVJlY29yZFNoYXBlID0gJGjNj19hKV1dLFtcIlRpbWVzdGFtcFJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKFRpbWVzdGFtcFJlY29yZFNoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBhZ3JlZWRUaW1lckJyYW5kPShsZWZ0QnJhbmQscmlnaHRCcmFuZCk9PntcbmlmKGxlZnRCcmFuZD09PXVuZGVmaW5lZCl7XG5pZihyaWdodEJyYW5kPT09dW5kZWZpbmVkKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfWVsc2V7XG5yZXR1cm4gcmlnaHRCcmFuZDtcbiB9XG4gfWVsc2UgaWYocmlnaHRCcmFuZD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gbGVmdEJyYW5kO1xuIH1lbHNle1xubGVmdEJyYW5kPT09cmlnaHRCcmFuZHx8XG5GYWlsIGBUaW1lckJyYW5kcyBtdXN0IG1hdGNoOiAke3EobGVmdEJyYW5kKX0gdnMgJHtxKHJpZ2h0QnJhbmQpfWA7XG5yZXR1cm4gbGVmdEJyYW5kO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzaGFyZWRUaW1lckJyYW5kPShsZWZ0LHJpZ2h0KT0+e1xuY29uc3QgbGVmdEJyYW5kPXR5cGVvZiBsZWZ0PT09J2JpZ2ludCc/dW5kZWZpbmVkOmxlZnQudGltZXJCcmFuZDtcbmNvbnN0IHJpZ2h0QnJhbmQ9dHlwZW9mIHJpZ2h0PT09J2JpZ2ludCc/dW5kZWZpbmVkOnJpZ2h0LnRpbWVyQnJhbmQ7XG5yZXR1cm4gYWdyZWVkVGltZXJCcmFuZChsZWZ0QnJhbmQscmlnaHRCcmFuZCk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGFic0xpa2U9KGxlZnQscmlnaHQsYWJzVmFsdWUpPT57XG5OYXQoYWJzVmFsdWUpO1xuY29uc3QgdGltZXJCcmFuZD1zaGFyZWRUaW1lckJyYW5kKGxlZnQscmlnaHQpO1xuaWYodGltZXJCcmFuZCl7XG5yZXR1cm4gaGFyZGVuKHtcbnRpbWVyQnJhbmQsXG5hYnNWYWx1ZX0pO1xuXG4gfWVsc2V7XG5yZXR1cm4gYWJzVmFsdWU7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCByZWxMaWtlPShsZWZ0LHJpZ2h0LHJlbFZhbHVlKT0+e1xuTmF0KHJlbFZhbHVlKTtcbmNvbnN0IHRpbWVyQnJhbmQ9c2hhcmVkVGltZXJCcmFuZChsZWZ0LHJpZ2h0KTtcbmlmKHRpbWVyQnJhbmQpe1xucmV0dXJuIGhhcmRlbih7XG50aW1lckJyYW5kLFxucmVsVmFsdWV9KTtcblxuIH1lbHNle1xucmV0dXJuIHJlbFZhbHVlO1xuIH1cbiB9O1xuXG4vL1xuLy9cbi8vXG5cbmNvbnN0IGFic1ZhbHVlPShhYnMpPT57XG5pZih0eXBlb2YgYWJzPT09J2JpZ2ludCcpe1xucmV0dXJuIE5hdChhYnMpO1xuIH1cbm11c3RNYXRjaChhYnMsVGltZXN0YW1wUmVjb3JkU2hhcGUsJ3RpbWVzdGFtcCcpO1xucmV0dXJuIE5hdChhYnMuYWJzVmFsdWUpO1xuIH07XG5cbmNvbnN0IHJlbFZhbHVlPShyZWwpPT57XG5pZih0eXBlb2YgcmVsPT09J2JpZ2ludCcpe1xucmV0dXJuIE5hdChyZWwpO1xuIH1cbm11c3RNYXRjaChyZWwsUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUsJ3JlbGF0aXZlJyk7XG5yZXR1cm4gTmF0KHJlbC5yZWxWYWx1ZSk7XG4gfTtcblxuY29uc3QgbWFrZVRpbWVzdGFtcFJlY29yZD0oYWJzLHRpbWVyQnJhbmQpPT5cbmhhcmRlbih7YWJzVmFsdWU6YWJzLHRpbWVyQnJhbmR9KTtcbmNvbnN0IG1ha2VSZWxhdGl2ZVRpbWVSZWNvcmQ9KHJlbCx0aW1lckJyYW5kKT0+XG5oYXJkZW4oe3JlbFZhbHVlOnJlbCx0aW1lckJyYW5kfSk7XG5cbmNvbnN0IGNvZXJjZVRpbWVzdGFtcFJlY29yZD0odHMsYnJhbmQpPT57XG5icmFuZHx8RmFpbCBgbXVzdCBoYXZlIGEgYnJhbmRgO1xuaWYodHlwZW9mIHRzPT09J251bWJlcicpe1xudHM9TmF0KHRzKTtcbiB9XG5pZih0eXBlb2YgdHM9PT0nYmlnaW50Jyl7XG5yZXR1cm4gbWFrZVRpbWVzdGFtcFJlY29yZCh0cyxicmFuZCk7XG4gfWVsc2V7XG5jb25zdHt0aW1lckJyYW5kfT10cztcbm11c3RNYXRjaCh0cyxUaW1lc3RhbXBSZWNvcmRTaGFwZSwndGltZXN0YW1wJyk7XG5hZ3JlZWRUaW1lckJyYW5kKHRpbWVyQnJhbmQsYnJhbmQpO1xucmV0dXJuIHRzO1xuIH1cbiB9O1xuXG5jb25zdCBjb2VyY2VSZWxhdGl2ZVRpbWVSZWNvcmQ9KHJ0LGJyYW5kKT0+e1xuYnJhbmR8fEZhaWwgYG11c3QgaGF2ZSBhIGJyYW5kYDtcbmlmKHR5cGVvZiBydD09PSdudW1iZXInKXtcbnJ0PU5hdChydCk7XG4gfVxuaWYodHlwZW9mIHJ0PT09J2JpZ2ludCcpe1xucmV0dXJuIG1ha2VSZWxhdGl2ZVRpbWVSZWNvcmQocnQsYnJhbmQpO1xuIH1lbHNle1xuY29uc3R7dGltZXJCcmFuZH09cnQ7XG5tdXN0TWF0Y2gocnQsUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUsJ3JlbGF0aXZlVGltZScpO1xuYWdyZWVkVGltZXJCcmFuZCh0aW1lckJyYW5kLGJyYW5kKTtcbnJldHVybiBydDtcbiB9XG4gfTtcblxuY29uc3QgYWRkQWJzUmVsPShhYnMscmVsKT0+XG5hYnNMaWtlKGFicyxyZWwsYWJzVmFsdWUoYWJzKStyZWxWYWx1ZShyZWwpKTtcblxuY29uc3QgYWRkUmVsUmVsPShyZWwxLHJlbDIpPT5cbnJlbExpa2UocmVsMSxyZWwyLHJlbFZhbHVlKHJlbDEpK3JlbFZhbHVlKHJlbDIpKTtcblxuY29uc3Qgc3VidHJhY3RBYnNBYnM9KGFiczEsYWJzMik9PlxucmVsTGlrZShhYnMxLGFiczIsYWJzVmFsdWUoYWJzMSktYWJzVmFsdWUoYWJzMikpO1xuXG5jb25zdCBjbGFtcGVkU3VidHJhY3RBYnNBYnM9KGFiczEsYWJzMik9PntcbmNvbnN0IHZhbDE9YWJzVmFsdWUoYWJzMSk7XG5jb25zdCB2YWwyPWFic1ZhbHVlKGFiczIpO1xucmV0dXJuIHJlbExpa2UoYWJzMSxhYnMyLHZhbDE+dmFsMj92YWwxLXZhbDI6MG4pO1xuIH07XG5cbmNvbnN0IHN1YnRyYWN0QWJzUmVsPShhYnMscmVsKT0+XG5hYnNMaWtlKGFicyxyZWwsYWJzVmFsdWUoYWJzKS1yZWxWYWx1ZShyZWwpKTtcblxuY29uc3Qgc3VidHJhY3RSZWxSZWw9KHJlbDEscmVsMik9PlxucmVsTGlrZShyZWwxLHJlbDIscmVsVmFsdWUocmVsMSktcmVsVmFsdWUocmVsMikpO1xuXG5jb25zdCBpc1JlbFplcm89KHJlbCk9PnJlbFZhbHVlKHJlbCk9PT0wbjtcblxuY29uc3QgbXVsdGlwbHlSZWxOYXQ9KHJlbCxuYXQpPT5yZWxMaWtlKHJlbCxuYXQscmVsVmFsdWUocmVsKSpuYXQpO1xuXG5jb25zdCBkaXZpZGVSZWxOYXQ9KHJlbCxuYXQpPT5yZWxMaWtlKHJlbCxuYXQscmVsVmFsdWUocmVsKS9uYXQpO1xuXG5jb25zdCBkaXZpZGVSZWxSZWw9KHJlbDEscmVsMik9PntcbnNoYXJlZFRpbWVyQnJhbmQocmVsMSxyZWwyKTsvL1xucmV0dXJuIHJlbFZhbHVlKHJlbDEpL3JlbFZhbHVlKHJlbDIpO1xuIH07XG5cbmNvbnN0IG1vZEFic1JlbD0oYWJzLHN0ZXApPT5cbnJlbExpa2UoYWJzLHN0ZXAsYWJzVmFsdWUoYWJzKSVyZWxWYWx1ZShzdGVwKSk7XG5cbmNvbnN0IG1vZFJlbFJlbD0ocmVsLHN0ZXApPT5cbnJlbExpa2UocmVsLHN0ZXAscmVsVmFsdWUocmVsKSVyZWxWYWx1ZShzdGVwKSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjb21wYXJlVmFsdWVzPShsZWZ0LHJpZ2h0LHYxLHYyKT0+e1xuc2hhcmVkVGltZXJCcmFuZChsZWZ0LHJpZ2h0KTtcbmlmKHYxPHYyKXtcbnJldHVybi0xO1xuIH1lbHNlIGlmKHYxPT09djIpe1xucmV0dXJuIDA7XG4gfWVsc2V7XG5hc3NlcnQodjE+djIpO1xucmV0dXJuIDE7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgVGltZU1hdGg9aGFyZGVuKHtcbmFic1ZhbHVlLFxucmVsVmFsdWUsXG5jb2VyY2VUaW1lc3RhbXBSZWNvcmQsXG5jb2VyY2VSZWxhdGl2ZVRpbWVSZWNvcmQsXG4vL1xuYWRkQWJzUmVsLFxuLy9cbmFkZFJlbFJlbCxcbnN1YnRyYWN0QWJzQWJzLFxuY2xhbXBlZFN1YnRyYWN0QWJzQWJzLFxuc3VidHJhY3RBYnNSZWwsXG5zdWJ0cmFjdFJlbFJlbCxcbmlzUmVsWmVybyxcbm11bHRpcGx5UmVsTmF0LFxuZGl2aWRlUmVsTmF0LFxuZGl2aWRlUmVsUmVsLFxubW9kQWJzUmVsLFxubW9kUmVsUmVsLFxuY29tcGFyZUFiczooYWJzMSxhYnMyKT0+XG5jb21wYXJlVmFsdWVzKGFiczEsYWJzMixhYnNWYWx1ZShhYnMxKSxhYnNWYWx1ZShhYnMyKSksXG5jb21wYXJlUmVsOihyZWwxLHJlbDIpPT5cbmNvbXBhcmVWYWx1ZXMocmVsMSxyZWwyLHJlbFZhbHVlKHJlbDEpLHJlbFZhbHVlKHJlbDIpKX0pOyRozY9fb25jZS5UaW1lTWF0aChUaW1lTWF0aCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUaW1lTWF0aCI6WyJUaW1lTWF0aCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAhorES1AgAANQIAAAlAAAAQGFnb3JpYy90aW1lLXYwLjMuMi9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIlJlbGF0aXZlVGltZVJlY29yZFNoYXBlIiwiUmVsYXRpdmVUaW1lU2hhcGUiLCJSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlIiwiVGltZXJCcmFuZFNoYXBlIiwiVGltZXJTZXJ2aWNlU2hhcGUiLCJUaW1lc3RhbXBSZWNvcmRTaGFwZSIsIlRpbWVzdGFtcFNoYXBlIiwiVGltZXN0YW1wVmFsdWVTaGFwZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBUaW1lckJyYW5kU2hhcGU9TS5yZW1vdGFibGUoJ1RpbWVyQnJhbmQnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlRpbWVyQnJhbmRTaGFwZShUaW1lckJyYW5kU2hhcGUpO1xuY29uc3QgICAgICAgIFRpbWVzdGFtcFZhbHVlU2hhcGU9TS5uYXQoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlRpbWVzdGFtcFZhbHVlU2hhcGUoVGltZXN0YW1wVmFsdWVTaGFwZSk7XG5jb25zdCAgICAgICAgUmVsYXRpdmVUaW1lVmFsdWVTaGFwZT1NLm5hdCgpOy8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlJlbGF0aXZlVGltZVZhbHVlU2hhcGUoUmVsYXRpdmVUaW1lVmFsdWVTaGFwZSk7XG5jb25zdCAgICAgICAgVGltZXN0YW1wUmVjb3JkU2hhcGU9aGFyZGVuKHtcbnRpbWVyQnJhbmQ6VGltZXJCcmFuZFNoYXBlLFxuYWJzVmFsdWU6VGltZXN0YW1wVmFsdWVTaGFwZX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlRpbWVzdGFtcFJlY29yZFNoYXBlKFRpbWVzdGFtcFJlY29yZFNoYXBlKTtcbmNvbnN0ICAgICAgICBSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZT1oYXJkZW4oe1xudGltZXJCcmFuZDpUaW1lckJyYW5kU2hhcGUsXG5yZWxWYWx1ZTpSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5SZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZShSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSk7XG5jb25zdCAgICAgICAgVGltZXN0YW1wU2hhcGU9TS5vcihUaW1lc3RhbXBSZWNvcmRTaGFwZSxUaW1lc3RhbXBWYWx1ZVNoYXBlKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuVGltZXN0YW1wU2hhcGUoVGltZXN0YW1wU2hhcGUpO1xuY29uc3QgICAgICAgIFJlbGF0aXZlVGltZVNoYXBlPU0ub3IoXG5SZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSxcblJlbGF0aXZlVGltZVZhbHVlU2hhcGUpOyRozY9fb25jZS5SZWxhdGl2ZVRpbWVTaGFwZShSZWxhdGl2ZVRpbWVTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIFRpbWVyU2VydmljZVNoYXBlPU0ucmVtb3RhYmxlKCdUaW1lclNlcnZpY2UnKTskaM2PX29uY2UuVGltZXJTZXJ2aWNlU2hhcGUoVGltZXJTZXJ2aWNlU2hhcGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGltZXJCcmFuZFNoYXBlIjpbIlRpbWVyQnJhbmRTaGFwZSJdLCJUaW1lc3RhbXBWYWx1ZVNoYXBlIjpbIlRpbWVzdGFtcFZhbHVlU2hhcGUiXSwiUmVsYXRpdmVUaW1lVmFsdWVTaGFwZSI6WyJSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlIl0sIlRpbWVzdGFtcFJlY29yZFNoYXBlIjpbIlRpbWVzdGFtcFJlY29yZFNoYXBlIl0sIlJlbGF0aXZlVGltZVJlY29yZFNoYXBlIjpbIlJlbGF0aXZlVGltZVJlY29yZFNoYXBlIl0sIlRpbWVzdGFtcFNoYXBlIjpbIlRpbWVzdGFtcFNoYXBlIl0sIlJlbGF0aXZlVGltZVNoYXBlIjpbIlJlbGF0aXZlVGltZVNoYXBlIl0sIlRpbWVyU2VydmljZVNoYXBlIjpbIlRpbWVyU2VydmljZVNoYXBlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACYAAABAYWdvcmljL3RpbWUtdjAuMy4yL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA5FColZoWAACaFgAAKAAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9leG8tdXRpbHMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSIsIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiXSwiZXhwb3J0cyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJpZ25vcmVDb250ZXh0IiwibWFrZUV4b1V0aWxzIiwicHJlcGFyZUV4byIsInByZXBhcmVFeG9DbGFzcyIsInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVLaW5kIiwicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVTaW5nbGV0b24iLCJwcm92aWRlS2luZEhhbmRsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpbml0RW1wdHkscHJvdmlkZSxnbG9iYWxWYXREYXRhOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaM2PX2EgPT4gKGluaXRFbXB0eSA9ICRozY9fYSldXV1dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW1tcInByb3ZpZGVcIiwgWyRozY9fYSA9PiAocHJvdmlkZSA9ICRozY9fYSldXSxbXCJWYXREYXRhXCIsIFskaM2PX2EgPT4gKGdsb2JhbFZhdERhdGEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8qXG5cbiAqL1xuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlnbm9yZUNvbnRleHQ9XG4oZm4pPT5cbihfY29udGV4dCwuLi5hcmdzKT0+XG5mbiguLi5hcmdzKTskaM2PX29uY2UuaWdub3JlQ29udGV4dChpZ25vcmVDb250ZXh0KTtcbmhhcmRlbihpZ25vcmVDb250ZXh0KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZUV4b1V0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG5kZWZpbmVLaW5kLFxuZGVmaW5lS2luZE11bHRpLFxuZGVmaW5lRHVyYWJsZUtpbmQsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpLFxubWFrZUtpbmRIYW5kbGV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVLaW5kSGFuZGxlPShiYWdnYWdlLGtpbmROYW1lKT0+XG5wcm92aWRlKGJhZ2dhZ2UsIGAke2tpbmROYW1lfV9raW5kSGFuZGxlYCwoKT0+bWFrZUtpbmRIYW5kbGUoa2luZE5hbWUpKTtcbmhhcmRlbihwcm92aWRlS2luZEhhbmRsZSk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVLaW5kPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmluaXQsXG5iZWhhdmlvcixcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVLaW5kKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUtpbmRNdWx0aT0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kTXVsdGkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZVZpcnR1YWxFeG9DbGFzcz0odGFnLGludGVyZmFjZUd1YXJkLGluaXQsbWV0aG9kcyxvcHRpb25zKT0+XG4vL1xuZGVmaW5lS2luZCh0YWcsaW5pdCxtZXRob2RzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxuaGFyZGVuKGRlZmluZVZpcnR1YWxFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0PShcbnRhZyxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpPT5cblxuLy9cbmRlZmluZUtpbmRNdWx0aSh0YWcsaW5pdCxmYWNldHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdH0pO1xuXG5oYXJkZW4oZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVEdXJhYmxlRXhvQ2xhc3M9KFxua2luZEhhbmRsZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zKT0+XG5cbi8vXG5kZWZpbmVEdXJhYmxlS2luZChraW5kSGFuZGxlLGluaXQsbWV0aG9kcyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkfSk7XG5cbmhhcmRlbihkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdD0oXG5raW5kSGFuZGxlLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucyk9PlxuXG4vL1xuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShraW5kSGFuZGxlLGluaXQsZmFjZXRzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXR9KTtcblxuaGFyZGVuKGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvQ2xhc3M9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVFeG9DbGFzcyhcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG9DbGFzc0tpdD0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG89KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5tZXRob2RzLFxub3B0aW9ucz11bmRlZmluZWQpPT5cbntcbmNvbnN0IG1ha2VTaW5nbGV0b249cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cblxucmV0dXJuIHByb3ZpZGUoYmFnZ2FnZSwgYCR7a2luZE5hbWV9X3NpbmdsZXRvbmAsKCk9Pm1ha2VTaW5nbGV0b24oKSk7XG4gfTtcbmhhcmRlbihwcmVwYXJlRXhvKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVTaW5nbGV0b249KGJhZ2dhZ2Usa2luZE5hbWUsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PlxucHJlcGFyZUV4byhiYWdnYWdlLGtpbmROYW1lLHVuZGVmaW5lZCxtZXRob2RzLG9wdGlvbnMpO1xuaGFyZGVuKHByZXBhcmVTaW5nbGV0b24pO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmRlZmluZVZpcnR1YWxFeG9DbGFzcyxcbmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCxcbmRlZmluZUR1cmFibGVFeG9DbGFzcyxcbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG9DbGFzcyxcbnByZXBhcmVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG8sXG5cbnByZXBhcmVTaW5nbGV0b24sXG5wcm92aWRlS2luZEhhbmRsZSxcbnByZXBhcmVLaW5kLFxucHJlcGFyZUtpbmRNdWx0aX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUV4b1V0aWxzKG1ha2VFeG9VdGlscyk7XG5cbmNvbnN0IGdsb2JhbEV4b1V0aWxzPW1ha2VFeG9VdGlscyhnbG9iYWxWYXREYXRhKTtcblxuY29uc3QgICAgICAge1xuZGVmaW5lVmlydHVhbEV4b0NsYXNzLFxuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0LFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzLFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4b0NsYXNzLFxucHJlcGFyZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4byxcbnByZXBhcmVTaW5nbGV0b259PVxuZ2xvYmFsRXhvVXRpbHM7XG5cbi8qXG5cbiAqLyRozY9fb25jZS5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3MoZGVmaW5lVmlydHVhbEV4b0NsYXNzKTskaM2PX29uY2UuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVFeG9DbGFzcyhkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpOyRozY9fb25jZS5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0KTskaM2PX29uY2UucHJlcGFyZUV4b0NsYXNzKHByZXBhcmVFeG9DbGFzcyk7JGjNj19vbmNlLnByZXBhcmVFeG9DbGFzc0tpdChwcmVwYXJlRXhvQ2xhc3NLaXQpOyRozY9fb25jZS5wcmVwYXJlRXhvKHByZXBhcmVFeG8pOyRozY9fb25jZS5wcmVwYXJlU2luZ2xldG9uKHByZXBhcmVTaW5nbGV0b24pO1xuY29uc3QgICAgICAge3Byb3ZpZGVLaW5kSGFuZGxlLHByZXBhcmVLaW5kLHByZXBhcmVLaW5kTXVsdGl9PVxuZ2xvYmFsRXhvVXRpbHM7JGjNj19vbmNlLnByb3ZpZGVLaW5kSGFuZGxlKHByb3ZpZGVLaW5kSGFuZGxlKTskaM2PX29uY2UucHJlcGFyZUtpbmQocHJlcGFyZUtpbmQpOyRozY9fb25jZS5wcmVwYXJlS2luZE11bHRpKHByZXBhcmVLaW5kTXVsdGkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWdub3JlQ29udGV4dCI6WyJpZ25vcmVDb250ZXh0Il0sIm1ha2VFeG9VdGlscyI6WyJtYWtlRXhvVXRpbHMiXSwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIjpbImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sImRlZmluZUR1cmFibGVFeG9DbGFzcyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IjpbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLCJwcmVwYXJlRXhvQ2xhc3MiOlsicHJlcGFyZUV4b0NsYXNzIl0sInByZXBhcmVFeG9DbGFzc0tpdCI6WyJwcmVwYXJlRXhvQ2xhc3NLaXQiXSwicHJlcGFyZUV4byI6WyJwcmVwYXJlRXhvIl0sInByZXBhcmVTaW5nbGV0b24iOlsicHJlcGFyZVNpbmdsZXRvbiJdLCJwcm92aWRlS2luZEhhbmRsZSI6WyJwcm92aWRlS2luZEhhbmRsZSJdLCJwcmVwYXJlS2luZCI6WyJwcmVwYXJlS2luZCJdLCJwcmVwYXJlS2luZE11bHRpIjpbInByZXBhcmVLaW5kTXVsdGkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuPUWMKgIAACoCAAAJAAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIiwiLi92YXQtZGF0YS1iaW5kaW5ncy5qcyIsIi4vZXhvLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtdXSxbXCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzXCIsIFtdXSxbXCIuL2V4by11dGlscy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBhZ29yaWMvc3RvcmUiOltbIk0iLCJNIl0sWyJtYWtlU2NhbGFyTWFwU3RvcmUiLCJtYWtlU2NhbGFyTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyU2V0U3RvcmUiLCJtYWtlU2NhbGFyU2V0U3RvcmUiXSxbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl1dLCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIjpbWyJtYWtlS2luZEhhbmRsZSIsIm1ha2VLaW5kSGFuZGxlIl0sWyJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSxbIndhdGNoUHJvbWlzZSIsIndhdGNoUHJvbWlzZSJdLFsibWFrZVNjYWxhckJpZ01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSJdLFsibWFrZVNjYWxhckJpZ1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1NldFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSJdLFsiY2FuQmVEdXJhYmxlIiwiY2FuQmVEdXJhYmxlIl0sWyJwaWNrRmFjZXQiLCJwaWNrRmFjZXQiXSxbInBhcnRpYWxBc3NpZ24iLCJwYXJ0aWFsQXNzaWduIl0sWyJwcm92aWRlIiwicHJvdmlkZSJdLFsicHJvdmlkZUR1cmFibGVNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiLCJwcm92aWRlRHVyYWJsZVNldFN0b3JlIl0sWyJwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIl0sWyJkZWZpbmVLaW5kIiwiZGVmaW5lS2luZCJdLFsiZGVmaW5lS2luZE11bHRpIiwiZGVmaW5lS2luZE11bHRpIl0sWyJkZWZpbmVEdXJhYmxlS2luZCIsImRlZmluZUR1cmFibGVLaW5kIl0sWyJkZWZpbmVEdXJhYmxlS2luZE11bHRpIiwiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSJdXSwiLi9leG8tdXRpbHMuanMiOltbImRlZmluZVZpcnR1YWxFeG9DbGFzcyIsImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLFsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sWyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSxbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCIsImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLFsicHJlcGFyZUV4b0NsYXNzIiwicHJlcGFyZUV4b0NsYXNzIl0sWyJwcmVwYXJlRXhvQ2xhc3NLaXQiLCJwcmVwYXJlRXhvQ2xhc3NLaXQiXSxbInByZXBhcmVFeG8iLCJwcmVwYXJlRXhvIl0sWyJwcmVwYXJlU2luZ2xldG9uIiwicHJlcGFyZVNpbmdsZXRvbiJdLFsiaWdub3JlQ29udGV4dCIsImlnbm9yZUNvbnRleHQiXSxbInByb3ZpZGVLaW5kSGFuZGxlIiwicHJvdmlkZUtpbmRIYW5kbGUiXSxbInByZXBhcmVLaW5kIiwicHJlcGFyZUtpbmQiXSxbInByZXBhcmVLaW5kTXVsdGkiLCJwcmVwYXJlS2luZE11bHRpIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAMEXLprBYAAKwWAAAwAAAAQGFnb3JpYy92YXQtZGF0YS12MC41LjIvc3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJWYXREYXRhIiwiY2FuQmVEdXJhYmxlIiwiZGVmaW5lRHVyYWJsZUtpbmQiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIiwiZGVmaW5lS2luZCIsImRlZmluZUtpbmRNdWx0aSIsIm1ha2VLaW5kSGFuZGxlIiwibWFrZVNjYWxhckJpZ01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU3RvcmVVdGlscyIsInBhcnRpYWxBc3NpZ24iLCJwaWNrRmFjZXQiLCJwcm92aWRlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwid2F0Y2hQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscHJvdmlkZUxhenk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaM2PX2EgPT4gKHByb3ZpZGVMYXp5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBWYXREYXRhR2xvYmFsO1xuaWYoJ1ZhdERhdGEnaW4gZ2xvYmFsVGhpcyl7XG5nbG9iYWxUaGlzLlZhdERhdGF8fEZhaWwgYFZhdERhdGEgZGVmaW5lZCBpbiBnbG9iYWwgYXMgbnVsbCBvciB1bmRlZmluZWRgO1xuLy9cblZhdERhdGFHbG9iYWw9LyogICAgICAgICAgICAgICovZ2xvYmFsVGhpcy5WYXREYXRhO1xuIH1lbHNle1xuLy9cbi8vXG4vL1xuY29uc3QgdW5hdmFpbGFibGU9KCk9PkZhaWwgYFZhdERhdGEgdW5hdmFpbGFibGVgO1xuVmF0RGF0YUdsb2JhbD17XG5kZWZpbmVLaW5kOnVuYXZhaWxhYmxlLFxuZGVmaW5lS2luZE11bHRpOnVuYXZhaWxhYmxlLFxuZGVmaW5lRHVyYWJsZUtpbmQ6dW5hdmFpbGFibGUsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpOnVuYXZhaWxhYmxlLFxubWFrZUtpbmRIYW5kbGU6dW5hdmFpbGFibGUsXG5wcm92aWRlUHJvbWlzZVdhdGNoZXI6dW5hdmFpbGFibGUsXG53YXRjaFByb21pc2U6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1NldFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZTp1bmF2YWlsYWJsZSxcbmNhbkJlRHVyYWJsZTp1bmF2YWlsYWJsZX07XG5cbiB9XG5cbmNvbnN0IFZhdERhdGFFeHBvcnQ9VmF0RGF0YUdsb2JhbDskaM2PX29uY2UuVmF0RGF0YUV4cG9ydChWYXREYXRhRXhwb3J0KTtcblxuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmRlZmluZUtpbmQsXG5kZWZpbmVLaW5kTXVsdGksXG5kZWZpbmVEdXJhYmxlS2luZCxcbmRlZmluZUR1cmFibGVLaW5kTXVsdGl9PVxuVmF0RGF0YUdsb2JhbDskaM2PX29uY2UuZGVmaW5lS2luZChkZWZpbmVLaW5kKTskaM2PX29uY2UuZGVmaW5lS2luZE11bHRpKGRlZmluZUtpbmRNdWx0aSk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVLaW5kKGRlZmluZUR1cmFibGVLaW5kKTskaM2PX29uY2UuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShkZWZpbmVEdXJhYmxlS2luZE11bHRpKTtcblxuY29uc3QgICAgICAge1xubWFrZUtpbmRIYW5kbGUsXG5wcm92aWRlUHJvbWlzZVdhdGNoZXIsXG53YXRjaFByb21pc2UsXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUsXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLFxubWFrZVNjYWxhckJpZ1NldFN0b3JlLFxubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSxcbmNhbkJlRHVyYWJsZX09XG5WYXREYXRhR2xvYmFsO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZUtpbmRIYW5kbGUobWFrZUtpbmRIYW5kbGUpOyRozY9fb25jZS5wcm92aWRlUHJvbWlzZVdhdGNoZXIocHJvdmlkZVByb21pc2VXYXRjaGVyKTskaM2PX29uY2Uud2F0Y2hQcm9taXNlKHdhdGNoUHJvbWlzZSk7JGjNj19vbmNlLm1ha2VTY2FsYXJCaWdNYXBTdG9yZShtYWtlU2NhbGFyQmlnTWFwU3RvcmUpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnU2V0U3RvcmUobWFrZVNjYWxhckJpZ1NldFN0b3JlKTskaM2PX29uY2UubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZShtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKTskaM2PX29uY2UuY2FuQmVEdXJhYmxlKGNhbkJlRHVyYWJsZSk7XG5jb25zdCAgICAgICAgcGlja0ZhY2V0PVxuKG1ha2VyLGZhY2V0TmFtZSk9PlxuKC4uLmFyZ3MpPT5cbm1ha2VyKC4uLmFyZ3MpW2ZhY2V0TmFtZV07JGjNj19vbmNlLnBpY2tGYWNldChwaWNrRmFjZXQpO1xuaGFyZGVuKHBpY2tGYWNldCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXJ0aWFsQXNzaWduPSh0YXJnZXQsc291cmNlKT0+e1xuT2JqZWN0LmFzc2lnbih0YXJnZXQsc291cmNlKTtcbiB9OyRozY9fb25jZS5wYXJ0aWFsQXNzaWduKHBhcnRpYWxBc3NpZ24pO1xuaGFyZGVuKHBhcnRpYWxBc3NpZ24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgICAgICAgIHByb3ZpZGU9XG4vL1xuLypcblxuXG5cblxuXG4gICAqL3Byb3ZpZGVMYXp5O1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wcm92aWRlKHByb3ZpZGUpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZVV0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG4vL1xubWFrZVNjYWxhckJpZ01hcFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUsXG4vL1xubWFrZVNjYWxhckJpZ1NldFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZU1hcFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVNYXBTdG9yZSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlU2V0U3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVNldFN0b3JlKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHJvdmlkZUR1cmFibGVNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVTZXRTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlU3RvcmVVdGlscyhtYWtlU3RvcmVVdGlscyk7XG5cbmNvbnN0IGdsb2JhbFN0b3JlVXRpbHM9bWFrZVN0b3JlVXRpbHMoVmF0RGF0YUdsb2JhbCk7XG5jb25zdCAgICAgICB7XG5wcm92aWRlRHVyYWJsZU1hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUsXG5wcm92aWRlRHVyYWJsZVNldFN0b3JlLFxucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmV9PVxuZ2xvYmFsU3RvcmVVdGlsczskaM2PX29uY2UucHJvdmlkZUR1cmFibGVNYXBTdG9yZShwcm92aWRlRHVyYWJsZU1hcFN0b3JlKTskaM2PX29uY2UucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpOyRozY9fb25jZS5wcm92aWRlRHVyYWJsZVNldFN0b3JlKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUpOyRozY9fb25jZS5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZShwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJWYXREYXRhIjpbIlZhdERhdGFFeHBvcnQiXSwiZGVmaW5lS2luZCI6WyJkZWZpbmVLaW5kIl0sImRlZmluZUtpbmRNdWx0aSI6WyJkZWZpbmVLaW5kTXVsdGkiXSwiZGVmaW5lRHVyYWJsZUtpbmQiOlsiZGVmaW5lRHVyYWJsZUtpbmQiXSwiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSI6WyJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl0sIm1ha2VLaW5kSGFuZGxlIjpbIm1ha2VLaW5kSGFuZGxlIl0sInByb3ZpZGVQcm9taXNlV2F0Y2hlciI6WyJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiOlsibWFrZVNjYWxhckJpZ01hcFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiOlsibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSJdLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiOlsibWFrZVNjYWxhckJpZ1NldFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiOlsibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSJdLCJjYW5CZUR1cmFibGUiOlsiY2FuQmVEdXJhYmxlIl0sInBpY2tGYWNldCI6WyJwaWNrRmFjZXQiXSwicGFydGlhbEFzc2lnbiI6WyJwYXJ0aWFsQXNzaWduIl0sInByb3ZpZGUiOlsicHJvdmlkZSJdLCJtYWtlU3RvcmVVdGlscyI6WyJtYWtlU3RvcmVVdGlscyJdLCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiXSwicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiOlsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiXSwicHJvdmlkZUR1cmFibGVTZXRTdG9yZSI6WyJwcm92aWRlRHVyYWJsZVNldFN0b3JlIl0sInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACGiVOPRBgAA0QYAACMAAABAYWdvcmljL3ZhdHMtdjAuMTUuMS9zcmMvdmF0LXpvZS5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCJAYWdvcmljL3pvZSJdLCJleHBvcnRzIjpbImJ1aWxkUm9vdE9iamVjdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXIsbWFrZUR1cmFibGVab2VLaXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3pvZVwiLCBbW1wibWFrZUR1cmFibGVab2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZUR1cmFibGVab2VLaXQgPSAkaM2PX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShidWlsZFJvb3RPYmplY3QsICduYW1lJywge3ZhbHVlOiBcImJ1aWxkUm9vdE9iamVjdFwifSk7JGjNj19vbmNlLmJ1aWxkUm9vdE9iamVjdChidWlsZFJvb3RPYmplY3QpOyAgIFxuXG5cbmNvbnN0IEJVSUxEX1BBUkFNU19LRVk9J2J1aWxkWm9lUGFyYW1zJztcblxuZnVuY3Rpb24gICAgICAgIGJ1aWxkUm9vdE9iamVjdCh2YXRQb3dlcnMsX3ZhdFBhcmFtcyx6b2VCYWdnYWdlKXtcbmNvbnN0IHNodXRkb3duWm9lVmF0PXZhdFBvd2Vycy5leGl0VmF0V2l0aEZhaWx1cmU7XG5cbmxldCB6b2VDb25maWdGYWNldDtcblxuaWYoem9lQmFnZ2FnZS5oYXMoQlVJTERfUEFSQU1TX0tFWSkpe1xuY29uc3R7ZmVlSXNzdWVyQ29uZmlnLHpjZlNwZWN9PXpvZUJhZ2dhZ2UuZ2V0KEJVSUxEX1BBUkFNU19LRVkpO1xuLy9cbi8vXG4vL1xuKHt6b2VDb25maWdGYWNldH09bWFrZUR1cmFibGVab2VLaXQoe1xuLy9cbnNodXRkb3duWm9lVmF0LFxuZmVlSXNzdWVyQ29uZmlnLFxuemNmU3BlYyxcbnpvZUJhZ2dhZ2V9KSk7XG5cbiB9XG5cbnJldHVybiBGYXIoJ3Jvb3QnLHtcbmJ1aWxkWm9lOmFzeW5jKGFkbWluVmF0LGZlZUlzc3VlckNvbmZpZyx6Y2ZCdW5kbGVOYW1lKT0+e1xuYXNzZXJ0KHpjZkJ1bmRsZU5hbWUsIGB2YXQtem9lIHJlcXVpcmVzIHpjZkJ1bmRsZU5hbWVgKTtcblxuY29uc3QgdmF0QWRtaW5TdmM9YXdhaXQgYWRtaW5WYXQ7XG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHpjZlNwZWM9e25hbWU6emNmQnVuZGxlTmFtZX07XG5cbnpvZUJhZ2dhZ2UuaW5pdChcbkJVSUxEX1BBUkFNU19LRVksXG5oYXJkZW4oe3ZhdEFkbWluU3ZjLGZlZUlzc3VlckNvbmZpZyx6Y2ZTcGVjfSkpO1xuXG5cbmNvbnN0e3pvZVNlcnZpY2UsZmVlTWludEFjY2Vzc309bWFrZUR1cmFibGVab2VLaXQoe1xudmF0QWRtaW5TdmMsXG5zaHV0ZG93blpvZVZhdCxcbmZlZUlzc3VlckNvbmZpZyxcbnpjZlNwZWMsXG56b2VCYWdnYWdlfSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG56b2VTZXJ2aWNlLFxuZmVlTWludEFjY2Vzc30pO1xuXG4gfSxcbmdldFpvZUNvbmZpZ0ZhY2V0OigpPT56b2VDb25maWdGYWNldH0pO1xuXG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYnVpbGRSb290T2JqZWN0IjpbImJ1aWxkUm9vdE9iamVjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACZoqjEkhMAAJITAAAoAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY2xlYW5Qcm9wb3NhbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL2VydHAiLCJAYWdvcmljL2ludGVybmFsIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiLCIuL3R5cGVHdWFyZHMuanMiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsiTUFYX0tFWVdPUkRfTEVOR1RIIiwiYXNzZXJ0S2V5d29yZE5hbWUiLCJjbGVhbktleXdvcmRzIiwiY2xlYW5Qcm9wb3NhbCIsImNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQiLCJjb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQscSxGYWlsLEFtb3VudE1hdGgsZ2V0QXNzZXRLaW5kLG9iamVjdE1hcCxhc3NlcnRSZWNvcmQsYXNzZXJ0S2V5LGFzc2VydFBhdHRlcm4sbXVzdE1hdGNoLGlzS2V5LEZ1bGxQcm9wb3NhbFNoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0ID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXSxbXCJnZXRBc3NldEtpbmRcIiwgWyRozY9fYSA9PiAoZ2V0QXNzZXRLaW5kID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJlY29yZFwiLCBbJGjNj19hID0+IChhc3NlcnRSZWNvcmQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJhc3NlcnRLZXlcIiwgWyRozY9fYSA9PiAoYXNzZXJ0S2V5ID0gJGjNj19hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcImlzS2V5XCIsIFskaM2PX2EgPT4gKGlzS2V5ID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJGdWxsUHJvcG9zYWxTaGFwZVwiLCBbJGjNj19hID0+IChGdWxsUHJvcG9zYWxTaGFwZSA9ICRozY9fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuY29uc3QgICAgICAgIE1BWF9LRVlXT1JEX0xFTkdUSD0xMDA7JGjNj19vbmNlLk1BWF9LRVlXT1JEX0xFTkdUSChNQVhfS0VZV09SRF9MRU5HVEgpO1xuXG5jb25zdCBmaXJzdENhcEFTQ0lJPS9eW0EtWl1bYS16QS1aMC05XyRdKiQvO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCAgICAgICAgYXNzZXJ0S2V5d29yZE5hbWU9KGtleXdvcmQpPT57XG5hc3NlcnQudHlwZW9mKGtleXdvcmQsJ3N0cmluZycpO1xua2V5d29yZC5sZW5ndGg8PU1BWF9LRVlXT1JEX0xFTkdUSHx8XG5GYWlsIGBrZXl3b3JkICR7cShrZXl3b3JkKX0gZXhjZWVkZWQgbWF4aW11bSBsZW5ndGggJHtxKFxuTUFYX0tFWVdPUkRfTEVOR1RIKVxuIH0gY2hhcmFjdGVyczsgZ290ICR7a2V5d29yZC5sZW5ndGh9YDtcbmZpcnN0Q2FwQVNDSUkudGVzdChrZXl3b3JkKXx8XG5GYWlsIGBrZXl3b3JkICR7cShcbmtleXdvcmQpXG4gfSBtdXN0IGJlIGFuIGFzY2lpIGlkZW50aWZpZXIgc3RhcnRpbmcgd2l0aCB1cHBlciBjYXNlLmA7XG5rZXl3b3JkIT09J05hTicmJmtleXdvcmQhPT0nSW5maW5pdHknfHxcbkZhaWwgYGtleXdvcmQgJHtxKGtleXdvcmQpfSBtdXN0IG5vdCBiZSBhIG51bWJlcidzIG5hbWVgO1xuIH07XG5cbi8qXG5cblxuICovJGjNj19vbmNlLmFzc2VydEtleXdvcmROYW1lKGFzc2VydEtleXdvcmROYW1lKTtcbmNvbnN0ICAgICAgICBjbGVhbktleXdvcmRzPSh1bmNsZWFuS2V5d29yZFJlY29yZCk9PntcbmhhcmRlbih1bmNsZWFuS2V5d29yZFJlY29yZCk7XG5hc3NlcnRSZWNvcmQodW5jbGVhbktleXdvcmRSZWNvcmQsJ2tleXdvcmRSZWNvcmQnKTtcbmNvbnN0IGtleXdvcmRzPW93bktleXModW5jbGVhbktleXdvcmRSZWNvcmQpO1xuXG4vL1xuLy9cbmZvcihjb25zdCBrZXl3b3JkIG9mIGtleXdvcmRzKXtcbmFzc2VydEtleXdvcmROYW1lKGtleXdvcmQpO1xuIH1cblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAqL2tleXdvcmRzKTtcbiB9OyRozY9fb25jZS5jbGVhbktleXdvcmRzKGNsZWFuS2V5d29yZHMpO1xuXG5jb25zdCAgICAgICAgY29lcmNlQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmQ9KFxuYWxsZWdlZEFtb3VudEtleXdvcmRSZWNvcmQsXG5nZXRBc3NldEtpbmRCeUJyYW5kKT0+XG57XG5jbGVhbktleXdvcmRzKGFsbGVnZWRBbW91bnRLZXl3b3JkUmVjb3JkKTtcbi8vXG5yZXR1cm4gb2JqZWN0TWFwKGFsbGVnZWRBbW91bnRLZXl3b3JkUmVjb3JkLChhbW91bnQpPT57XG4vL1xuLy9cbmlmKGlzS2V5KGFtb3VudCkpe1xuY29uc3QgYnJhbmRBc3NldEtpbmQ9Z2V0QXNzZXRLaW5kQnlCcmFuZChhbW91bnQuYnJhbmQpO1xuY29uc3QgYXNzZXRLaW5kPWdldEFzc2V0S2luZChhbW91bnQpO1xuLy9cbi8vXG5hc3NldEtpbmQ9PT1icmFuZEFzc2V0S2luZHx8XG5GYWlsIGBUaGUgYW1vdW50ICR7YW1vdW50fSBkaWQgbm90IGhhdmUgdGhlIGFzc2V0S2luZCBvZiB0aGUgYnJhbmQgJHticmFuZEFzc2V0S2luZH1gO1xucmV0dXJuIEFtb3VudE1hdGguY29lcmNlKGFtb3VudC5icmFuZCxhbW91bnQpO1xuIH1lbHNle1xuYXNzZXJ0UGF0dGVybihhbW91bnQpO1xucmV0dXJuIGFtb3VudDtcbiB9XG4gfSk7XG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLmNvZXJjZUFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkKGNvZXJjZUFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkKTtcbmNvbnN0ICAgICAgICBjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkPShcbmFsbGVnZWRBbW91bnRLZXl3b3JkUmVjb3JkLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCk9Plxue1xuY29uc3QgcmVzdWx0PWNvZXJjZUFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkKFxuYWxsZWdlZEFtb3VudEtleXdvcmRSZWNvcmQsXG5nZXRBc3NldEtpbmRCeUJyYW5kKTtcblxuYXNzZXJ0S2V5KHJlc3VsdCk7XG4vL1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5jb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkKGNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQpO1xuY29uc3QgYXNzZXJ0RXhpdD0oZXhpdCk9Plxub3duS2V5cyhleGl0KS5sZW5ndGg9PT0xfHxGYWlsIGBleGl0ICR7ZXhpdH0gc2hvdWxkIG9ubHkgaGF2ZSBvbmUga2V5YDtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBhc3NlcnRLZXl3b3JkTm90SW5Cb3RoPSh3YW50LGdpdmUpPT57XG5jb25zdCB3YW50S2V5d29yZFNldD1uZXcgU2V0KG93bktleXMod2FudCkpO1xuY29uc3QgZ2l2ZUtleXdvcmRzPW93bktleXMoZ2l2ZSk7XG5cbmZvcihjb25zdCBrZXl3b3JkIG9mIGdpdmVLZXl3b3Jkcyl7XG4hd2FudEtleXdvcmRTZXQuaGFzKGtleXdvcmQpfHxcbkZhaWwgYGEga2V5d29yZCBjYW5ub3QgYmUgaW4gYm90aCAnd2FudCcgYW5kICdnaXZlJ2A7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2xlYW5Qcm9wb3NhbD0ocHJvcG9zYWwsZ2V0QXNzZXRLaW5kQnlCcmFuZCk9PntcbmFzc2VydFJlY29yZChwcm9wb3NhbCwncHJvcG9zYWwnKTtcbi8vXG5jb25zdHtcbndhbnQ9aGFyZGVuKHt9KSxcbmdpdmU9aGFyZGVuKHt9KSxcbmV4aXQ9aGFyZGVuKHtvbkRlbWFuZDpudWxsfSksXG4uLi5yZXN0fT1cbnByb3Bvc2FsO1xub3duS2V5cyhyZXN0KS5sZW5ndGg9PT0wfHxcbkZhaWwgYCR7cHJvcG9zYWx9IC0gTXVzdCBvbmx5IGhhdmUgd2FudDosIGdpdmU6LCBleGl0OiBwcm9wZXJ0aWVzOiAke3Jlc3R9YDtcblxuY29uc3QgY2xlYW5lZFdhbnQ9Y29lcmNlQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmQoXG53YW50LFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCk7XG5cbmNvbnN0IGNsZWFuZWRHaXZlPWNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQoZ2l2ZSxnZXRBc3NldEtpbmRCeUJyYW5kKTtcblxuY29uc3QgY2xlYW5lZFByb3Bvc2FsPWhhcmRlbih7XG53YW50OmNsZWFuZWRXYW50LFxuZ2l2ZTpjbGVhbmVkR2l2ZSxcbmV4aXR9KTtcblxubXVzdE1hdGNoKGNsZWFuZWRQcm9wb3NhbCxGdWxsUHJvcG9zYWxTaGFwZSwncHJvcG9zYWwnKTtcbmFzc2VydEV4aXQoZXhpdCk7XG5hc3NlcnRLZXl3b3JkTm90SW5Cb3RoKGNsZWFuZWRXYW50LGNsZWFuZWRHaXZlKTtcbnJldHVybiBjbGVhbmVkUHJvcG9zYWw7XG4gfTskaM2PX29uY2UuY2xlYW5Qcm9wb3NhbChjbGVhblByb3Bvc2FsKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Ik1BWF9LRVlXT1JEX0xFTkdUSCI6WyJNQVhfS0VZV09SRF9MRU5HVEgiXSwiYXNzZXJ0S2V5d29yZE5hbWUiOlsiYXNzZXJ0S2V5d29yZE5hbWUiXSwiY2xlYW5LZXl3b3JkcyI6WyJjbGVhbktleXdvcmRzIl0sImNvZXJjZUFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkIjpbImNvZXJjZUFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkIl0sImNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQiOlsiY29lcmNlQW1vdW50S2V5d29yZFJlY29yZCJdLCJjbGVhblByb3Bvc2FsIjpbImNsZWFuUHJvcG9zYWwiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAi6WVmvoFAAD6BQAANAAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvb2ZmZXJTYWZldHkuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9lcnRwIl0sImV4cG9ydHMiOlsiaXNPZmZlclNhZmUiLCJzYXRpc2ZpZXNXYW50Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEFtb3VudE1hdGg7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzT2ZmZXJTYWZlLCAnbmFtZScsIHt2YWx1ZTogXCJpc09mZmVyU2FmZVwifSk7JGjNj19vbmNlLmlzT2ZmZXJTYWZlKGlzT2ZmZXJTYWZlKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNhdGlzZmllc0ludGVybmFsPShnaXZlT3JXYW50PXt9LGFsbG9jYXRpb24pPT57XG5jb25zdCBpc0dURUJ5S2V5d29yZD0oW2tleXdvcmQscmVxdWlyZWRBbW91bnRdKT0+e1xuLy9cbi8vXG5pZihhbGxvY2F0aW9uW2tleXdvcmRdPT09dW5kZWZpbmVkKXtcbnJldHVybiAwO1xuIH1cbmNvbnN0IGFsbG9jYXRpb25BbW91bnQ9YWxsb2NhdGlvbltrZXl3b3JkXTtcbnJldHVybiBBbW91bnRNYXRoLmlzR1RFKGFsbG9jYXRpb25BbW91bnQscmVxdWlyZWRBbW91bnQpPzE6MDtcbiB9O1xucmV0dXJuIE9iamVjdC5lbnRyaWVzKGdpdmVPcldhbnQpLmV2ZXJ5KGlzR1RFQnlLZXl3b3JkKT8xOjA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2F0aXNmaWVzV2FudD0ocHJvcG9zYWwsYWxsb2NhdGlvbik9Plxuc2F0aXNmaWVzSW50ZXJuYWwocHJvcG9zYWwud2FudCxhbGxvY2F0aW9uKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLnNhdGlzZmllc1dhbnQoc2F0aXNmaWVzV2FudCk7XG5jb25zdCBzYXRpc2ZpZXNHaXZlPShwcm9wb3NhbCxhbGxvY2F0aW9uKT0+XG5zYXRpc2ZpZXNJbnRlcm5hbChwcm9wb3NhbC5naXZlLGFsbG9jYXRpb24pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBpc09mZmVyU2FmZShwcm9wb3NhbCxhbGxvY2F0aW9uKXtcbnJldHVybihcbnNhdGlzZmllc0dpdmUocHJvcG9zYWwsYWxsb2NhdGlvbik+MHx8XG5zYXRpc2ZpZXNXYW50KHByb3Bvc2FsLGFsbG9jYXRpb24pPjApO1xuXG4gfVxuXG5oYXJkZW4oaXNPZmZlclNhZmUpO1xuaGFyZGVuKHNhdGlzZmllc1dhbnQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2F0aXNmaWVzV2FudCI6WyJzYXRpc2ZpZXNXYW50Il0sImlzT2ZmZXJTYWZlIjpbImlzT2ZmZXJTYWZlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANMnNaP4DgAA+A4AADAAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9pbnN0YW5jZVJlY29yZFN0b3JhZ2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy92YXQtZGF0YSIsIi4vY2xlYW5Qcm9wb3NhbC5qcyIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLHByZXBhcmVFeG9DbGFzcyxNLGFzc2VydEtleXdvcmROYW1lLEJyYW5kS2V5d29yZFJlY29yZFNoYXBlLEluc3RhbGxhdGlvblNoYXBlLEluc3RhbmNlUmVjb3JkU2hhcGUsSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlLElzc3VlclJlY29yZFNoYXBlLEtleXdvcmRTaGFwZSxUZXJtc1NoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXSxbXCIuL2NsZWFuUHJvcG9zYWwuanNcIiwgW1tcImFzc2VydEtleXdvcmROYW1lXCIsIFskaM2PX2EgPT4gKGFzc2VydEtleXdvcmROYW1lID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJCcmFuZEtleXdvcmRSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJJbnN0YWxsYXRpb25TaGFwZVwiLCBbJGjNj19hID0+IChJbnN0YWxsYXRpb25TaGFwZSA9ICRozY9fYSldXSxbXCJJbnN0YW5jZVJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKEluc3RhbmNlUmVjb3JkU2hhcGUgPSAkaM2PX2EpXV0sW1wiSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKElzc3VlcktleXdvcmRSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJJc3N1ZXJSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChJc3N1ZXJSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJLZXl3b3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoS2V5d29yZFNoYXBlID0gJGjNj19hKV1dLFtcIlRlcm1zU2hhcGVcIiwgWyRozY9fYSA9PiAoVGVybXNTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSW5zdGFuY2VSZWNvcmRTdG9yYWdlPShiYWdnYWdlKT0+e1xuY29uc3QgYXNzZXJ0SW5zdGFudGlhdGVkPShpbnN0YW5jZVJlY29yZCk9Pntcbmluc3RhbmNlUmVjb3JkIT09J3VuZGVmaW5lZCd8fFxuRmFpbCBgaW5zdGFuY2VSZWNvcmQgaGFzIG5vdCBiZWVuIGluc3RhbnRpYXRlZGA7XG4gfTtcblxuY29uc3QgSW5zdGFuY2VSZWNvcmRJPU0uaW50ZXJmYWNlKCdJbnN0YW5jZVJlY29yZCcse1xuYWRkSXNzdWVyOk0uY2FsbChLZXl3b3JkU2hhcGUsSXNzdWVyUmVjb3JkU2hhcGUpLnJldHVybnMoKSxcbmdldEluc3RhbmNlUmVjb3JkOk0uY2FsbCgpLnJldHVybnMoSW5zdGFuY2VSZWNvcmRTaGFwZSksXG5nZXRUZXJtczpNLmNhbGwoKS5yZXR1cm5zKE0uc3BsaXRSZWNvcmQoVGVybXNTaGFwZSkpLFxuZ2V0SW5zdGFsbGF0aW9uOk0uY2FsbCgpLnJldHVybnMoSW5zdGFsbGF0aW9uU2hhcGUpLFxuZ2V0SXNzdWVyczpNLmNhbGwoKS5yZXR1cm5zKElzc3VlcktleXdvcmRSZWNvcmRTaGFwZSksXG5nZXRCcmFuZHM6TS5jYWxsKCkucmV0dXJucyhCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSksXG5hc3NlcnRVbmlxdWVLZXl3b3JkOk0uY2FsbChLZXl3b3JkU2hhcGUpLnJldHVybnMoKX0pO1xuXG5cbmNvbnN0IG1ha2VJbnN0YW5jZVJlY29yZD1wcmVwYXJlRXhvQ2xhc3MoXG5iYWdnYWdlLFxuJ0luc3RhbmNlUmVjb3JkJyxcbkluc3RhbmNlUmVjb3JkSSxcbihyZWNvcmQpPT5oYXJkZW4oe2luc3RhbmNlUmVjb3JkOnJlY29yZH0pLFxue1xuYWRkSXNzdWVyKGtleXdvcmQsaXNzdWVyUmVjb3JkKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuIW93bktleXMoaXNzdWVyUmVjb3JkKS5pbmNsdWRlcyhrZXl3b3JkKXx8XG5GYWlsIGBjb25mbGljdGluZyBkZWZpbml0aW9uIG9mICR7cShrZXl3b3JkKX1gO1xuXG5hc3NlcnRJbnN0YW50aWF0ZWQoc3RhdGUuaW5zdGFuY2VSZWNvcmQpO1xuY29uc3QgaW5zdGFuY2VSZWNvcmQ9c3RhdGUuaW5zdGFuY2VSZWNvcmQ7XG5jb25zdCBuZXh0SW5zdGFuY2VSZWNvcmQ9aGFyZGVuKHtcbi4uLmluc3RhbmNlUmVjb3JkLFxudGVybXM6e1xuLi4uaW5zdGFuY2VSZWNvcmQudGVybXMsXG5pc3N1ZXJzOntcbi4uLmluc3RhbmNlUmVjb3JkLnRlcm1zLmlzc3VlcnMsXG5ba2V5d29yZF06aXNzdWVyUmVjb3JkLmlzc3Vlcn0sXG5cbmJyYW5kczp7XG4uLi5pbnN0YW5jZVJlY29yZC50ZXJtcy5icmFuZHMsXG5ba2V5d29yZF06aXNzdWVyUmVjb3JkLmJyYW5kfX19KTtcblxuXG5cbnN0YXRlLmluc3RhbmNlUmVjb3JkPW5leHRJbnN0YW5jZVJlY29yZDtcbiB9LFxuZ2V0SW5zdGFuY2VSZWNvcmQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuYXNzZXJ0SW5zdGFudGlhdGVkKHN0YXRlLmluc3RhbmNlUmVjb3JkKTtcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVJlY29yZDtcbiB9LFxuZ2V0VGVybXMoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuYXNzZXJ0SW5zdGFudGlhdGVkKHN0YXRlLmluc3RhbmNlUmVjb3JkKTtcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVJlY29yZC50ZXJtcztcbiB9LFxuZ2V0SW5zdGFsbGF0aW9uKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmFzc2VydEluc3RhbnRpYXRlZChzdGF0ZS5pbnN0YW5jZVJlY29yZCk7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VSZWNvcmQuaW5zdGFsbGF0aW9uO1xuIH0sXG5nZXRJc3N1ZXJzKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmFzc2VydEluc3RhbnRpYXRlZChzdGF0ZS5pbnN0YW5jZVJlY29yZCk7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VSZWNvcmQudGVybXMuaXNzdWVycztcbiB9LFxuZ2V0QnJhbmRzKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmFzc2VydEluc3RhbnRpYXRlZChzdGF0ZS5pbnN0YW5jZVJlY29yZCk7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VSZWNvcmQudGVybXMuYnJhbmRzO1xuIH0sXG5hc3NlcnRVbmlxdWVLZXl3b3JkKGtleXdvcmQpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5hc3NlcnRJbnN0YW50aWF0ZWQoc3RhdGUuaW5zdGFuY2VSZWNvcmQpO1xuYXNzZXJ0S2V5d29yZE5hbWUoa2V5d29yZCk7XG4hb3duS2V5cyhzdGF0ZS5pbnN0YW5jZVJlY29yZC50ZXJtcy5pc3N1ZXJzKS5pbmNsdWRlcyhrZXl3b3JkKXx8XG5GYWlsIGBrZXl3b3JkICR7cShrZXl3b3JkKX0gbXVzdCBiZSB1bmlxdWVgO1xuIH19KTtcblxuXG5cbnJldHVybiBtYWtlSW5zdGFuY2VSZWNvcmQ7XG4gfTskaM2PX29uY2UubWFrZUluc3RhbmNlUmVjb3JkU3RvcmFnZShtYWtlSW5zdGFuY2VSZWNvcmRTdG9yYWdlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2UiOlsibWFrZUluc3RhbmNlUmVjb3JkU3RvcmFnZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACbcvnRbQQAAG0EAAApAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaW50ZXJuYWwtdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuLypcblxuICovXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAiZe2OdcDAADXAwAAJwAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2lzc3VlclJlY29yZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRGdWxsSXNzdWVyUmVjb3JkIiwibWFrZUlzc3VlclJlY29yZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUlzc3VlclJlY29yZD0oYnJhbmQsaXNzdWVyLGRpc3BsYXlJbmZvKT0+XG5oYXJkZW4oe1xuYnJhbmQsXG5pc3N1ZXIsXG5hc3NldEtpbmQ6ZGlzcGxheUluZm8uYXNzZXRLaW5kLFxuZGlzcGxheUluZm99KTtcblxuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5tYWtlSXNzdWVyUmVjb3JkKG1ha2VJc3N1ZXJSZWNvcmQpO1xuY29uc3QgICAgICAgIGFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQ9KGlzc3VlclJlY29yZCk9PntcbmlmKCFpc3N1ZXJSZWNvcmQuZGlzcGxheUluZm8pe1xudGhyb3cgRmFpbCBgZnVsbCBJc3N1ZXJSZWNvcmQgcmVxdWlyZXMgZGlzcGxheUluZm9gO1xuIH1cbiB9OyRozY9fb25jZS5hc3NlcnRGdWxsSXNzdWVyUmVjb3JkKGFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUlzc3VlclJlY29yZCI6WyJtYWtlSXNzdWVyUmVjb3JkIl0sImFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQiOlsiYXNzZXJ0RnVsbElzc3VlclJlY29yZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAydfQsnxEAAJ8RAAAoAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaXNzdWVyU3RvcmFnZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvdmF0LWRhdGEiLCIuL2NsZWFuUHJvcG9zYWwuanMiLCIuL2lzc3VlclJlY29yZC5qcyJdLCJleHBvcnRzIjpbInByb3ZpZGVJc3N1ZXJTdG9yYWdlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRSxkZWVwbHlGdWxmaWxsZWRPYmplY3Qsb2JqZWN0TWFwLHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLGNsZWFuS2V5d29yZHMsbWFrZUlzc3VlclJlY29yZDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wiZGVlcGx5RnVsZmlsbGVkT2JqZWN0XCIsIFskaM2PX2EgPT4gKGRlZXBseUZ1bGZpbGxlZE9iamVjdCA9ICRozY9fYSldXSxbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCIuL2NsZWFuUHJvcG9zYWwuanNcIiwgW1tcImNsZWFuS2V5d29yZHNcIiwgWyRozY9fYSA9PiAoY2xlYW5LZXl3b3JkcyA9ICRozY9fYSldXV1dLFtcIi4vaXNzdWVyUmVjb3JkLmpzXCIsIFtbXCJtYWtlSXNzdWVyUmVjb3JkXCIsIFskaM2PX2EgPT4gKG1ha2VJc3N1ZXJSZWNvcmQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5jb25zdCBTVE9SQUdFX0lOU1RBTlRJQVRFRF9LRVk9J0lzc3VlclN0b3JhZ2VJbnN0YW50aWF0ZWQnO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJvdmlkZUlzc3VlclN0b3JhZ2U9KHpjZkJhZ2dhZ2UpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRUb0lzc3VlclJlY29yZD1wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZShcbnpjZkJhZ2dhZ2UsXG4nYnJhbmRUb0lzc3VlclJlY29yZCcpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvSXNzdWVyUmVjb3JkPXByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKFxuemNmQmFnZ2FnZSxcbidpc3N1ZXJUb0lzc3VlclJlY29yZCcpO1xuXG5cbmxldCBpbnN0YW50aWF0ZWQ9emNmQmFnZ2FnZS5oYXMoU1RPUkFHRV9JTlNUQU5USUFURURfS0VZKTtcbmNvbnN0IGFzc2VydEluc3RhbnRpYXRlZD0oKT0+e1xuaW5zdGFudGlhdGVkfHxGYWlsIGBpc3N1ZXJTdG9yYWdlIGhhcyBub3QgYmVlbiBpbnN0YW50aWF0ZWRgO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHN0b3JlSXNzdWVyUmVjb3JkPShpc3N1ZXJSZWNvcmQpPT57XG5hc3NlcnRJbnN0YW50aWF0ZWQoKTtcbmNvbnN0e2JyYW5kLGlzc3Vlcn09aXNzdWVyUmVjb3JkO1xuaWYoaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuaGFzKGlzc3Vlcikpe1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpO1xuIH1cblxuYnJhbmRUb0lzc3VlclJlY29yZC5pbml0KGJyYW5kLGlzc3VlclJlY29yZCk7XG5pc3N1ZXJUb0lzc3VlclJlY29yZC5pbml0KGlzc3Vlcixpc3N1ZXJSZWNvcmQpO1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpO1xuIH07XG5cbmNvbnN0IGdldEJ5QnJhbmQ9KGJyYW5kKT0+e1xuYXNzZXJ0SW5zdGFudGlhdGVkKCk7XG5yZXR1cm4gYnJhbmRUb0lzc3VlclJlY29yZC5nZXQoYnJhbmQpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHN0b3JlSXNzdWVyPWFzeW5jKGlzc3VlclApPT57XG5hc3NlcnRJbnN0YW50aWF0ZWQoKTtcbmNvbnN0IGJyYW5kUD1FKGlzc3VlclApLmdldEJyYW5kKCk7XG5jb25zdCBicmFuZElzc3Vlck1hdGNoUD1FKGJyYW5kUCkuaXNNeUlzc3Vlcihpc3N1ZXJQKTtcbmNvbnN0IGRpc3BsYXlJbmZvUD1FKGJyYW5kUCkuZ2V0RGlzcGxheUluZm8oKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0W2lzc3VlcixicmFuZCxicmFuZElzc3Vlck1hdGNoLGRpc3BsYXlJbmZvXT1hd2FpdCBQcm9taXNlLmFsbChbXG5pc3N1ZXJQLFxuYnJhbmRQLFxuYnJhbmRJc3N1ZXJNYXRjaFAsXG5kaXNwbGF5SW5mb1BdKTtcblxuLy9cblxuaWYoaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuaGFzKGlzc3Vlcikpe1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpO1xuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmFuZElzc3Vlck1hdGNofHxGYWlsIGBpc3N1ZXIgd2FzIHVzaW5nIGEgYnJhbmQgd2hpY2ggd2FzIG5vdCBpdHMgb3duYDtcbmNvbnN0IGlzc3VlclJlY29yZD1tYWtlSXNzdWVyUmVjb3JkKGJyYW5kLGlzc3VlcixkaXNwbGF5SW5mbyk7XG5zdG9yZUlzc3VlclJlY29yZChpc3N1ZXJSZWNvcmQpO1xucmV0dXJuIGdldEJ5QnJhbmQoYnJhbmQpO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldEFzc2V0S2luZEJ5QnJhbmQ9KGJyYW5kKT0+e1xuYXNzZXJ0SW5zdGFudGlhdGVkKCk7XG5yZXR1cm4gZ2V0QnlCcmFuZChicmFuZCkuYXNzZXRLaW5kO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBzdG9yZUlzc3VlcktleXdvcmRSZWNvcmQ9YXN5bmModW5jbGVhbklzc3VlcktleXdvcmRSZWNvcmQpPT57XG5hc3NlcnRJbnN0YW50aWF0ZWQoKTtcbmNsZWFuS2V5d29yZHModW5jbGVhbklzc3VlcktleXdvcmRSZWNvcmQpO1xuY29uc3QgaXNzdWVyUmVjb3JkUHM9b2JqZWN0TWFwKHVuY2xlYW5Jc3N1ZXJLZXl3b3JkUmVjb3JkLChpc3N1ZXJQKT0+XG5zdG9yZUlzc3Vlcihpc3N1ZXJQKSk7XG5cbmNvbnN0IGlzc3VlclJlY29yZHM9YXdhaXQgZGVlcGx5RnVsZmlsbGVkT2JqZWN0KGlzc3VlclJlY29yZFBzKTtcbmNvbnN0IGlzc3VlcnM9b2JqZWN0TWFwKGlzc3VlclJlY29yZHMsKHtpc3N1ZXJ9KT0+aXNzdWVyKTtcbmNvbnN0IGJyYW5kcz1vYmplY3RNYXAoaXNzdWVyUmVjb3Jkcywoe2JyYW5kfSk9PmJyYW5kKTtcbnJldHVybiBoYXJkZW4oe2lzc3VlcnMsYnJhbmRzfSk7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBnZXRCcmFuZEZvcklzc3Vlcj0oaXNzdWVyKT0+e1xuYXNzZXJ0SW5zdGFudGlhdGVkKCk7XG4vL1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpLmJyYW5kO1xuIH07XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0SXNzdWVyRm9yQnJhbmQ9KGJyYW5kKT0+e1xuYXNzZXJ0SW5zdGFudGlhdGVkKCk7XG4vL1xucmV0dXJuIGJyYW5kVG9Jc3N1ZXJSZWNvcmQuZ2V0KGJyYW5kKS5pc3N1ZXI7XG4gfTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZ2V0SXNzdWVyUmVjb3Jkcz0oaXNzdWVycyk9PntcbmFzc2VydEluc3RhbnRpYXRlZCgpO1xucmV0dXJuIGlzc3VlcnMubWFwKGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldCk7XG4gfTtcblxuY29uc3QgaW5zdGFudGlhdGU9KGlzc3VlclJlY29yZHM9W10pPT57XG5pZighemNmQmFnZ2FnZS5oYXMoU1RPUkFHRV9JTlNUQU5USUFURURfS0VZKSl7XG56Y2ZCYWdnYWdlLmluaXQoU1RPUkFHRV9JTlNUQU5USUFURURfS0VZLHRydWUpO1xuaW5zdGFudGlhdGVkPXRydWU7XG5mb3IoY29uc3QgcmVjb3JkIG9mIGlzc3VlclJlY29yZHMpe1xuc3RvcmVJc3N1ZXJSZWNvcmQocmVjb3JkKTtcbiB9XG4gfVxuIH07XG5cbnJldHVybntcbnN0b3JlSXNzdWVyS2V5d29yZFJlY29yZCxcbnN0b3JlSXNzdWVyLFxuc3RvcmVJc3N1ZXJSZWNvcmQsXG5nZXRBc3NldEtpbmRCeUJyYW5kLFxuZ2V0QnJhbmRGb3JJc3N1ZXIsXG5nZXRJc3N1ZXJGb3JCcmFuZCxcbmdldElzc3VlclJlY29yZHMsXG5pbnN0YW50aWF0ZX07XG5cbiB9OyRozY9fb25jZS5wcm92aWRlSXNzdWVyU3RvcmFnZShwcm92aWRlSXNzdWVyU3RvcmFnZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcm92aWRlSXNzdWVyU3RvcmFnZSI6WyJwcm92aWRlSXNzdWVyU3RvcmFnZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAzg7JVUQYAAFEGAAAlAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvbWFrZUhhbmRsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy92YXQtZGF0YSIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbImRlZmluZUR1cmFibGVIYW5kbGUiLCJtYWtlSGFuZGxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsaW5pdEVtcHR5LG1ha2VFeG8scHJlcGFyZUV4b0NsYXNzLEhhbmRsZUk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImluaXRFbXB0eVwiLCBbJGjNj19hID0+IChpbml0RW1wdHkgPSAkaM2PX2EpXV0sW1wibWFrZUV4b1wiLCBbJGjNj19hID0+IChtYWtlRXhvID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiSGFuZGxlSVwiLCBbJGjNj19hID0+IChIYW5kbGVJID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmluZUR1cmFibGVIYW5kbGU9KGJhZ2dhZ2UsaGFuZGxlVHlwZSk9PntcbnR5cGVvZiBoYW5kbGVUeXBlPT09J3N0cmluZyd8fEZhaWwgYGhhbmRsZVR5cGUgbXVzdCBiZSBhIHN0cmluZ2A7XG5jb25zdCBtYWtlSGFuZGxlPXByZXBhcmVFeG9DbGFzcyhcbmJhZ2dhZ2UsXG4gYCR7aGFuZGxlVHlwZX1IYW5kbGVgLFxuSGFuZGxlSSxcbmluaXRFbXB0eSxcbnt9KTtcblxuLy9cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZUhhbmRsZSk7XG4gfTskaM2PX29uY2UuZGVmaW5lRHVyYWJsZUhhbmRsZShkZWZpbmVEdXJhYmxlSGFuZGxlKTtcbmhhcmRlbihkZWZpbmVEdXJhYmxlSGFuZGxlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSGFuZGxlPShoYW5kbGVUeXBlKT0+e1xudHlwZW9mIGhhbmRsZVR5cGU9PT0nc3RyaW5nJ3x8RmFpbCBgaGFuZGxlVHlwZSBtdXN0IGJlIGEgc3RyaW5nYDtcbi8vXG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgKi9tYWtlRXhvKGAke2hhbmRsZVR5cGV9SGFuZGxlYCxIYW5kbGVJLHt9KSk7XG4gfTskaM2PX29uY2UubWFrZUhhbmRsZShtYWtlSGFuZGxlKTtcbmhhcmRlbihtYWtlSGFuZGxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmluZUR1cmFibGVIYW5kbGUiOlsiZGVmaW5lRHVyYWJsZUhhbmRsZSJdLCJtYWtlSGFuZGxlIjpbIm1ha2VIYW5kbGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAXY30S+ZCAADmQgAAJQAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9lcnRwIiwiQGFnb3JpYy9ub3RpZmllciIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3RpbWUiXSwiZXhwb3J0cyI6WyJBZG1pbkZhY2V0SSIsIkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSIsIkFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkU2hhcGUiLCJCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSIsIkJ1bmRsZUNhcFNoYXBlIiwiQnVuZGxlU2hhcGUiLCJFbXB0eVByb3Bvc2FsU2hhcGUiLCJFeGl0T2JqZWN0SSIsIkV4aXRPYmplY3RTaGFwZSIsIkZlZU1pbnRBY2Nlc3NTaGFwZSIsIkZ1bGxQcm9wb3NhbFNoYXBlIiwiSGFuZGxlSSIsIkhhbmRsZU9mZmVySSIsIkluc3RhbGxhdGlvblNoYXBlIiwiSW5zdGFuY2VBZG1pbkkiLCJJbnN0YW5jZUFkbWluU2hhcGUiLCJJbnN0YW5jZUhhbmRsZVNoYXBlIiwiSW5zdGFuY2VSZWNvcmRTaGFwZSIsIkluc3RhbmNlU3RvcmFnZU1hbmFnZXJJS2l0IiwiSW52aXRhdGlvbkVsZW1lbnRTaGFwZSIsIkludml0YXRpb25IYW5kbGVTaGFwZSIsIkludml0YXRpb25TaGFwZSIsIklzc3VlcktleXdvcmRSZWNvcmRTaGFwZSIsIklzc3VlclBLZXl3b3JkUmVjb3JkU2hhcGUiLCJJc3N1ZXJSZWNvcmRTaGFwZSIsIktleXdvcmRTaGFwZSIsIk9mZmVySGFuZGxlckkiLCJQYXltZW50UEtleXdvcmRSZWNvcmRTaGFwZSIsIlByaWNlUXVvdGVTaGFwZSIsIlByb3Bvc2FsU2hhcGUiLCJTZWF0RGF0YVNoYXBlIiwiU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGUiLCJTZWF0U2hhcGUiLCJUZXJtc1NoYXBlIiwiVGltZXJTaGFwZSIsIlVud3JhcHBlZEluc3RhbGxhdGlvblNoYXBlIiwiWm9lTWludEkiLCJab2VNaW50U2hhcGUiLCJab2VTZXJ2aWNlSSIsIlpvZVN0b3JhZ2VNYW5hZ2VySUtpdCIsImlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlIiwiaXNPbkRlbWFuZEV4aXRSdWxlIiwiaXNXYWl2ZWRFeGl0UnVsZSIsIm1ha2VIYW5kbGVTaGFwZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBBbW91bnRTaGFwZSxBc3NldEtpbmRTaGFwZSxCcmFuZFNoYXBlLERpc3BsYXlJbmZvU2hhcGUsSXNzdWVyS2l0U2hhcGUsSXNzdWVyU2hhcGUsUGF5bWVudFNoYXBlLFN1YnNjcmliZXJTaGFwZSxNLFRpbWVzdGFtcFNoYXBlOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRTaGFwZVwiLCBbJGjNj19hID0+IChBbW91bnRTaGFwZSA9ICRozY9fYSldXSxbXCJBc3NldEtpbmRTaGFwZVwiLCBbJGjNj19hID0+IChBc3NldEtpbmRTaGFwZSA9ICRozY9fYSldXSxbXCJCcmFuZFNoYXBlXCIsIFskaM2PX2EgPT4gKEJyYW5kU2hhcGUgPSAkaM2PX2EpXV0sW1wiRGlzcGxheUluZm9TaGFwZVwiLCBbJGjNj19hID0+IChEaXNwbGF5SW5mb1NoYXBlID0gJGjNj19hKV1dLFtcIklzc3VlcktpdFNoYXBlXCIsIFskaM2PX2EgPT4gKElzc3VlcktpdFNoYXBlID0gJGjNj19hKV1dLFtcIklzc3VlclNoYXBlXCIsIFskaM2PX2EgPT4gKElzc3VlclNoYXBlID0gJGjNj19hKV1dLFtcIlBheW1lbnRTaGFwZVwiLCBbJGjNj19hID0+IChQYXltZW50U2hhcGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJTdWJzY3JpYmVyU2hhcGVcIiwgWyRozY9fYSA9PiAoU3Vic2NyaWJlclNoYXBlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy90aW1lXCIsIFtbXCJUaW1lc3RhbXBTaGFwZVwiLCBbJGjNj19hID0+IChUaW1lc3RhbXBTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8vXG5jb25zdCAgICAgICAgS2V5d29yZFNoYXBlPU0uc3RyaW5nKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5LZXl3b3JkU2hhcGUoS2V5d29yZFNoYXBlKTtcbmNvbnN0ICAgICAgICBJbnZpdGF0aW9uSGFuZGxlU2hhcGU9TS5yZW1vdGFibGUoJ0ludml0YXRpb25IYW5kbGUnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5JbnZpdGF0aW9uSGFuZGxlU2hhcGUoSW52aXRhdGlvbkhhbmRsZVNoYXBlKTtcbmNvbnN0ICAgICAgICBJbnZpdGF0aW9uU2hhcGU9TS5yZW1vdGFibGUoJ0ludml0YXRpb24nKTskaM2PX29uY2UuSW52aXRhdGlvblNoYXBlKEludml0YXRpb25TaGFwZSk7XG5jb25zdCAgICAgICAgSW5zdGFuY2VIYW5kbGVTaGFwZT1NLnJlbW90YWJsZSgnSW5zdGFuY2VIYW5kbGUnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLkluc3RhbmNlSGFuZGxlU2hhcGUoSW5zdGFuY2VIYW5kbGVTaGFwZSk7XG5jb25zdCAgICAgICAgSW5zdGFsbGF0aW9uU2hhcGU9TS5yZW1vdGFibGUoJ0luc3RhbGxhdGlvbicpOyRozY9fb25jZS5JbnN0YWxsYXRpb25TaGFwZShJbnN0YWxsYXRpb25TaGFwZSk7XG5jb25zdCAgICAgICAgU2VhdFNoYXBlPU0ucmVtb3RhYmxlKCdTZWF0Jyk7JGjNj19vbmNlLlNlYXRTaGFwZShTZWF0U2hhcGUpO1xuXG5jb25zdCAgICAgICAgQW1vdW50S2V5d29yZFJlY29yZFNoYXBlPU0ucmVjb3JkT2YoS2V5d29yZFNoYXBlLEFtb3VudFNoYXBlKTskaM2PX29uY2UuQW1vdW50S2V5d29yZFJlY29yZFNoYXBlKEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSk7XG5jb25zdCAgICAgICAgQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmRTaGFwZT1NLnJlY29yZE9mKFxuS2V5d29yZFNoYXBlLFxuTS5wYXR0ZXJuKCkpOyRozY9fb25jZS5BbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZFNoYXBlKEFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGU9TS5yZWNvcmRPZihcbktleXdvcmRTaGFwZSxcbk0uZXJlZihQYXltZW50U2hhcGUpKTskaM2PX29uY2UuUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUoUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlPU0ucmVjb3JkT2YoS2V5d29yZFNoYXBlLElzc3VlclNoYXBlKTskaM2PX29uY2UuSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlKElzc3VlcktleXdvcmRSZWNvcmRTaGFwZSk7XG5jb25zdCAgICAgICAgSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZT1NLnJlY29yZE9mKFxuS2V5d29yZFNoYXBlLFxuTS5lcmVmKElzc3VlclNoYXBlKSk7JGjNj19vbmNlLklzc3VlclBLZXl3b3JkUmVjb3JkU2hhcGUoSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBCcmFuZEtleXdvcmRSZWNvcmRTaGFwZT1NLnJlY29yZE9mKEtleXdvcmRTaGFwZSxCcmFuZFNoYXBlKTskaM2PX29uY2UuQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUoQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgSXNzdWVyUmVjb3JkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmJyYW5kOkJyYW5kU2hhcGUsXG5pc3N1ZXI6SXNzdWVyU2hhcGUsXG5hc3NldEtpbmQ6QXNzZXRLaW5kU2hhcGV9LFxuXG57ZGlzcGxheUluZm86RGlzcGxheUluZm9TaGFwZX0pOyRozY9fb25jZS5Jc3N1ZXJSZWNvcmRTaGFwZShJc3N1ZXJSZWNvcmRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIFRlcm1zU2hhcGU9aGFyZGVuKHtcbmlzc3VlcnM6SXNzdWVyS2V5d29yZFJlY29yZFNoYXBlLFxuYnJhbmRzOkJyYW5kS2V5d29yZFJlY29yZFNoYXBlfSk7JGjNj19vbmNlLlRlcm1zU2hhcGUoVGVybXNTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIEluc3RhbmNlUmVjb3JkU2hhcGU9aGFyZGVuKHtcbmluc3RhbGxhdGlvbjpJbnN0YWxsYXRpb25TaGFwZSxcbmluc3RhbmNlOkluc3RhbmNlSGFuZGxlU2hhcGUsXG50ZXJtczpNLnNwbGl0UmVjb3JkKFRlcm1zU2hhcGUpfSk7JGjNj19vbmNlLkluc3RhbmNlUmVjb3JkU2hhcGUoSW5zdGFuY2VSZWNvcmRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIEhhbmRsZUk9TS5pbnRlcmZhY2UoJ0hhbmRsZScse30pOyRozY9fb25jZS5IYW5kbGVJKEhhbmRsZUkpO1xuXG5jb25zdCAgICAgICAgbWFrZUhhbmRsZVNoYXBlPShuYW1lKT0+TS5yZW1vdGFibGUoIGAke25hbWV9SGFuZGxlYCk7JGjNj19vbmNlLm1ha2VIYW5kbGVTaGFwZShtYWtlSGFuZGxlU2hhcGUpO1xuY29uc3QgICAgICAgIFRpbWVyU2hhcGU9bWFrZUhhbmRsZVNoYXBlKCd0aW1lcicpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLlRpbWVyU2hhcGUoVGltZXJTaGFwZSk7XG5jb25zdCAgICAgICAgRnVsbFByb3Bvc2FsU2hhcGU9aGFyZGVuKHtcbndhbnQ6QW1vdW50UGF0dGVybktleXdvcmRSZWNvcmRTaGFwZSxcbmdpdmU6QW1vdW50S2V5d29yZFJlY29yZFNoYXBlLFxuLy9cbi8vXG4vL1xuZXhpdDpNLnNwbGl0UmVjb3JkKFxue30sXG57XG5vbkRlbWFuZDpudWxsLFxud2FpdmVkOm51bGwsXG5hZnRlckRlYWRsaW5lOntcbnRpbWVyOk0uZXJlZihUaW1lclNoYXBlKSxcbmRlYWRsaW5lOlRpbWVzdGFtcFNoYXBlfX0sXG5cblxue30pfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLkZ1bGxQcm9wb3NhbFNoYXBlKEZ1bGxQcm9wb3NhbFNoYXBlKTtcbmNvbnN0ICAgICAgICBQcm9wb3NhbFNoYXBlPU0uc3BsaXRSZWNvcmQoe30sRnVsbFByb3Bvc2FsU2hhcGUse30pOyRozY9fb25jZS5Qcm9wb3NhbFNoYXBlKFByb3Bvc2FsU2hhcGUpO1xuXG5jb25zdCAgICAgICAgRW1wdHlQcm9wb3NhbFNoYXBlPU0uc3BsaXRSZWNvcmQoe1xuZ2l2ZTp7fSxcbndhbnQ6e30sXG5leGl0OntvbkRlbWFuZDpudWxsfX0pOyRozY9fb25jZS5FbXB0eVByb3Bvc2FsU2hhcGUoRW1wdHlQcm9wb3NhbFNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgaXNPbkRlbWFuZEV4aXRSdWxlPShleGl0KT0+e1xuY29uc3RbZXhpdEtleV09T2JqZWN0LmtleXMoZXhpdCk7XG5yZXR1cm4gZXhpdEtleT09PSdvbkRlbWFuZCc7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuaXNPbkRlbWFuZEV4aXRSdWxlKGlzT25EZW1hbmRFeGl0UnVsZSk7XG5jb25zdCAgICAgICAgaXNXYWl2ZWRFeGl0UnVsZT0oZXhpdCk9PntcbmNvbnN0W2V4aXRLZXldPU9iamVjdC5rZXlzKGV4aXQpO1xucmV0dXJuIGV4aXRLZXk9PT0nd2FpdmVkJztcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5pc1dhaXZlZEV4aXRSdWxlKGlzV2FpdmVkRXhpdFJ1bGUpO1xuY29uc3QgICAgICAgIGlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlPShleGl0KT0+e1xuY29uc3RbZXhpdEtleV09T2JqZWN0LmtleXMoZXhpdCk7XG5yZXR1cm4gZXhpdEtleT09PSdhZnRlckRlYWRsaW5lJztcbiB9OyRozY9fb25jZS5pc0FmdGVyRGVhZGxpbmVFeGl0UnVsZShpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZSk7XG5cbmNvbnN0ICAgICAgICBJbnZpdGF0aW9uRWxlbWVudFNoYXBlPU0uc3BsaXRSZWNvcmQoe1xuZGVzY3JpcHRpb246TS5zdHJpbmcoKSxcbmhhbmRsZTpJbnZpdGF0aW9uSGFuZGxlU2hhcGUsXG5pbnN0YW5jZTpJbnN0YW5jZUhhbmRsZVNoYXBlLFxuaW5zdGFsbGF0aW9uOkluc3RhbGxhdGlvblNoYXBlfSk7JGjNj19vbmNlLkludml0YXRpb25FbGVtZW50U2hhcGUoSW52aXRhdGlvbkVsZW1lbnRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIE9mZmVySGFuZGxlckk9TS5pbnRlcmZhY2UoJ09mZmVySGFuZGxlcicse1xuaGFuZGxlOk0uY2FsbChTZWF0U2hhcGUpLm9wdGlvbmFsKE0uYW55KCkpLnJldHVybnMoTS5hbnkoKSl9KTskaM2PX29uY2UuT2ZmZXJIYW5kbGVySShPZmZlckhhbmRsZXJJKTtcblxuXG5jb25zdCAgICAgICAgU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGU9TS5hcnJheU9mKFxuaGFyZGVuKHtcbnNlYXRIYW5kbGU6U2VhdFNoYXBlLFxuYWxsb2NhdGlvbjpBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGV9KSk7JGjNj19vbmNlLlNlYXRIYW5kbGVBbGxvY2F0aW9uc1NoYXBlKFNlYXRIYW5kbGVBbGxvY2F0aW9uc1NoYXBlKTtcblxuXG5cbmNvbnN0ICAgICAgICBab2VNaW50U2hhcGU9TS5yZW1vdGFibGUoJ1pvZU1pbnQnKTskaM2PX29uY2UuWm9lTWludFNoYXBlKFpvZU1pbnRTaGFwZSk7XG5jb25zdCAgICAgICAgWm9lTWludEk9TS5pbnRlcmZhY2UoJ1pvZU1pbnQnLHtcbmdldElzc3VlclJlY29yZDpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclJlY29yZFNoYXBlKSxcbm1pbnRBbmRFc2Nyb3c6TS5jYWxsKEFtb3VudFNoYXBlKS5yZXR1cm5zKCksXG53aXRoZHJhd0FuZEJ1cm46TS5jYWxsKEFtb3VudFNoYXBlKS5yZXR1cm5zKCl9KTskaM2PX29uY2UuWm9lTWludEkoWm9lTWludEkpO1xuXG5cbmNvbnN0ICAgICAgICBGZWVNaW50QWNjZXNzU2hhcGU9TS5yZW1vdGFibGUoJ0ZlZU1pbnRBY2Nlc3MnKTskaM2PX29uY2UuRmVlTWludEFjY2Vzc1NoYXBlKEZlZU1pbnRBY2Nlc3NTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBFeGl0T2JqZWN0ST1NLmludGVyZmFjZSgnRXhpdCBPYmplY3QnLHtcbmV4aXQ6TS5jYWxsKCkucmV0dXJucygpfSk7JGjNj19vbmNlLkV4aXRPYmplY3RJKEV4aXRPYmplY3RJKTtcblxuXG5jb25zdCAgICAgICAgRXhpdE9iamVjdFNoYXBlPU0ucmVtb3RhYmxlKCdFeGl0T2JqJyk7JGjNj19vbmNlLkV4aXRPYmplY3RTaGFwZShFeGl0T2JqZWN0U2hhcGUpO1xuY29uc3QgICAgICAgIEluc3RhbmNlQWRtaW5TaGFwZT1NLnJlbW90YWJsZSgnSW5zdGFuY2VBZG1pbicpOyRozY9fb25jZS5JbnN0YW5jZUFkbWluU2hhcGUoSW5zdGFuY2VBZG1pblNoYXBlKTtcbmNvbnN0ICAgICAgICBJbnN0YW5jZUFkbWluST1NLmludGVyZmFjZSgnSW5zdGFuY2VBZG1pbicse1xubWFrZUludml0YXRpb246TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSxNLnN0cmluZygpKS5cbm9wdGlvbmFsKE0ucmVjb3JkKCksTS5wYXR0ZXJuKCkpLlxucmV0dXJucyhJbnZpdGF0aW9uU2hhcGUpLFxuc2F2ZUlzc3VlcjpNLmNhbGxXaGVuKE0uYXdhaXQoSXNzdWVyU2hhcGUpLEtleXdvcmRTaGFwZSkucmV0dXJucyhcbklzc3VlclJlY29yZFNoYXBlKSxcblxubWFrZU5vRXNjcm93U2VhdDpNLmNhbGwoXG5BbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUsXG5Qcm9wb3NhbFNoYXBlLFxuRXhpdE9iamVjdFNoYXBlLFxuU2VhdFNoYXBlKS5cbnJldHVybnMoU2VhdFNoYXBlKSxcbmV4aXRBbGxTZWF0czpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpLFxuZmFpbEFsbFNlYXRzOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5leGl0U2VhdDpNLmNhbGwoU2VhdFNoYXBlLE0uYW55KCkpLnJldHVybnMoKSxcbmZhaWxTZWF0Ok0uY2FsbChTZWF0U2hhcGUsTS5hbnkoKSkucmV0dXJucygpLFxubWFrZVpvZU1pbnQ6TS5jYWxsKEtleXdvcmRTaGFwZSkuXG5vcHRpb25hbChcbkFzc2V0S2luZFNoYXBlLFxuRGlzcGxheUluZm9TaGFwZSxcbk0uc3BsaXRSZWNvcmQoaGFyZGVuKHt9KSxoYXJkZW4oe2VsZW1lbnRTaGFwZTpNLnBhdHRlcm4oKX0pKSkuXG5cbnJldHVybnMoTS5yZW1vdGFibGUoJ3pvZU1pbnQnKSksXG5yZWdpc3RlckZlZU1pbnQ6TS5jYWxsKEtleXdvcmRTaGFwZSxGZWVNaW50QWNjZXNzU2hhcGUpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnZmVlTWludCcpKSxcblxucmVwbGFjZUFsbG9jYXRpb25zOk0uY2FsbChTZWF0SGFuZGxlQWxsb2NhdGlvbnNTaGFwZSkucmV0dXJucygpLFxuc3RvcEFjY2VwdGluZ09mZmVyczpNLmNhbGwoKS5yZXR1cm5zKCksXG5zZXRPZmZlckZpbHRlcjpNLmNhbGwoTS5hcnJheU9mKE0uc3RyaW5nKCkpKS5yZXR1cm5zKCksXG5nZXRPZmZlckZpbHRlcjpNLmNhbGwoKS5yZXR1cm5zKE0uYXJyYXlPZihNLnN0cmluZygpKSksXG5nZXRFeGl0U3Vic2NyaWJlcjpNLmNhbGwoU2VhdFNoYXBlKS5yZXR1cm5zKFN1YnNjcmliZXJTaGFwZSksXG5pc0Jsb2NrZWQ6TS5jYWxsKE0uc3RyaW5nKCkpLnJldHVybnMoTS5ib29sZWFuKCkpLFxucmVwYWlyQ29udHJhY3RDb21wbGV0aW9uV2F0Y2hlcjpNLmNhbGwoKS5yZXR1cm5zKCl9KTskaM2PX29uY2UuSW5zdGFuY2VBZG1pbkkoSW5zdGFuY2VBZG1pbkkpO1xuXG5cbmNvbnN0ICAgICAgICBJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdD1oYXJkZW4oe1xuaW5zdGFuY2VTdG9yYWdlTWFuYWdlcjpNLmludGVyZmFjZSgnSW5zdGFuY2VTdG9yYWdlTWFuYWdlcicse1xuZ2V0VGVybXM6TS5jYWxsKCkucmV0dXJucyhNLnNwbGl0UmVjb3JkKFRlcm1zU2hhcGUpKSxcbmdldElzc3VlcnM6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUpLFxuZ2V0QnJhbmRzOk0uY2FsbCgpLnJldHVybnMoQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUpLFxuZ2V0SW5zdGFsbGF0aW9uOk0uY2FsbCgpLnJldHVybnMoSW5zdGFsbGF0aW9uU2hhcGUpLFxuZ2V0SW52aXRhdGlvbklzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclNoYXBlKSxcblxuc2F2ZUlzc3VlcjpNLmNhbGwoSXNzdWVyU2hhcGUsS2V5d29yZFNoYXBlKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbm1ha2Vab2VNaW50Ok0uY2FsbChLZXl3b3JkU2hhcGUpLlxub3B0aW9uYWwoXG5Bc3NldEtpbmRTaGFwZSxcbkRpc3BsYXlJbmZvU2hhcGUsXG5NLnNwbGl0UmVjb3JkKGhhcmRlbih7fSksaGFyZGVuKHtlbGVtZW50U2hhcGU6TS5wYXR0ZXJuKCl9KSkpLlxuXG5yZXR1cm5zKE0uZXJlZihab2VNaW50U2hhcGUpKSxcbnJlZ2lzdGVyRmVlTWludDpNLmNhbGwoS2V5d29yZFNoYXBlLEZlZU1pbnRBY2Nlc3NTaGFwZSkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdmZWVNaW50JykpLFxuXG5nZXRJbnN0YW5jZVJlY29yZDpNLmNhbGwoKS5yZXR1cm5zKEluc3RhbmNlUmVjb3JkU2hhcGUpLFxuZ2V0SXNzdWVyUmVjb3JkczpNLmNhbGwoKS5yZXR1cm5zKE0uYXJyYXlPZihJc3N1ZXJSZWNvcmRTaGFwZSkpLFxuZ2V0V2l0aGRyYXdGYWNldDpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCdXaXRoZHJhd0ZhY2V0JykpLFxuaW5pdEluc3RhbmNlQWRtaW46TS5jYWxsKFxuSW5zdGFuY2VIYW5kbGVTaGFwZSxcbk0ucmVtb3RhYmxlKCdpbnN0YW5jZUFkbWluJykpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG5kZWxldGVJbnN0YW5jZUFkbWluOk0uY2FsbChJbnN0YW5jZUFkbWluU2hhcGUpLnJldHVybnMoKSxcbm1ha2VJbnZpdGF0aW9uOk0uY2FsbChJbnZpdGF0aW9uSGFuZGxlU2hhcGUsTS5zdHJpbmcoKSkuXG5vcHRpb25hbChNLnJlY29yZCgpLE0ucGF0dGVybigpKS5cbnJldHVybnMoUGF5bWVudFNoYXBlKSxcbmdldFJvb3Q6TS5jYWxsKCkucmV0dXJucyhNLmFueSgpKSxcbmdldEFkbWluTm9kZTpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCdhZG1pbk5vZGUnKSl9KSxcblxud2l0aGRyYXdGYWNldDpNLmludGVyZmFjZSgnV2l0aGRyYXdGYWNldCcse1xud2l0aGRyYXdQYXltZW50czpNLmNhbGwoQW1vdW50S2V5d29yZFJlY29yZFNoYXBlKS5yZXR1cm5zKFxuUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUpfSksXG5cblxuaGVscGVyczpNLmludGVyZmFjZSgnSW5zdGFuY2VTdG9yYWdlTWFuYWdlciBoZWxwZXInLHtcbndyYXBJc3N1ZXJLaXRXaXRoWm9lTWludDpNLmNhbGwoXG5LZXl3b3JkU2hhcGUsXG5Jc3N1ZXJLaXRTaGFwZSxcbk0ucmVtb3RhYmxlKCdhZG1pbk5vZGUnKSkuXG5yZXR1cm5zKFpvZU1pbnRTaGFwZSl9KX0pOyRozY9fb25jZS5JbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdChJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdCk7XG5cblxuXG5jb25zdCAgICAgICAgQnVuZGxlQ2FwU2hhcGU9TS5yZW1vdGFibGUoJ2J1bmRsZUNhcCcpOyRozY9fb25jZS5CdW5kbGVDYXBTaGFwZShCdW5kbGVDYXBTaGFwZSk7XG5jb25zdCAgICAgICAgQnVuZGxlU2hhcGU9TS5hbmQoXG5NLnNwbGl0UmVjb3JkKHttb2R1bGVGb3JtYXQ6TS5hbnkoKX0pLFxuTS5yZWNvcmRPZihNLnN0cmluZygpLE0uc3RyaW5nKHtzdHJpbmdMZW5ndGhMaW1pdDpJbmZpbml0eX0pKSk7JGjNj19vbmNlLkJ1bmRsZVNoYXBlKEJ1bmRsZVNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGU9TS5zcGxpdFJlY29yZChcbmhhcmRlbih7XG5pbnN0YWxsYXRpb246SW5zdGFsbGF0aW9uU2hhcGV9KSxcblxuaGFyZGVuKHtcbmJ1bmRsZTpNLnJlY29yZE9mKE0uc3RyaW5nKCksTS5zdHJpbmcoe3N0cmluZ0xlbmd0aExpbWl0OkluZmluaXR5fSkpLFxuYnVuZGxlQ2FwOkJ1bmRsZUNhcFNoYXBlLFxuYnVuZGxlSUQ6TS5zdHJpbmcoKX0pLFxuXG5oYXJkZW4oe30pKTskaM2PX29uY2UuVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGUoVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBab2VTdG9yYWdlTWFuYWdlcklLaXQ9aGFyZGVuKHtcbnpvZVNlcnZpY2VEYXRhQWNjZXNzOk0uaW50ZXJmYWNlKCdab2VTZXJ2aWNlIGRhdGFBY2Nlc3MnLHtcbmdldFRlcm1zOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKE0uc3BsaXRSZWNvcmQoVGVybXNTaGFwZSkpLFxuZ2V0SXNzdWVyczpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUpLFxuZ2V0QnJhbmRzOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKEJyYW5kS2V5d29yZFJlY29yZFNoYXBlKSxcbmdldEluc3RhbGxhdGlvbjpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhcbk0uZXJlZihNLnJlbW90YWJsZSgnSW5zdGFsbGF0aW9uJykpKSxcblxuZ2V0SW52aXRhdGlvbklzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclNoYXBlKSxcblxuZ2V0QnVuZGxlSURGcm9tSW5zdGFsbGF0aW9uOk0uY2FsbChJbnN0YWxsYXRpb25TaGFwZSkucmV0dXJucyhcbk0uZXJlZihNLnN0cmluZygpKSksXG5cbmluc3RhbGxCdW5kbGU6TS5jYWxsKE0ub3IoSW5zdGFuY2VIYW5kbGVTaGFwZSxCdW5kbGVTaGFwZSkpLlxub3B0aW9uYWwoTS5zdHJpbmcoKSkuXG5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmluc3RhbGxCdW5kbGVJRDpNLmNhbGwoTS5zdHJpbmcoKSkuXG5vcHRpb25hbChNLnN0cmluZygpKS5cbnJldHVybnMoTS5wcm9taXNlKCkpLFxuXG5nZXRQdWJsaWNGYWNldDpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhcbk0uZXJlZihNLnJlbW90YWJsZSgnUHVibGljRmFjZXQnKSkpLFxuXG5nZXRPZmZlckZpbHRlcjpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhNLmFycmF5T2YoTS5zdHJpbmcoKSkpLFxuZ2V0UHJvcG9zYWxTaGFwZUZvckludml0YXRpb246TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSkucmV0dXJucyhcbk0ub3B0KE0ucGF0dGVybigpKSl9KSxcblxuXG5tYWtlT2ZmZXJBY2Nlc3M6TS5pbnRlcmZhY2UoJ1pvZVN0b3JhZ2UgbWFrZU9mZmVyIGFjY2Vzcycse1xuZ2V0QXNzZXRLaW5kQnlCcmFuZDpNLmNhbGwoQnJhbmRTaGFwZSkucmV0dXJucyhBc3NldEtpbmRTaGFwZSksXG5nZXRJbnN0YW5jZUFkbWluOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ2luc3RhbmNlQWRtaW4nKSksXG5cbmdldFByb3Bvc2FsU2hhcGVGb3JJbnZpdGF0aW9uOk0uY2FsbChJbnZpdGF0aW9uSGFuZGxlU2hhcGUpLnJldHVybnMoXG5NLm9wdChNLnBhdHRlcm4oKSkpLFxuXG5nZXRJbnZpdGF0aW9uSXNzdWVyOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyU2hhcGUpLFxuZGVwb3NpdFBheW1lbnRzOk0uY2FsbChQcm9wb3NhbFNoYXBlLFBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlKS5yZXR1cm5zKFxuTS5wcm9taXNlKCkpfSksXG5cblxuc3RhcnRJbnN0YW5jZUFjY2VzczpNLmludGVyZmFjZSgnWm9lU3RvcmFnZSBzdGFydEluc3RhbmNlIGFjY2Vzcycse1xubWFrZVpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXI6TS5jYWxsKFxuSW5zdGFsbGF0aW9uU2hhcGUsXG5NLmFueSgpLFxuSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZSxcbk0ub3IoSW5zdGFuY2VIYW5kbGVTaGFwZSxCdW5kbGVTaGFwZSksXG5NLm9yKEJ1bmRsZUNhcFNoYXBlLEJ1bmRsZVNoYXBlKSxcbk0uc3RyaW5nKCkpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG51bndyYXBJbnN0YWxsYXRpb246TS5jYWxsV2hlbihNLmVyZWYoSW5zdGFsbGF0aW9uU2hhcGUpKS5yZXR1cm5zKFxuVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGUpfSksXG5cblxuaW52aXRhdGlvbklzc3VlckFjY2VzczpNLmludGVyZmFjZSgnWm9lU3RvcmFnZSBpbnZpdGF0aW9uSXNzdWVyJyx7XG5nZXRJbnZpdGF0aW9uSXNzdWVyOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyU2hhcGUpfSl9KTskaM2PX29uY2UuWm9lU3RvcmFnZU1hbmFnZXJJS2l0KFpvZVN0b3JhZ2VNYW5hZ2VySUtpdCk7XG5cblxuXG5jb25zdCAgICAgICAgWm9lU2VydmljZUk9TS5pbnRlcmZhY2UoJ1pvZVNlcnZpY2UnLHtcbmluc3RhbGw6TS5jYWxsKE0uYW55KCkpLm9wdGlvbmFsKE0uc3RyaW5nKCkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuaW5zdGFsbEJ1bmRsZUlEOk0uY2FsbChNLnN0cmluZygpKS5vcHRpb25hbChNLnN0cmluZygpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnN0YXJ0SW5zdGFuY2U6TS5jYWxsKE0uZXJlZihJbnN0YWxsYXRpb25TaGFwZSkpLlxub3B0aW9uYWwoSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZSxNLnJlY29yZCgpLE0ucmVjb3JkKCksTS5zdHJpbmcoKSkuXG5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbm9mZmVyOk0uY2FsbChNLmVyZWYoSW52aXRhdGlvblNoYXBlKSkuXG5vcHRpb25hbChQcm9wb3NhbFNoYXBlLFBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlLE0uYW55KCkpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG5cbmdldE9mZmVyRmlsdGVyOk0uY2FsbFdoZW4oTS5hd2FpdChJbnN0YW5jZUhhbmRsZVNoYXBlKSkucmV0dXJucyhcbk0uYXJyYXlPZihNLnN0cmluZygpKSksXG5cbmdldEludml0YXRpb25Jc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRGZWVJc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRCcmFuZHM6TS5jYWxsV2hlbihNLmF3YWl0KEluc3RhbmNlSGFuZGxlU2hhcGUpKS5yZXR1cm5zKFxuQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUpLFxuXG5nZXRJc3N1ZXJzOk0uY2FsbFdoZW4oTS5hd2FpdChJbnN0YW5jZUhhbmRsZVNoYXBlKSkucmV0dXJucyhcbklzc3VlcktleXdvcmRSZWNvcmRTaGFwZSksXG5cbmdldFB1YmxpY0ZhY2V0Ok0uY2FsbFdoZW4oTS5hd2FpdChJbnN0YW5jZUhhbmRsZVNoYXBlKSkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdQdWJsaWNGYWNldCcpKSxcblxuZ2V0VGVybXM6TS5jYWxsV2hlbihNLmF3YWl0KEluc3RhbmNlSGFuZGxlU2hhcGUpKS5yZXR1cm5zKE0uYW55KCkpLFxuZ2V0SW5zdGFsbGF0aW9uRm9ySW5zdGFuY2U6TS5jYWxsV2hlbihNLmF3YWl0KEluc3RhbmNlSGFuZGxlU2hhcGUpKS5yZXR1cm5zKFxuTS5lcmVmKE0ucmVtb3RhYmxlKCdJbnN0YWxsYXRpb24nKSkpLFxuXG5nZXRCdW5kbGVJREZyb21JbnN0YWxsYXRpb246TS5jYWxsKEluc3RhbGxhdGlvblNoYXBlKS5yZXR1cm5zKFxuTS5lcmVmKE0uc3RyaW5nKCkpKSxcblxuXG5nZXRJbnN0YWxsYXRpb246TS5jYWxsKE0uZXJlZihJbnZpdGF0aW9uU2hhcGUpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldEluc3RhbmNlOk0uY2FsbChNLmVyZWYoSW52aXRhdGlvblNoYXBlKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRDb25maWd1cmF0aW9uOk0uY2FsbCgpLnJldHVybnMoe1xuZmVlSXNzdWVyQ29uZmlnOntcbm5hbWU6TS5zdHJpbmcoKSxcbmFzc2V0S2luZDonbmF0JyxcbmRpc3BsYXlJbmZvOkRpc3BsYXlJbmZvU2hhcGV9fSksXG5cblxuZ2V0SW52aXRhdGlvbkRldGFpbHM6TS5jYWxsKE0uZXJlZihJbnZpdGF0aW9uU2hhcGUpKS5yZXR1cm5zKE0uYW55KCkpLFxuZ2V0UHJvcG9zYWxTaGFwZUZvckludml0YXRpb246TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSkucmV0dXJucyhcbk0ub3B0KFByb3Bvc2FsU2hhcGUpKX0pOyRozY9fb25jZS5ab2VTZXJ2aWNlSShab2VTZXJ2aWNlSSk7XG5cblxuXG5jb25zdCAgICAgICAgQWRtaW5GYWNldEk9TS5pbnRlcmZhY2UoJ1pjZkFkbWluRmFjZXQnLHtcbmdldFZhdFNodXRkb3duUHJvbWlzZTpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnJlc3RhcnRDb250cmFjdDpNLmNhbGwoKS5vcHRpb25hbChNLmFueSgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnVwZ3JhZGVDb250cmFjdDpNLmNhbGwoTS5zdHJpbmcoKSkub3B0aW9uYWwoTS5hbnkoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG50ZXJtaW5hdGVDb250cmFjdDpNLmNhbGwoTS5lcnJvcigpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKX0pOyRozY9fb25jZS5BZG1pbkZhY2V0SShBZG1pbkZhY2V0SSk7XG5cblxuY29uc3QgICAgICAgIFNlYXREYXRhU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbnByb3Bvc2FsOlByb3Bvc2FsU2hhcGUsXG5pbml0aWFsQWxsb2NhdGlvbjpBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUsXG5zZWF0SGFuZGxlOlNlYXRTaGFwZX0sXG5cbntcbm9mZmVyQXJnczpNLmFueSgpfSk7JGjNj19vbmNlLlNlYXREYXRhU2hhcGUoU2VhdERhdGFTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSGFuZGxlT2ZmZXJJPU0uaW50ZXJmYWNlKCdIYW5kbGVPZmZlcicse1xuaGFuZGxlT2ZmZXI6TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSxTZWF0RGF0YVNoYXBlKS5yZXR1cm5zKHtcbm9mZmVyUmVzdWx0UHJvbWlzZTpNLnByb21pc2UoKSxcbmV4aXRPYmo6RXhpdE9iamVjdFNoYXBlfSl9KTskaM2PX29uY2UuSGFuZGxlT2ZmZXJJKEhhbmRsZU9mZmVySSk7XG5cblxuXG5jb25zdCAgICAgICAgUHJpY2VRdW90ZVNoYXBlPWhhcmRlbih7XG5xdW90ZUFtb3VudDpBbW91bnRTaGFwZSxcbnF1b3RlUGF5bWVudDpNLmVyZWYoUGF5bWVudFNoYXBlKX0pOyRozY9fb25jZS5QcmljZVF1b3RlU2hhcGUoUHJpY2VRdW90ZVNoYXBlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IktleXdvcmRTaGFwZSI6WyJLZXl3b3JkU2hhcGUiXSwiSW52aXRhdGlvbkhhbmRsZVNoYXBlIjpbIkludml0YXRpb25IYW5kbGVTaGFwZSJdLCJJbnZpdGF0aW9uU2hhcGUiOlsiSW52aXRhdGlvblNoYXBlIl0sIkluc3RhbmNlSGFuZGxlU2hhcGUiOlsiSW5zdGFuY2VIYW5kbGVTaGFwZSJdLCJJbnN0YWxsYXRpb25TaGFwZSI6WyJJbnN0YWxsYXRpb25TaGFwZSJdLCJTZWF0U2hhcGUiOlsiU2VhdFNoYXBlIl0sIkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSI6WyJBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUiXSwiQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmRTaGFwZSI6WyJBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZFNoYXBlIl0sIlBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlIjpbIlBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlIl0sIklzc3VlcktleXdvcmRSZWNvcmRTaGFwZSI6WyJJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUiXSwiSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZSI6WyJJc3N1ZXJQS2V5d29yZFJlY29yZFNoYXBlIl0sIkJyYW5kS2V5d29yZFJlY29yZFNoYXBlIjpbIkJyYW5kS2V5d29yZFJlY29yZFNoYXBlIl0sIklzc3VlclJlY29yZFNoYXBlIjpbIklzc3VlclJlY29yZFNoYXBlIl0sIlRlcm1zU2hhcGUiOlsiVGVybXNTaGFwZSJdLCJJbnN0YW5jZVJlY29yZFNoYXBlIjpbIkluc3RhbmNlUmVjb3JkU2hhcGUiXSwiSGFuZGxlSSI6WyJIYW5kbGVJIl0sIm1ha2VIYW5kbGVTaGFwZSI6WyJtYWtlSGFuZGxlU2hhcGUiXSwiVGltZXJTaGFwZSI6WyJUaW1lclNoYXBlIl0sIkZ1bGxQcm9wb3NhbFNoYXBlIjpbIkZ1bGxQcm9wb3NhbFNoYXBlIl0sIlByb3Bvc2FsU2hhcGUiOlsiUHJvcG9zYWxTaGFwZSJdLCJFbXB0eVByb3Bvc2FsU2hhcGUiOlsiRW1wdHlQcm9wb3NhbFNoYXBlIl0sImlzT25EZW1hbmRFeGl0UnVsZSI6WyJpc09uRGVtYW5kRXhpdFJ1bGUiXSwiaXNXYWl2ZWRFeGl0UnVsZSI6WyJpc1dhaXZlZEV4aXRSdWxlIl0sImlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlIjpbImlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlIl0sIkludml0YXRpb25FbGVtZW50U2hhcGUiOlsiSW52aXRhdGlvbkVsZW1lbnRTaGFwZSJdLCJPZmZlckhhbmRsZXJJIjpbIk9mZmVySGFuZGxlckkiXSwiU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGUiOlsiU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGUiXSwiWm9lTWludFNoYXBlIjpbIlpvZU1pbnRTaGFwZSJdLCJab2VNaW50SSI6WyJab2VNaW50SSJdLCJGZWVNaW50QWNjZXNzU2hhcGUiOlsiRmVlTWludEFjY2Vzc1NoYXBlIl0sIkV4aXRPYmplY3RJIjpbIkV4aXRPYmplY3RJIl0sIkV4aXRPYmplY3RTaGFwZSI6WyJFeGl0T2JqZWN0U2hhcGUiXSwiSW5zdGFuY2VBZG1pblNoYXBlIjpbIkluc3RhbmNlQWRtaW5TaGFwZSJdLCJJbnN0YW5jZUFkbWluSSI6WyJJbnN0YW5jZUFkbWluSSJdLCJJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdCI6WyJJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdCJdLCJCdW5kbGVDYXBTaGFwZSI6WyJCdW5kbGVDYXBTaGFwZSJdLCJCdW5kbGVTaGFwZSI6WyJCdW5kbGVTaGFwZSJdLCJVbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZSI6WyJVbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZSJdLCJab2VTdG9yYWdlTWFuYWdlcklLaXQiOlsiWm9lU3RvcmFnZU1hbmFnZXJJS2l0Il0sIlpvZVNlcnZpY2VJIjpbIlpvZVNlcnZpY2VJIl0sIkFkbWluRmFjZXRJIjpbIkFkbWluRmFjZXRJIl0sIlNlYXREYXRhU2hhcGUiOlsiU2VhdERhdGFTaGFwZSJdLCJIYW5kbGVPZmZlckkiOlsiSGFuZGxlT2ZmZXJJIl0sIlByaWNlUXVvdGVTaGFwZSI6WyJQcmljZVF1b3RlU2hhcGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAcrWfhrkBAAC5AQAAKAAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3R5cGVzLWFtYmllbnQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cbiAqL1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALctGYNIBAAASAQAADIAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy96b2VTZXJ2aWNlL2NyZWF0ZVpDRlZhdC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiZ2V0WmNmQnVuZGxlQ2FwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5jb25zdCAgICAgICAgZ2V0WmNmQnVuZGxlQ2FwPSh6Y2ZTcGVjLHZhdEFkbWluU3ZjKT0+e1xubGV0IHpjZkJ1bmRsZUNhcFA7XG5pZih6Y2ZTcGVjLmJ1bmRsZUNhcCl7XG56Y2ZCdW5kbGVDYXBQPXpjZlNwZWMuYnVuZGxlQ2FwO1xuIH1lbHNlIGlmKHpjZlNwZWMubmFtZSl7XG56Y2ZCdW5kbGVDYXBQPUUodmF0QWRtaW5TdmMpLmdldE5hbWVkQnVuZGxlQ2FwKHpjZlNwZWMubmFtZSk7XG4gfWVsc2UgaWYoemNmU3BlYy5pZCl7XG56Y2ZCdW5kbGVDYXBQPUUodmF0QWRtaW5TdmMpLmdldEJ1bmRsZUNhcCh6Y2ZTcGVjLmlkKTtcbiB9ZWxzZXtcbmNvbnN0IGtleXM9T2JqZWN0LmtleXMoemNmU3BlYykuam9pbignLCcpO1xuRmFpbCBgc2V0dXBDcmVhdGVaQ0ZWYXQ6IGJhZCB6Y2ZTcGVjLCBoYXMga2V5cyAnJHtxKGtleXMpfSdgO1xuIH1cblxucmV0dXJuIHpjZkJ1bmRsZUNhcFA7XG4gfTskaM2PX29uY2UuZ2V0WmNmQnVuZGxlQ2FwKGdldFpjZkJ1bmRsZUNhcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRaY2ZCdW5kbGVDYXAiOlsiZ2V0WmNmQnVuZGxlQ2FwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADojz8rfDQAA3w0AADMAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy96b2VTZXJ2aWNlL2VzY3Jvd1N0b3JhZ2UuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9lcnRwIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL3ZhdC1kYXRhIiwiLi9pbnRlcm5hbC10eXBlcy5qcyIsIi4uL2NsZWFuUHJvcG9zYWwuanMiXSwiZXhwb3J0cyI6WyJwcm92aWRlRXNjcm93U3RvcmFnZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBBbW91bnRNYXRoLEUscSxGYWlsLGRlZXBseUZ1bGZpbGxlZE9iamVjdCxvYmplY3RNYXAscHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUsY2xlYW5LZXl3b3JkczskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvZXJ0cFwiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wiZGVlcGx5RnVsZmlsbGVkT2JqZWN0XCIsIFskaM2PX2EgPT4gKGRlZXBseUZ1bGZpbGxlZE9iamVjdCA9ICRozY9fYSldXSxbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCIuL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXSxbXCIuLi9jbGVhblByb3Bvc2FsLmpzXCIsIFtbXCJjbGVhbktleXdvcmRzXCIsIFskaM2PX2EgPT4gKGNsZWFuS2V5d29yZHMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcm92aWRlRXNjcm93U3RvcmFnZT0oYmFnZ2FnZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvUHVyc2U9cHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoYmFnZ2FnZSwnYnJhbmRUb1B1cnNlJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjcmVhdGVQdXJzZT0oaXNzdWVyLGJyYW5kKT0+e1xuaWYoYnJhbmRUb1B1cnNlLmhhcyhicmFuZCkpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5yZXR1cm4gRS53aGVuKFxuRShpc3N1ZXIpLm1ha2VFbXB0eVB1cnNlKCksXG4ocHVyc2UpPT57XG4vL1xuaWYoIWJyYW5kVG9QdXJzZS5oYXMoYnJhbmQpKXtcbmJyYW5kVG9QdXJzZS5pbml0KGJyYW5kLHB1cnNlKTtcbiB9XG4gfSxcbihlcnIpPT5cbkZhaWwgYEEgcHVyc2UgY291bGQgbm90IGJlIGNyZWF0ZWQgZm9yIGJyYW5kICR7YnJhbmR9IGJlY2F1c2U6ICR7ZXJyfWApO1xuXG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IHByb3ZpZGVMb2NhbFB1cnNlPShpc3N1ZXIsYnJhbmQpPT57XG5pZihicmFuZFRvUHVyc2UuaGFzKGJyYW5kKSl7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICovYnJhbmRUb1B1cnNlLmdldChicmFuZCkpO1xuIH1lbHNle1xuY29uc3QgbG9jYWxQdXJzZT1pc3N1ZXIubWFrZUVtcHR5UHVyc2UoKTtcbmJyYW5kVG9QdXJzZS5pbml0KGJyYW5kLGxvY2FsUHVyc2UpO1xucmV0dXJuIGxvY2FsUHVyc2U7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdpdGhkcmF3UGF5bWVudHM9KGFsbG9jYXRpb24pPT5cbm9iamVjdE1hcChhbGxvY2F0aW9uLChhbW91bnQpPT5cbkUoYnJhbmRUb1B1cnNlLmdldChhbW91bnQuYnJhbmQpKS53aXRoZHJhdyhhbW91bnQpKTtcblxuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRvRGVwb3NpdFBheW1lbnQ9KHBheW1lbnRQLGFtb3VudCk9PntcbmNvbnN0IHB1cnNlPWJyYW5kVG9QdXJzZS5nZXQoYW1vdW50LmJyYW5kKTtcbnJldHVybiBFLndoZW4ocGF5bWVudFAsKHBheW1lbnQpPT5FKHB1cnNlKS5kZXBvc2l0KHBheW1lbnQsYW1vdW50KSk7XG4gfTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZXBvc2l0UGF5bWVudHM9YXN5bmMocHJvcG9zYWwscGF5bWVudHMpPT57XG5jb25zdHtnaXZlLHdhbnR9PXByb3Bvc2FsO1xuY29uc3QgZ2l2ZUtleXdvcmRzPU9iamVjdC5rZXlzKGdpdmUpO1xuY29uc3QgcGF5bWVudEtleXdvcmRzPWNsZWFuS2V5d29yZHMocGF5bWVudHMpO1xuXG4vL1xuLy9cbi8vXG5mb3IoY29uc3Qga2V5d29yZCBvZiBwYXltZW50S2V5d29yZHMpe1xuZ2l2ZUtleXdvcmRzLmluY2x1ZGVzKGtleXdvcmQpfHxcbkZhaWwgYFRoZSAke3EoXG5rZXl3b3JkKVxuIH0ga2V5d29yZCBpbiB0aGUgcGF5bWVudEtleXdvcmRSZWNvcmQgd2FzIG5vdCBhIGtleXdvcmQgaW4gcHJvcG9zYWwuZ2l2ZSwgd2hpY2ggaGFkIGtleXdvcmRzOiAke3EoXG5naXZlS2V5d29yZHMpXG4gfWA7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVwb3NpdFBzPW9iamVjdE1hcChnaXZlLChhbW91bnQsa2V5d29yZCk9PntcbnBheW1lbnRzW2tleXdvcmRdIT09dW5kZWZpbmVkfHxcbkZhaWwgYFRoZSAke3EoXG5rZXl3b3JkKVxuIH0ga2V5d29yZCBpbiBwcm9wb3NhbC5naXZlIGRpZCBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHBheW1lbnQgaW4gdGhlIHBheW1lbnRLZXl3b3JkUmVjb3JkLCB3aGljaCBoYWQga2V5d29yZHM6ICR7cShcbnBheW1lbnRLZXl3b3JkcylcbiB9YDtcbnJldHVybiBkb0RlcG9zaXRQYXltZW50KHBheW1lbnRzW2tleXdvcmRdLGFtb3VudCk7XG4gfSk7XG5jb25zdCBkZXBvc2l0cz1hd2FpdCBkZWVwbHlGdWxmaWxsZWRPYmplY3QoZGVwb3NpdFBzKTtcblxuY29uc3QgaW5pdGlhbEFsbG9jYXRpb249aGFyZGVuKHtcbi4uLm9iamVjdE1hcCh3YW50LChhbW91bnQpPT5BbW91bnRNYXRoLm1ha2VFbXB0eUZyb21BbW91bnQoYW1vdW50KSksXG4vL1xuLy9cbi4uLmRlcG9zaXRzfSk7XG5cblxucmV0dXJuIGluaXRpYWxBbGxvY2F0aW9uO1xuIH07XG5cbnJldHVybntcbmNyZWF0ZVB1cnNlLC8vXG5wcm92aWRlTG9jYWxQdXJzZSxcbndpdGhkcmF3UGF5bWVudHMsXG5kZXBvc2l0UGF5bWVudHN9O1xuXG4gfTskaM2PX29uY2UucHJvdmlkZUVzY3Jvd1N0b3JhZ2UocHJvdmlkZUVzY3Jvd1N0b3JhZ2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJvdmlkZUVzY3Jvd1N0b3JhZ2UiOlsicHJvdmlkZUVzY3Jvd1N0b3JhZ2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAtua/LAMAACwDAAALQAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3pvZVNlcnZpY2UvZmVlTWludC5qc3siaW1wb3J0cyI6WyJAYWdvcmljL2VydHAiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBlbmRvL2Vycm9ycyIsIi4uL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJkZWZhdWx0RmVlSXNzdWVyQ29uZmlnIiwicHJlcGFyZUZlZU1pbnQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQXNzZXRLaW5kLElzc3VlclNoYXBlLEJyYW5kU2hhcGUscHJlcGFyZUlzc3VlcktpdCxoYXNJc3N1ZXIsaW5pdEVtcHR5LE0scHJvdmlkZUR1cmFibGVNYXBTdG9yZSxwcm92aWRlLHByZXBhcmVFeG9DbGFzc0tpdCxGYWlsLHEsRmVlTWludEFjY2Vzc1NoYXBlOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBc3NldEtpbmRcIiwgWyRozY9fYSA9PiAoQXNzZXRLaW5kID0gJGjNj19hKV1dLFtcIklzc3VlclNoYXBlXCIsIFskaM2PX2EgPT4gKElzc3VlclNoYXBlID0gJGjNj19hKV1dLFtcIkJyYW5kU2hhcGVcIiwgWyRozY9fYSA9PiAoQnJhbmRTaGFwZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlSXNzdWVyS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVJc3N1ZXJLaXQgPSAkaM2PX2EpXV0sW1wiaGFzSXNzdWVyXCIsIFskaM2PX2EgPT4gKGhhc0lzc3VlciA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImluaXRFbXB0eVwiLCBbJGjNj19hID0+IChpbml0RW1wdHkgPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wicHJvdmlkZUR1cmFibGVNYXBTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZU1hcFN0b3JlID0gJGjNj19hKV1dLFtcInByb3ZpZGVcIiwgWyRozY9fYSA9PiAocHJvdmlkZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiRmVlTWludEFjY2Vzc1NoYXBlXCIsIFskaM2PX2EgPT4gKEZlZU1pbnRBY2Nlc3NTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBGRUVfTUlOVF9LSVQ9J0ZlZU1pbnRLaXQnO1xuXG5jb25zdCAgICAgICAgZGVmYXVsdEZlZUlzc3VlckNvbmZpZz1oYXJkZW4oXG4vKiAgICAgICAgICAgICAgICAqL3tcbm5hbWU6J1pERUZBVUxUJyxcbmFzc2V0S2luZDpBc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm86aGFyZGVuKHtkZWNpbWFsUGxhY2VzOjYsYXNzZXRLaW5kOkFzc2V0S2luZC5OQVR9KX0pO1xuXG5cblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0RmVlSXNzdWVyQ29uZmlnKGRlZmF1bHRGZWVJc3N1ZXJDb25maWcpO1xuY29uc3QgcHJlcGFyZUZlZU1pbnQ9KHpvZUJhZ2dhZ2UsZmVlSXNzdWVyQ29uZmlnLHNodXRkb3duWm9lVmF0KT0+e1xuY29uc3QgbWludEJhZ2dhZ2U9cHJvdmlkZUR1cmFibGVNYXBTdG9yZSh6b2VCYWdnYWdlLCdtaW50QmFnZ2FnZScpO1xuaWYobWludEJhZ2dhZ2UuaGFzKEZFRV9NSU5UX0tJVCkpe1xuaGFzSXNzdWVyKG1pbnRCYWdnYWdlKXx8XG5GYWlsIGBMZWdhY3kgJHtxKFxuRkVFX01JTlRfS0lUKVxuIH0gbXVzdCBiZSByZWR1bmRhbnQgd2l0aCBub3JtYWwgc3RvcmluZyBvZiBpc3N1ZXJLaXQgaW4gaXNzdWVyQmFnZ2FnZWA7XG4vL1xubWludEJhZ2dhZ2UuZGVsZXRlKEZFRV9NSU5UX0tJVCk7XG4gfVxuXG5jb25zdCBmZWVJc3N1ZXJLaXQ9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucHJlcGFyZUlzc3VlcktpdChcbm1pbnRCYWdnYWdlLFxuZmVlSXNzdWVyQ29uZmlnLm5hbWUsXG5mZWVJc3N1ZXJDb25maWcuYXNzZXRLaW5kLFxuZmVlSXNzdWVyQ29uZmlnLmRpc3BsYXlJbmZvLFxuc2h1dGRvd25ab2VWYXQpO1xuXG5cblxuY29uc3QgRmVlTWludElLaXQ9aGFyZGVuKHtcbmZlZU1pbnQ6TS5pbnRlcmZhY2UoJ0ZlZU1pbnQnLHtcbmdldEZlZUlzc3VlcktpdDpNLmNhbGwoRmVlTWludEFjY2Vzc1NoYXBlKS5yZXR1cm5zKE0ucmVjb3JkKCkpLFxuZ2V0RmVlSXNzdWVyOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyU2hhcGUpLFxuZ2V0RmVlQnJhbmQ6TS5jYWxsKCkucmV0dXJucyhCcmFuZFNoYXBlKX0pLFxuXG5mZWVNaW50QWNjZXNzOk0uaW50ZXJmYWNlKCdGZWVNaW50QWNjZXNzJyx7fSl9KTtcblxuXG5jb25zdCBtYWtlRmVlTWludEtpdD1wcmVwYXJlRXhvQ2xhc3NLaXQoXG5taW50QmFnZ2FnZSxcbidGZWVNaW50JyxcbkZlZU1pbnRJS2l0LFxuaW5pdEVtcHR5LFxue1xuZmVlTWludDp7XG5nZXRGZWVJc3N1ZXJLaXQoYWxsZWdlZEZlZU1pbnRBY2Nlc3Mpe1xuY29uc3R7ZmFjZXRzfT10aGlzO1xuZmFjZXRzLmZlZU1pbnRBY2Nlc3M9PT1hbGxlZ2VkRmVlTWludEFjY2Vzc3x8XG5GYWlsIGBUaGUgb2JqZWN0IHJlcHJlc2VudGluZyBhY2Nlc3MgdG8gdGhlIGZlZSBicmFuZCBtaW50IHdhcyBub3QgcHJvdmlkZWRgO1xucmV0dXJuIGZlZUlzc3VlcktpdDtcbiB9LFxuZ2V0RmVlSXNzdWVyKCl7XG5yZXR1cm4gZmVlSXNzdWVyS2l0Lmlzc3VlcjtcbiB9LFxuZ2V0RmVlQnJhbmQoKXtcbnJldHVybiBmZWVJc3N1ZXJLaXQuYnJhbmQ7XG4gfX0sXG5cbi8vXG4vL1xuZmVlTWludEFjY2Vzczp7fX0pO1xuXG5cblxucmV0dXJuIHByb3ZpZGUoem9lQmFnZ2FnZSwndGhlRmVlTWludCcsKCk9Pm1ha2VGZWVNaW50S2l0KCkpO1xuIH07JGjNj19vbmNlLnByZXBhcmVGZWVNaW50KHByZXBhcmVGZWVNaW50KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVGZWVNaW50IjpbInByZXBhcmVGZWVNaW50Il0sImRlZmF1bHRGZWVJc3N1ZXJDb25maWciOlsiZGVmYXVsdEZlZUlzc3VlckNvbmZpZyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADjHPpPixQAAIsUAAA5AAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvem9lU2VydmljZS9pbnN0YWxsYXRpb25TdG9yYWdlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvdmF0LWRhdGEiLCIuLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsibWFrZUluc3RhbGxhdGlvblN0b3JhZ2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLE0scHJlcGFyZUV4byxwcmVwYXJlS2luZCxwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxJbnN0YWxsYXRpb25TaGFwZSxJbnN0YW5jZUhhbmRsZVNoYXBlLFVud3JhcHBlZEluc3RhbGxhdGlvblNoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9cIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4byA9ICRozY9fYSldXSxbXCJwcmVwYXJlS2luZFwiLCBbJGjNj19hID0+IChwcmVwYXJlS2luZCA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIi4uL3R5cGVHdWFyZHMuanNcIiwgW1tcIkluc3RhbGxhdGlvblNoYXBlXCIsIFskaM2PX2EgPT4gKEluc3RhbGxhdGlvblNoYXBlID0gJGjNj19hKV1dLFtcIkluc3RhbmNlSGFuZGxlU2hhcGVcIiwgWyRozY9fYSA9PiAoSW5zdGFuY2VIYW5kbGVTaGFwZSA9ICRozY9fYSldXSxbXCJVbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZVwiLCBbJGjNj19hID0+IChVbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJbnN0YWxsYXRpb25TdG9yYWdlPShnZXRCdW5kbGVDYXBGb3JJRCx6b2VCYWdnYWdlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YWxsYXRpb25zQnVuZGxlQ2FwPXByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKFxuem9lQmFnZ2FnZSxcbidpbnN0YWxsYXRpb25zQnVuZGxlQ2FwJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGluc3RhbGxhdGlvbnNCdW5kbGU9cHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoXG56b2VCYWdnYWdlLFxuJ2luc3RhbGxhdGlvbnNCdW5kbGUnKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYWtlQnVuZGxlSURJbnN0YWxsYXRpb249cHJlcGFyZUtpbmQoXG56b2VCYWdnYWdlLFxuJ0J1bmRsZUlESW5zdGFsbGF0aW9uJyxcbihidW5kbGVMYWJlbCk9Pih7YnVuZGxlTGFiZWx9KSxcbi8vXG57XG5nZXRCdW5kbGU6KF9jb250ZXh0KT0+RmFpbCBgYnVuZGxlSUQtYmFzZWQgSW5zdGFsbGF0aW9uYCxcbmdldEJ1bmRsZUxhYmVsOih7c3RhdGU6e2J1bmRsZUxhYmVsfX0pPT5idW5kbGVMYWJlbH0pO1xuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYWtlQnVuZGxlSW5zdGFsbGF0aW9uPXByZXBhcmVLaW5kKFxuem9lQmFnZ2FnZSxcbidCdW5kbGVJbnN0YWxsYXRpb24nLFxuKGJ1bmRsZSxidW5kbGVMYWJlbCk9Pih7YnVuZGxlLGJ1bmRsZUxhYmVsfSksXG4vL1xue1xuZ2V0QnVuZGxlOih7c3RhdGU6e2J1bmRsZX19KT0+YnVuZGxlLFxuZ2V0QnVuZGxlTGFiZWw6KHtzdGF0ZTp7YnVuZGxlTGFiZWx9fSk9PmJ1bmRsZUxhYmVsfSk7XG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YWxsU291cmNlQnVuZGxlPWFzeW5jKGJ1bmRsZSxidW5kbGVMYWJlbCk9PntcbnR5cGVvZiBidW5kbGU9PT0nb2JqZWN0J3x8RmFpbCBgYSBidW5kbGUgbXVzdCBiZSBwcm92aWRlZGA7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmJ1bmRsZXx8RmFpbCBgYSBidW5kbGUgbXVzdCBiZSBwcm92aWRlZGA7XG5jb25zdCBpbnN0YWxsYXRpb249bWFrZUJ1bmRsZUluc3RhbGxhdGlvbihidW5kbGUsYnVuZGxlTGFiZWwpO1xuaW5zdGFsbGF0aW9uc0J1bmRsZS5pbml0KGluc3RhbGxhdGlvbixidW5kbGUpO1xucmV0dXJuIGluc3RhbGxhdGlvbjtcbiB9O1xuXG5jb25zdCBJbnN0YWxsYXRpb25TdG9yYWdlST1NLmludGVyZmFjZSgnSW5zdGFsbGF0aW9uU3RvcmFnZScse1xuaW5zdGFsbEJ1bmRsZTpNLmNhbGwoXG5NLm9yKFxuSW5zdGFuY2VIYW5kbGVTaGFwZSxcbk0ucmVjb3JkT2YoTS5zdHJpbmcoKSxNLnN0cmluZyh7c3RyaW5nTGVuZ3RoTGltaXQ6SW5maW5pdHl9KSkpKS5cblxuXG5vcHRpb25hbChNLnN0cmluZygpKS5cbnJldHVybnMoTS5wcm9taXNlKCkpLFxuaW5zdGFsbEJ1bmRsZUlEOk0uY2FsbChNLnN0cmluZygpKS5cbm9wdGlvbmFsKE0uc3RyaW5nKCkpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG51bndyYXBJbnN0YWxsYXRpb246TS5jYWxsV2hlbihNLmF3YWl0KEluc3RhbGxhdGlvblNoYXBlKSkucmV0dXJucyhcblVud3JhcHBlZEluc3RhbGxhdGlvblNoYXBlKSxcblxuZ2V0QnVuZGxlSURGcm9tSW5zdGFsbGF0aW9uOk0uY2FsbFdoZW4oTS5hd2FpdChJbnN0YWxsYXRpb25TaGFwZSkpLnJldHVybnMoXG5NLmVyZWYoTS5zdHJpbmcoKSkpfSk7XG5cblxuXG5jb25zdCBpbnN0YWxsYXRpb25TdG9yYWdlPXByZXBhcmVFeG8oXG56b2VCYWdnYWdlLFxuJ0luc3RhbGxhdGlvblN0b3JhZ2UnLFxuSW5zdGFsbGF0aW9uU3RvcmFnZUksXG57XG4gICAgICBhc3luYyBpbnN0YWxsQnVuZGxlKGFsbGVnZWRCdW5kbGUsYnVuZGxlTGFiZWwpe1xuLy9cbmNvbnN0e3NlbGZ9PXRoaXM7XG4vL1xuLy9cbi8vXG50eXBlb2YgYWxsZWdlZEJ1bmRsZT09PSdvYmplY3QnfHxGYWlsIGBhIGJ1bmRsZSBtdXN0IGJlIHByb3ZpZGVkYDtcbmFsbGVnZWRCdW5kbGUhPT1udWxsfHxGYWlsIGBhIGJ1bmRsZSBtdXN0IGJlIHByb3ZpZGVkYDtcbmNvbnN0e21vZHVsZUZvcm1hdH09YWxsZWdlZEJ1bmRsZTtcbmlmKG1vZHVsZUZvcm1hdD09PSdlbmRvWmlwQmFzZTY0U2hhNTEyJyl7XG5jb25zdHtlbmRvWmlwQmFzZTY0U2hhNTEyfT1hbGxlZ2VkQnVuZGxlO1xudHlwZW9mIGVuZG9aaXBCYXNlNjRTaGE1MTI9PT0nc3RyaW5nJ3x8XG5GYWlsIGBidW5kbGUgZW5kb1ppcEJhc2U2NFNoYTUxMiBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKFxuZW5kb1ppcEJhc2U2NFNoYTUxMilcbiB9YDtcbnJldHVybiBzZWxmLmluc3RhbGxCdW5kbGVJRCggYGIxLSR7ZW5kb1ppcEJhc2U2NFNoYTUxMn1gLGJ1bmRsZUxhYmVsKTtcbiB9XG5yZXR1cm4gaW5zdGFsbFNvdXJjZUJ1bmRsZShhbGxlZ2VkQnVuZGxlLGJ1bmRsZUxhYmVsKTtcbiB9LFxuICAgICAgYXN5bmMgaW5zdGFsbEJ1bmRsZUlEKGJ1bmRsZUlELGJ1bmRsZUxhYmVsPWJ1bmRsZUlELnNsaWNlKDAsOSkpe1xudHlwZW9mIGJ1bmRsZUlEPT09J3N0cmluZyd8fEZhaWwgYGEgYnVuZGxlIElEIG11c3QgYmUgcHJvdmlkZWRgO1xudHlwZW9mIGJ1bmRsZUxhYmVsPT09J3N0cmluZyd8fFxuRmFpbCBgYSBidW5kbGUgbGFiZWwgbXVzdCBiZSBhIHN0cmluZ2A7XG5cbi8vXG4vL1xuY29uc3QgYnVuZGxlQ2FwPWF3YWl0IGdldEJ1bmRsZUNhcEZvcklEKGJ1bmRsZUlEKTtcbi8vXG5cbmNvbnN0IGluc3RhbGxhdGlvbj1tYWtlQnVuZGxlSURJbnN0YWxsYXRpb24oYnVuZGxlTGFiZWwpO1xuaW5zdGFsbGF0aW9uc0J1bmRsZUNhcC5pbml0KFxuaW5zdGFsbGF0aW9uLFxuaGFyZGVuKHtidW5kbGVDYXAsYnVuZGxlSUR9KSk7XG5cbnJldHVybiBpbnN0YWxsYXRpb247XG4gfSxcbnVud3JhcEluc3RhbGxhdGlvbihpbnN0YWxsYXRpb24pe1xuaWYoaW5zdGFsbGF0aW9uc0J1bmRsZUNhcC5oYXMoaW5zdGFsbGF0aW9uKSl7XG5jb25zdHtidW5kbGVDYXAsYnVuZGxlSUR9PVxuaW5zdGFsbGF0aW9uc0J1bmRsZUNhcC5nZXQoaW5zdGFsbGF0aW9uKTtcbnJldHVybntidW5kbGVDYXAsYnVuZGxlSUQsaW5zdGFsbGF0aW9ufTtcbiB9ZWxzZSBpZihpbnN0YWxsYXRpb25zQnVuZGxlLmhhcyhpbnN0YWxsYXRpb24pKXtcbmNvbnN0IGJ1bmRsZT1pbnN0YWxsYXRpb25zQnVuZGxlLmdldChpbnN0YWxsYXRpb24pO1xucmV0dXJue2J1bmRsZSxpbnN0YWxsYXRpb259O1xuIH1lbHNle1xudGhyb3cgRmFpbCBgJHtpbnN0YWxsYXRpb259IHdhcyBub3QgYSB2YWxpZCBpbnN0YWxsYXRpb25gO1xuIH1cbiB9LFxuICAgICAgYXN5bmMgZ2V0QnVuZGxlSURGcm9tSW5zdGFsbGF0aW9uKGFsbGVnZWRJbnN0YWxsYXRpb24pe1xuLy9cbmNvbnN0e3NlbGZ9PXRoaXM7XG5jb25zdHtidW5kbGVJRH09YXdhaXQgc2VsZi51bndyYXBJbnN0YWxsYXRpb24oYWxsZWdlZEluc3RhbGxhdGlvbik7XG4vL1xuYnVuZGxlSUR8fEZhaWwgYGluc3RhbGxhdGlvbiBkb2VzIG5vdCBoYXZlIGEgYnVuZGxlIElEYDtcbnJldHVybiBidW5kbGVJRDtcbiB9fSk7XG5cblxuXG5yZXR1cm4gaW5zdGFsbGF0aW9uU3RvcmFnZTtcbiB9OyRozY9fb25jZS5tYWtlSW5zdGFsbGF0aW9uU3RvcmFnZShtYWtlSW5zdGFsbGF0aW9uU3RvcmFnZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSW5zdGFsbGF0aW9uU3RvcmFnZSI6WyJtYWtlSW5zdGFsbGF0aW9uU3RvcmFnZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAd3EBnVCIAAFQiAAA6AAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvem9lU2VydmljZS9pbnN0YW5jZUFkbWluU3RvcmFnZS5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3ZhdC1kYXRhIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL2Vycm9ycyIsIi4uL21ha2VIYW5kbGUuanMiLCIuLi90eXBlR3VhcmRzLmpzIiwiLi96b2VTZWF0LmpzIl0sImV4cG9ydHMiOlsibWFrZUluc3RhbmNlQWRtaW5NYWtlciIsIm1ha2VJbnN0YW5jZUFkbWluU3RvcmFnZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBjYW5CZUR1cmFibGUsbWFrZVNjYWxhckJpZ1NldFN0b3JlLHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLHByZXBhcmVLaW5kTXVsdGkscHJlcGFyZUV4b0NsYXNzS2l0LE0scHJvdmlkZSxFLHEsRmFpbCxkZWZpbmVEdXJhYmxlSGFuZGxlLEJyYW5kS2V5d29yZFJlY29yZFNoYXBlLEluc3RhbmNlQWRtaW5TaGFwZSxJbnN0YW5jZUhhbmRsZVNoYXBlLElzc3VlcktleXdvcmRSZWNvcmRTaGFwZSxtYWtlWm9lU2VhdEFkbWluRmFjdG9yeTskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcImNhbkJlRHVyYWJsZVwiLCBbJGjNj19hID0+IChjYW5CZUR1cmFibGUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhckJpZ1NldFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdTZXRTdG9yZSA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlS2luZE11bHRpXCIsIFskaM2PX2EgPT4gKHByZXBhcmVLaW5kTXVsdGkgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wicHJvdmlkZVwiLCBbJGjNj19hID0+IChwcm92aWRlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi4vbWFrZUhhbmRsZS5qc1wiLCBbW1wiZGVmaW5lRHVyYWJsZUhhbmRsZVwiLCBbJGjNj19hID0+IChkZWZpbmVEdXJhYmxlSGFuZGxlID0gJGjNj19hKV1dXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUgPSAkaM2PX2EpXV0sW1wiSW5zdGFuY2VBZG1pblNoYXBlXCIsIFskaM2PX2EgPT4gKEluc3RhbmNlQWRtaW5TaGFwZSA9ICRozY9fYSldXSxbXCJJbnN0YW5jZUhhbmRsZVNoYXBlXCIsIFskaM2PX2EgPT4gKEluc3RhbmNlSGFuZGxlU2hhcGUgPSAkaM2PX2EpXV0sW1wiSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKElzc3VlcktleXdvcmRSZWNvcmRTaGFwZSA9ICRozY9fYSldXV1dLFtcIi4vem9lU2VhdC5qc1wiLCBbW1wibWFrZVpvZVNlYXRBZG1pbkZhY3RvcnlcIiwgWyRozY9fYSA9PiAobWFrZVpvZVNlYXRBZG1pbkZhY3RvcnkgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IEluc3RhbmNlQWRtaW5TdG9yYWdlSUtpdD1oYXJkZW4oe1xuYWNjZXNzb3I6TS5pbnRlcmZhY2UoJ0luc3RhbmNlQWRtaW5TdG9yYWdlJyx7XG5nZXRQdWJsaWNGYWNldDpNLmNhbGxXaGVuKE0uYXdhaXQoSW5zdGFuY2VIYW5kbGVTaGFwZSkpLnJldHVybnMoXG5NLnJlbW90YWJsZSgpKSxcblxuZ2V0QnJhbmRzOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKEJyYW5kS2V5d29yZFJlY29yZFNoYXBlKSxcbmdldElzc3VlcnM6TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlKSxcbmdldFRlcm1zOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKE0ucmVjb3JkKCkpLFxuZ2V0T2ZmZXJGaWx0ZXI6TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoTS5hcnJheU9mKE0uc3RyaW5nKCkpKSxcbmdldEluc3RhbGxhdGlvbjpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhNLnJlbW90YWJsZSgpKSxcbmdldEluc3RhbmNlQWRtaW46TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoSW5zdGFuY2VBZG1pblNoYXBlKX0pLFxuXG51cGRhdGVyOk0uaW50ZXJmYWNlKCdJbnN0YW5jZUFkbWluIHVwZGF0ZXInLHtcbmluaXRJbnN0YW5jZUFkbWluOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlLEluc3RhbmNlQWRtaW5TaGFwZSkucmV0dXJucyhcbk0ucHJvbWlzZSgpKSxcblxuZGVsZXRlSW5zdGFuY2VBZG1pbjpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucygpfSl9KTtcblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlSW5zdGFuY2VBZG1pblN0b3JhZ2U9KGJhZ2dhZ2UpPT57XG5jb25zdCBtYWtlSUFTPXByZXBhcmVFeG9DbGFzc0tpdChcbmJhZ2dhZ2UsXG4nSW5zdGFuY2VBZG1pbicsXG5JbnN0YW5jZUFkbWluU3RvcmFnZUlLaXQsXG4oKT0+KHtcbmluc3RhbmNlVG9JbnN0YW5jZUFkbWluOnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKFxuYmFnZ2FnZSxcbidpbnN0YW5jZVRvSW5zdGFuY2VBZG1pbicpfSksXG5cblxue1xuLy9cbmFjY2Vzc29yOntcbmdldFB1YmxpY0ZhY2V0KGluc3RhbmNlKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3QgaWE9c3RhdGUuaW5zdGFuY2VUb0luc3RhbmNlQWRtaW4uZ2V0KGluc3RhbmNlKTtcbnJldHVybiBpYS5nZXRQdWJsaWNGYWNldCgpO1xuIH0sXG5nZXRCcmFuZHMoaW5zdGFuY2Upe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VUb0luc3RhbmNlQWRtaW4uZ2V0KGluc3RhbmNlKS5nZXRCcmFuZHMoKTtcbiB9LFxuZ2V0SXNzdWVycyhpbnN0YW5jZSl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVRvSW5zdGFuY2VBZG1pbi5nZXQoaW5zdGFuY2UpLmdldElzc3VlcnMoKTtcbiB9LFxuZ2V0VGVybXMoaW5zdGFuY2Upe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VUb0luc3RhbmNlQWRtaW4uZ2V0KGluc3RhbmNlKS5nZXRUZXJtcygpO1xuIH0sXG5nZXRPZmZlckZpbHRlcihpbnN0YW5jZSl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVRvSW5zdGFuY2VBZG1pbi5nZXQoaW5zdGFuY2UpLmdldE9mZmVyRmlsdGVyKCk7XG4gfSxcbmdldEluc3RhbGxhdGlvbihpbnN0YW5jZSl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVRvSW5zdGFuY2VBZG1pbi5nZXQoaW5zdGFuY2UpLmdldEluc3RhbGxhdGlvbigpO1xuIH0sXG5nZXRJbnN0YW5jZUFkbWluKGluc3RhbmNlKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLmluc3RhbmNlVG9JbnN0YW5jZUFkbWluLmdldChpbnN0YW5jZSk7XG4gfX0sXG5cbi8vXG51cGRhdGVyOntcbiAgICAgIGFzeW5jIGluaXRJbnN0YW5jZUFkbWluKGluc3RhbmNlLGluc3RhbmNlQWRtaW4pe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VUb0luc3RhbmNlQWRtaW4uaW5pdChpbnN0YW5jZSxpbnN0YW5jZUFkbWluKTtcbiB9LFxuZGVsZXRlSW5zdGFuY2VBZG1pbihpbnN0YW5jZSl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVRvSW5zdGFuY2VBZG1pbi5kZWxldGUoaW5zdGFuY2UpO1xuIH19fSk7XG5cblxuXG5yZXR1cm4gcHJvdmlkZShiYWdnYWdlLCd0aGVJbnN0YW5jZUFkbWluU3RvcmFnZScsKCk9Pm1ha2VJQVMoKSk7XG4gfTskaM2PX29uY2UubWFrZUluc3RhbmNlQWRtaW5TdG9yYWdlKG1ha2VJbnN0YW5jZUFkbWluU3RvcmFnZSk7XG5oYXJkZW4obWFrZUluc3RhbmNlQWRtaW5TdG9yYWdlKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VJbnN0YW5jZUFkbWluQmVoYXZpb3I9KHpvZUJhZ2dhZ2UsbWFrZVpvZVNlYXRBZG1pbktpdCk9PntcbmNvbnN0IG1ha2VTZWF0SGFuZGxlPWRlZmluZUR1cmFibGVIYW5kbGUoem9lQmFnZ2FnZSwnU2VhdCcpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmdldFB1YmxpY0ZhY2V0Oih7c3RhdGV9KT0+c3RhdGUucHVibGljRmFjZXQsXG5nZXRUZXJtczooe3N0YXRlfSk9PnN0YXRlLnpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIuZ2V0VGVybXMoKSxcbmdldElzc3VlcnM6KHtzdGF0ZX0pPT5zdGF0ZS56b2VJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyLmdldElzc3VlcnMoKSxcbmdldEJyYW5kczooe3N0YXRlfSk9PnN0YXRlLnpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIuZ2V0QnJhbmRzKCksXG5cbi8vXG4vL1xuaW5pdERlbGF5ZWRTdGF0ZTooe3N0YXRlfSxoYW5kbGVPZmZlck9iaixwdWJsaWNGYWNldCk9PntcbnN0YXRlLmhhbmRsZU9mZmVyT2JqPWhhbmRsZU9mZmVyT2JqO1xuY2FuQmVEdXJhYmxlKHB1YmxpY0ZhY2V0KXx8RmFpbCBgcHVibGljRmFjZXQgbXVzdCBiZSBkdXJhYmxlYDtcbnN0YXRlLnB1YmxpY0ZhY2V0PXB1YmxpY0ZhY2V0O1xuIH0sXG5nZXRJbnN0YWxsYXRpb246KHtzdGF0ZX0pPT5cbnN0YXRlLnpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIuZ2V0SW5zdGFsbGF0aW9uKCksXG5nZXRJbnN0YW5jZTooe3N0YXRlfSk9PnN0YXRlLmluc3RhbmNlSGFuZGxlLFxuYXNzZXJ0QWNjZXB0aW5nT2ZmZXJzOih7c3RhdGV9KT0+e1xuc3RhdGUuYWNjZXB0aW5nT2ZmZXJzfHxGYWlsIGBObyBmdXJ0aGVyIG9mZmVycyBhcmUgYWNjZXB0ZWRgO1xuIH0sXG5leGl0QWxsU2VhdHM6KHtzdGF0ZX0sY29tcGxldGlvbik9PntcbnN0YXRlLmFjY2VwdGluZ09mZmVycz1mYWxzZTtcbmZvcihjb25zdCB6b2VTZWF0QWRtaW4gb2Ygc3RhdGUuem9lU2VhdEFkbWlucy5rZXlzKCkpe1xuem9lU2VhdEFkbWluLmV4aXQoY29tcGxldGlvbik7XG4gfVxuIH0sXG5mYWlsQWxsU2VhdHM6KHtzdGF0ZX0scmVhc29uKT0+e1xuc3RhdGUuYWNjZXB0aW5nT2ZmZXJzPWZhbHNlO1xuZm9yKGNvbnN0IHpvZVNlYXRBZG1pbiBvZiBzdGF0ZS56b2VTZWF0QWRtaW5zLmtleXMoKSl7XG56b2VTZWF0QWRtaW4uZmFpbChyZWFzb24pO1xuIH1cbiB9LFxuc3RvcEFjY2VwdGluZ09mZmVyczooe3N0YXRlfSk9PntcbnN0YXRlLmFjY2VwdGluZ09mZmVycz1mYWxzZTtcbiB9LFxubWFrZVVzZXJTZWF0OihcbntzdGF0ZSxmYWNldHM6e2hlbHBlcn19LFxuaW52aXRhdGlvbkhhbmRsZSxcbmluaXRpYWxBbGxvY2F0aW9uLFxucHJvcG9zYWwsXG5vZmZlckFyZ3M9dW5kZWZpbmVkKT0+XG57XG5jb25zdHt1c2VyU2VhdCx6b2VTZWF0QWRtaW59PW1ha2Vab2VTZWF0QWRtaW5LaXQoXG5pbml0aWFsQWxsb2NhdGlvbixcbnByb3Bvc2FsLFxuaGVscGVyLFxuc3RhdGUuem9lSW5zdGFuY2VTdG9yYWdlTWFuYWdlci5nZXRXaXRoZHJhd0ZhY2V0KCkpO1xuXG5cbmNvbnN0IHNlYXRIYW5kbGU9bWFrZVNlYXRIYW5kbGUoKTtcbnN0YXRlLnNlYXRIYW5kbGVUb1pvZVNlYXRBZG1pbi5pbml0KHNlYXRIYW5kbGUsem9lU2VhdEFkbWluKTtcblxuY29uc3Qgc2VhdERhdGE9aGFyZGVuKHtcbnByb3Bvc2FsLFxuaW5pdGlhbEFsbG9jYXRpb24sXG5zZWF0SGFuZGxlLFxub2ZmZXJBcmdzfSk7XG5cblxuc3RhdGUuem9lU2VhdEFkbWlucy5hZGQoem9lU2VhdEFkbWluKTtcbnN0YXRlLmhhbmRsZU9mZmVyT2JqfHxGYWlsIGBpbmNvbXBsZXRlIHNldHVwIG9mIHpvZSBzZWF0YDtcbnZvaWQgRS53aGVuKFxuRShzdGF0ZS5oYW5kbGVPZmZlck9iaikuaGFuZGxlT2ZmZXIoaW52aXRhdGlvbkhhbmRsZSxzZWF0RGF0YSksXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4ocmVzdWx0KT0+em9lU2VhdEFkbWluLnJlc29sdmVFeGl0QW5kUmVzdWx0KHJlc3VsdCksXG4oZXJyKT0+e1xuLy9cbnZvaWQgRShzdGF0ZS5hZG1pbk5vZGUpLnRlcm1pbmF0ZVdpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfSk7XG5cblxuLy9cbnJldHVybiB1c2VyU2VhdDtcbiB9LFxubWFrZU5vRXNjcm93U2VhdDooXG57c3RhdGUsZmFjZXRzOntoZWxwZXJ9fSxcbmluaXRpYWxBbGxvY2F0aW9uLFxucHJvcG9zYWwsXG5leGl0T2JqLFxuc2VhdEhhbmRsZSk9Plxue1xuY29uc3R7dXNlclNlYXQsem9lU2VhdEFkbWlufT1tYWtlWm9lU2VhdEFkbWluS2l0KFxuaW5pdGlhbEFsbG9jYXRpb24sXG5wcm9wb3NhbCxcbmhlbHBlcixcbnN0YXRlLnpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIuZ2V0V2l0aGRyYXdGYWNldCgpLFxuZXhpdE9iaixcbnRydWUpO1xuXG5cbnN0YXRlLnpvZVNlYXRBZG1pbnMuYWRkKHpvZVNlYXRBZG1pbik7XG5zdGF0ZS5zZWF0SGFuZGxlVG9ab2VTZWF0QWRtaW4uaW5pdChzZWF0SGFuZGxlLHpvZVNlYXRBZG1pbik7XG5yZXR1cm4gdXNlclNlYXQ7XG4gfSxcbmdldE9mZmVyRmlsdGVyOih7c3RhdGV9KT0+c3RhdGUub2ZmZXJGaWx0ZXJTdHJpbmdzLFxuc2V0T2ZmZXJGaWx0ZXI6KHtzdGF0ZX0sc3RyaW5ncyk9PntcbkFycmF5LmlzQXJyYXkoc3RyaW5ncyl8fEZhaWwgYCR7cShzdHJpbmdzKX0gbXVzdCBiZSBhbiBBcnJheWA7XG5jb25zdCBwcm9wb3NlZFN0cmluZ3M9aGFyZGVuKFsuLi5zdHJpbmdzXSk7XG5wcm9wb3NlZFN0cmluZ3MuZXZlcnkoKHMpPT50eXBlb2Ygcz09PSdzdHJpbmcnKXx8XG5GYWlsIGBCbG9ja2VkIHN0cmluZ3MgKCR7cShcbnByb3Bvc2VkU3RyaW5ncylcbiB9KSBtdXN0IGJlIGFuIEFycmF5IG9mIHN0cmluZ3MuYDtcblxuc3RhdGUub2ZmZXJGaWx0ZXJTdHJpbmdzPXByb3Bvc2VkU3RyaW5ncztcbiB9LFxuLy9cbi8vXG4vL1xuaXNCbG9ja2VkOih7c3RhdGV9LHN0cmluZyk9PntcbnJldHVybiBzdGF0ZS5vZmZlckZpbHRlclN0cmluZ3Muc29tZSgoZmlsdGVyU3RyaW5nKT0+e1xucmV0dXJuKFxuZmlsdGVyU3RyaW5nPT09c3RyaW5nfHxcbmZpbHRlclN0cmluZy5lbmRzV2l0aCgnOicpJiZzdHJpbmcuc3RhcnRzV2l0aChmaWx0ZXJTdHJpbmcpKTtcblxuIH0pO1xuIH19KTtcblxuIH07XG5cbmNvbnN0IGhlbHBlckJlaGF2aW9yPXtcbmV4aXRab2VTZWF0QWRtaW46KHtzdGF0ZX0sem9lU2VhdEFkbWluKT0+XG5zdGF0ZS56b2VTZWF0QWRtaW5zLmRlbGV0ZSh6b2VTZWF0QWRtaW4pLFxuaGFzRXhpdGVkOih7c3RhdGV9LHpvZVNlYXRBZG1pbik9PlxuIXN0YXRlLnpvZVNlYXRBZG1pbnMuaGFzKHpvZVNlYXRBZG1pbil9O1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUluc3RhbmNlQWRtaW5NYWtlcj0oXG56b2VCYWdnYWdlLFxuc2VhdEhhbmRsZVRvWm9lU2VhdEFkbWluKT0+XG57XG5jb25zdCBtYWtlWm9lU2VhdEFkbWluS2l0PW1ha2Vab2VTZWF0QWRtaW5GYWN0b3J5KHpvZUJhZ2dhZ2UpO1xuY29uc3QgbWFrZUluc3RhbmNlQWRtaW5NdWx0aT1wcmVwYXJlS2luZE11bHRpKFxuem9lQmFnZ2FnZSxcbidpbnN0YW5jZUFkbWluJyxcbihpbnN0YW5jZUhhbmRsZSx6b2VJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyLGFkbWluTm9kZSk9PntcbmNvbnN0IHJldFZhbD17XG5vZmZlckZpbHRlclN0cmluZ3M6aGFyZGVuKFtdKSxcbnB1YmxpY0ZhY2V0OnVuZGVmaW5lZCxcbmhhbmRsZU9mZmVyT2JqOnVuZGVmaW5lZCxcbnpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIsXG5zZWF0SGFuZGxlVG9ab2VTZWF0QWRtaW4sXG5pbnN0YW5jZUhhbmRsZSxcbmFjY2VwdGluZ09mZmVyczp0cnVlLFxuem9lU2VhdEFkbWluczptYWtlU2NhbGFyQmlnU2V0U3RvcmUoJ3pvZVNlYXRBZG1pbnMnLHtcbmR1cmFibGU6dHJ1ZX0pLFxuXG5hZG1pbk5vZGV9O1xuXG5yZXR1cm4gcmV0VmFsO1xuIH0sXG57XG5pbnN0YW5jZUFkbWluOm1ha2VJbnN0YW5jZUFkbWluQmVoYXZpb3Ioem9lQmFnZ2FnZSxtYWtlWm9lU2VhdEFkbWluS2l0KSxcbmhlbHBlcjpoZWxwZXJCZWhhdmlvcn0pO1xuXG5cblxucmV0dXJuKGluc3RhbmNlSGFuZGxlLHpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIsYWRtaW5Ob2RlKT0+e1xuY29uc3QgaW5zdGFuY2VBZG1pbj1tYWtlSW5zdGFuY2VBZG1pbk11bHRpKFxuaW5zdGFuY2VIYW5kbGUsXG56b2VJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyLFxuYWRtaW5Ob2RlKS5cbmluc3RhbmNlQWRtaW47XG5yZXR1cm4gaW5zdGFuY2VBZG1pbjtcbiB9O1xuIH07JGjNj19vbmNlLm1ha2VJbnN0YW5jZUFkbWluTWFrZXIobWFrZUluc3RhbmNlQWRtaW5NYWtlcik7XG5cbmhhcmRlbihtYWtlSW5zdGFuY2VBZG1pbk1ha2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJbnN0YW5jZUFkbWluU3RvcmFnZSI6WyJtYWtlSW5zdGFuY2VBZG1pblN0b3JhZ2UiXSwibWFrZUluc3RhbmNlQWRtaW5NYWtlciI6WyJtYWtlSW5zdGFuY2VBZG1pbk1ha2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANnkVB7TAgAA0wIAADQAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy96b2VTZXJ2aWNlL2ludGVybmFsLXR5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuLy9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAACr8z0AYAANAGAAA3AAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvem9lU2VydmljZS9pbnZpdGF0aW9uUXVlcmllcy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIl0sImV4cG9ydHMiOlsibWFrZUludml0YXRpb25RdWVyeUZucyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLEZhaWwscSxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixFOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0ICAgICAgICBtYWtlSW52aXRhdGlvblF1ZXJ5Rm5zPShpbnZpdGF0aW9uSXNzdWVyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldEludml0YXRpb25EZXRhaWxzPWFzeW5jKGludml0YXRpb25QKT0+e1xuY29uc3Qgb25SZWplY3RlZD0ocmVhc29uKT0+e1xuY29uc3QgZXJyPW1ha2VFcnJvcihcblggYEEgWm9lIGludml0YXRpb24gaXMgcmVxdWlyZWQsIG5vdCAke2ludml0YXRpb25QfWApO1xuXG5hbm5vdGF0ZUVycm9yKGVycixYIGBEdWUgdG8gJHtyZWFzb259YCk7XG50aHJvdyBlcnI7XG4gfTtcbmNvbnN0IGludkFtb3VudD1hd2FpdCBFKGludml0YXRpb25Jc3N1ZXIpLlxuZ2V0QW1vdW50T2YoaW52aXRhdGlvblApLlxuY2F0Y2gob25SZWplY3RlZCk7XG5BcnJheS5pc0FycmF5KGludkFtb3VudC52YWx1ZSkmJmludkFtb3VudC52YWx1ZS5sZW5ndGg9PT0xfHxcbkZhaWwgYEV4cGVjdGVkIGV4YWN0bHkgMSBpbnZpdGF0aW9uLCBub3QgJHtxKGludkFtb3VudC52YWx1ZS5sZW5ndGgpfWA7XG5yZXR1cm4gaW52QW1vdW50LnZhbHVlWzBdO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBnZXRJbnN0YW5jZT0oaW52aXRhdGlvbik9PlxuRS5nZXQoZ2V0SW52aXRhdGlvbkRldGFpbHMoaW52aXRhdGlvbikpLmluc3RhbmNlO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldEluc3RhbGxhdGlvbj0oaW52aXRhdGlvbik9PlxuRS5nZXQoZ2V0SW52aXRhdGlvbkRldGFpbHMoaW52aXRhdGlvbikpLmluc3RhbGxhdGlvbjtcblxucmV0dXJuIGhhcmRlbih7XG5nZXRJbnN0YW5jZSxcbmdldEluc3RhbGxhdGlvbixcbmdldEludml0YXRpb25EZXRhaWxzfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlSW52aXRhdGlvblF1ZXJ5Rm5zKG1ha2VJbnZpdGF0aW9uUXVlcnlGbnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUludml0YXRpb25RdWVyeUZucyI6WyJtYWtlSW52aXRhdGlvblF1ZXJ5Rm5zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHpVC6SBBwAAgQcAADQAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy96b2VTZXJ2aWNlL21ha2VJbnZpdGF0aW9uLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2VydHAiLCIuLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsicHJlcGFyZUludml0YXRpb25LaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUsQXNzZXRLaW5kLGhhc0lzc3VlcixwcmVwYXJlSXNzdWVyS2l0LEludml0YXRpb25FbGVtZW50U2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFzc2V0S2luZFwiLCBbJGjNj19hID0+IChBc3NldEtpbmQgPSAkaM2PX2EpXV0sW1wiaGFzSXNzdWVyXCIsIFskaM2PX2EgPT4gKGhhc0lzc3VlciA9ICRozY9fYSldXSxbXCJwcmVwYXJlSXNzdWVyS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVJc3N1ZXJLaXQgPSAkaM2PX2EpXV1dXSxbXCIuLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJJbnZpdGF0aW9uRWxlbWVudFNoYXBlXCIsIFskaM2PX2EgPT4gKEludml0YXRpb25FbGVtZW50U2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLypcblxuICovXG5jb25zdCBaT0VfSU5WSVRBVElPTl9LSVQ9J1pvZUludml0YXRpb25LaXQnO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVJbnZpdGF0aW9uS2l0PShiYWdnYWdlLHNodXRkb3duWm9lVmF0PXVuZGVmaW5lZCk9PntcbmNvbnN0IGludml0YXRpb25LaXRCYWdnYWdlPXByb3ZpZGVEdXJhYmxlTWFwU3RvcmUoXG5iYWdnYWdlLFxuWk9FX0lOVklUQVRJT05fS0lUKTtcblxuaWYoaW52aXRhdGlvbktpdEJhZ2dhZ2UuaGFzKFpPRV9JTlZJVEFUSU9OX0tJVCkpe1xuLy9cbmhhc0lzc3VlcihpbnZpdGF0aW9uS2l0QmFnZ2FnZSl8fFxuRmFpbCBgTGVnYWN5IHVzZSBvZiAke3EoXG5aT0VfSU5WSVRBVElPTl9LSVQpXG4gfSBtdXN0IGJlIHJlZHVuZGFudCB3aXRoIG5vcm1hbCBzdG9yaW5nIG9mIGlzc3VlcktpdCBpbiBpc3N1ZXJCYWdnYWdlYDtcbi8vXG5pbnZpdGF0aW9uS2l0QmFnZ2FnZS5kZWxldGUoWk9FX0lOVklUQVRJT05fS0lUKTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaW52aXRhdGlvbktpdD1wcmVwYXJlSXNzdWVyS2l0KFxuaW52aXRhdGlvbktpdEJhZ2dhZ2UsXG4nWm9lIEludml0YXRpb24nLFxuQXNzZXRLaW5kLlNFVCxcbnVuZGVmaW5lZCxcbnNodXRkb3duWm9lVmF0LFxue2VsZW1lbnRTaGFwZTpJbnZpdGF0aW9uRWxlbWVudFNoYXBlfSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5pbnZpdGF0aW9uSXNzdWVyOmludml0YXRpb25LaXQuaXNzdWVyLFxuaW52aXRhdGlvbktpdH0pO1xuXG4gfTskaM2PX29uY2UucHJlcGFyZUludml0YXRpb25LaXQocHJlcGFyZUludml0YXRpb25LaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZUludml0YXRpb25LaXQiOlsicHJlcGFyZUludml0YXRpb25LaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAJRg6/sFAAD7BQAAOgAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3pvZVNlcnZpY2Uvb2ZmZXIvYnVybkludml0YXRpb24uanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCJdLCJleHBvcnRzIjpbImJ1cm5JbnZpdGF0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsYXNzZXJ0LFgsbWFrZUVycm9yLGFubm90YXRlRXJyb3IsRTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGJ1cm5JbnZpdGF0aW9uPShpbnZpdGF0aW9uSXNzdWVyLGludml0YXRpb24pPT57XG5jb25zdCBoYW5kbGVSZWplY3RlZD0ocmVhc29uKT0+e1xuY29uc3QgZXJyPW1ha2VFcnJvcihYIGBBIFpvZSBpbnZpdGF0aW9uIGlzIHJlcXVpcmVkLCBub3QgJHtpbnZpdGF0aW9ufWApO1xuYW5ub3RhdGVFcnJvcihlcnIsWCBgRHVlIHRvICR7cmVhc29ufWApO1xudGhyb3cgZXJyO1xuIH07XG5jb25zdCBoYW5kbGVGdWxmaWxsZWQ9KGludml0YXRpb25BbW91bnQpPT57XG5jb25zdCBpbnZpdGF0aW9uVmFsdWU9aW52aXRhdGlvbkFtb3VudC52YWx1ZTtcbmFzc2VydChBcnJheS5pc0FycmF5KGludml0YXRpb25WYWx1ZSkpO1xuaW52aXRhdGlvblZhbHVlLmxlbmd0aD09PTF8fFxuRmFpbCBgT25seSBvbmUgaW52aXRhdGlvbiBjYW4gYmUgcmVkZWVtZWQgYXQgYSB0aW1lYDtcbmNvbnN0W3tpbnN0YW5jZTppbnN0YW5jZUhhbmRsZSxoYW5kbGU6aW52aXRhdGlvbkhhbmRsZX1dPVxuaW52aXRhdGlvblZhbHVlO1xucmV0dXJuIGhhcmRlbih7XG5pbnN0YW5jZUhhbmRsZSxcbmludml0YXRpb25IYW5kbGV9KTtcblxuIH07XG5cbnJldHVybiBFLndoZW4oXG5pbnZpdGF0aW9uSXNzdWVyLmJ1cm4oaW52aXRhdGlvbiksXG5oYW5kbGVGdWxmaWxsZWQsXG5oYW5kbGVSZWplY3RlZCk7XG5cbiB9OyRozY9fb25jZS5idXJuSW52aXRhdGlvbihidXJuSW52aXRhdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJidXJuSW52aXRhdGlvbiI6WyJidXJuSW52aXRhdGlvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADXl6DfCwsAAAsLAAAxAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvem9lU2VydmljZS9vZmZlci9vZmZlci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCIuLi8uLi9jbGVhblByb3Bvc2FsLmpzIiwiLi9idXJuSW52aXRhdGlvbi5qcyIsIi4uL2ludml0YXRpb25RdWVyaWVzLmpzIiwiLi4vaW50ZXJuYWwtdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlT2ZmZXJNZXRob2QiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLHBhc3NTdHlsZU9mLG11c3RNYXRjaCxFLGNsZWFuUHJvcG9zYWwsYnVybkludml0YXRpb24sbWFrZUludml0YXRpb25RdWVyeUZuczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIi4uLy4uL2NsZWFuUHJvcG9zYWwuanNcIiwgW1tcImNsZWFuUHJvcG9zYWxcIiwgWyRozY9fYSA9PiAoY2xlYW5Qcm9wb3NhbCA9ICRozY9fYSldXV1dLFtcIi4vYnVybkludml0YXRpb24uanNcIiwgW1tcImJ1cm5JbnZpdGF0aW9uXCIsIFskaM2PX2EgPT4gKGJ1cm5JbnZpdGF0aW9uID0gJGjNj19hKV1dXV0sW1wiLi4vaW52aXRhdGlvblF1ZXJpZXMuanNcIiwgW1tcIm1ha2VJbnZpdGF0aW9uUXVlcnlGbnNcIiwgWyRozY9fYSA9PiAobWFrZUludml0YXRpb25RdWVyeUZucyA9ICRozY9fYSldXV1dLFtcIi4uL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3QgICAgICAgIG1ha2VPZmZlck1ldGhvZD0ob2ZmZXJEYXRhQWNjZXNzKT0+e1xuLyogICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9mZmVyPWFzeW5jKFxuaW52aXRhdGlvbixcbnVuY2xlYW5Qcm9wb3NhbD1oYXJkZW4oe30pLFxucGF5bWVudEtleXdvcmRSZWNvcmQ9aGFyZGVuKHt9KSxcbm9mZmVyQXJncz11bmRlZmluZWQpPT5cbntcbmNvbnN0IGludml0YXRpb25Jc3N1ZXI9b2ZmZXJEYXRhQWNjZXNzLmdldEludml0YXRpb25Jc3N1ZXIoKTtcbmNvbnN0IHF1ZXJ5PW1ha2VJbnZpdGF0aW9uUXVlcnlGbnMoaW52aXRhdGlvbklzc3Vlcik7XG5jb25zdHtpbnN0YW5jZSxkZXNjcmlwdGlvbn09XG5hd2FpdCBxdWVyeS5nZXRJbnZpdGF0aW9uRGV0YWlscyhpbnZpdGF0aW9uKTtcbi8vXG5cbmNvbnN0IGluc3RhbmNlQWRtaW49YXdhaXQgb2ZmZXJEYXRhQWNjZXNzLmdldEluc3RhbmNlQWRtaW4oaW5zdGFuY2UpO1xuLy9cbiFpbnN0YW5jZUFkbWluLmlzQmxvY2tlZChkZXNjcmlwdGlvbil8fFxuRmFpbCBgbm90IGFjY2VwdGluZyBvZmZlciB3aXRoIGRlc2NyaXB0aW9uICR7cShkZXNjcmlwdGlvbil9YDtcbmNvbnN0e2ludml0YXRpb25IYW5kbGV9PWF3YWl0IGJ1cm5JbnZpdGF0aW9uKFxuaW52aXRhdGlvbklzc3Vlcixcbmludml0YXRpb24pO1xuXG4vL1xuXG5pbnN0YW5jZUFkbWluLmFzc2VydEFjY2VwdGluZ09mZmVycygpO1xuXG5jb25zdCBnZXRBc3NldEtpbmRCeUJyYW5kPShicmFuZCk9PntcbnJldHVybiBvZmZlckRhdGFBY2Nlc3MuZ2V0QXNzZXRLaW5kQnlCcmFuZChicmFuZCk7XG4gfTtcblxuY29uc3QgcHJvcG9zYWw9Y2xlYW5Qcm9wb3NhbCh1bmNsZWFuUHJvcG9zYWwsZ2V0QXNzZXRLaW5kQnlCcmFuZCk7XG5jb25zdCBwcm9wb3NhbFNoYXBlPVxub2ZmZXJEYXRhQWNjZXNzLmdldFByb3Bvc2FsU2hhcGVGb3JJbnZpdGF0aW9uKGludml0YXRpb25IYW5kbGUpO1xuaWYocHJvcG9zYWxTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2gocHJvcG9zYWwscHJvcG9zYWxTaGFwZSwgYCR7cShkZXNjcmlwdGlvbil9IHByb3Bvc2FsYCk7XG4gfVxuXG5pZihvZmZlckFyZ3MhPT11bmRlZmluZWQpe1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKG9mZmVyQXJncyk7XG5wYXNzU3R5bGU9PT0nY29weVJlY29yZCd8fFxuRmFpbCBgb2ZmZXJBcmdzIG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgcmVjb3JkLCBidXQgaW5zdGVhZCB3YXMgYSAke3EoXG5wYXNzU3R5bGUpXG4gfTogJHtvZmZlckFyZ3N9YDtcbiB9XG5cbnJldHVybiBFLndoZW4oXG5vZmZlckRhdGFBY2Nlc3MuZGVwb3NpdFBheW1lbnRzKHByb3Bvc2FsLHBheW1lbnRLZXl3b3JkUmVjb3JkKSxcbihpbml0aWFsQWxsb2NhdGlvbik9PlxuaW5zdGFuY2VBZG1pbi5tYWtlVXNlclNlYXQoXG5pbnZpdGF0aW9uSGFuZGxlLFxuaW5pdGlhbEFsbG9jYXRpb24sXG5wcm9wb3NhbCxcbm9mZmVyQXJncykpO1xuXG5cbiB9O1xuXG5yZXR1cm4gb2ZmZXI7XG4gfTskaM2PX29uY2UubWFrZU9mZmVyTWV0aG9kKG1ha2VPZmZlck1ldGhvZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlT2ZmZXJNZXRob2QiOlsibWFrZU9mZmVyTWV0aG9kIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJ8GG236IAAA+iAAADUAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy96b2VTZXJ2aWNlL29yaWdpbmFsWm9lU2VhdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL25vdGlmaWVyIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuLi9jb250cmFjdEZhY2V0L29mZmVyU2FmZXR5LmpzIiwiLi4vdHlwZXMtYW1iaWVudC5qcyIsIi4uL2ludGVybmFsLXR5cGVzLmpzIiwiLi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbIk9yaWdpbmFsWm9lU2VhdElLaXQiLCJab2VVc2VyU2VhdFNoYXBlIiwiY29yZVVzZXJTZWF0TWV0aG9kcyIsImRlY2xhcmVPbGRab2VTZWF0QWRtaW5LaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsU3Vic2NyaWJlclNoYXBlLEUsTSxwcmVwYXJlRXhvQ2xhc3NLaXQsZGVlcGx5RnVsZmlsbGVkLG1ha2VQcm9taXNlS2l0LHNhdGlzZmllc1dhbnQsQW1vdW50S2V5d29yZFJlY29yZFNoYXBlLEtleXdvcmRTaGFwZSxFeGl0T2JqZWN0U2hhcGUsUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIlN1YnNjcmliZXJTaGFwZVwiLCBbJGjNj19hID0+IChTdWJzY3JpYmVyU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjNj19hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCIuLi9jb250cmFjdEZhY2V0L29mZmVyU2FmZXR5LmpzXCIsIFtbXCJzYXRpc2ZpZXNXYW50XCIsIFskaM2PX2EgPT4gKHNhdGlzZmllc1dhbnQgPSAkaM2PX2EpXV1dXSxbXCIuLi90eXBlcy1hbWJpZW50LmpzXCIsIFtdXSxbXCIuLi9pbnRlcm5hbC10eXBlcy5qc1wiLCBbXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiQW1vdW50S2V5d29yZFJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJLZXl3b3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoS2V5d29yZFNoYXBlID0gJGjNj19hKV1dLFtcIkV4aXRPYmplY3RTaGFwZVwiLCBbJGjNj19hID0+IChFeGl0T2JqZWN0U2hhcGUgPSAkaM2PX2EpXV0sW1wiUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdCAgICAgICAgY29yZVVzZXJTZWF0TWV0aG9kcz1oYXJkZW4oe1xuZ2V0UHJvcG9zYWw6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRQYXlvdXRzOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZ2V0UGF5b3V0Ok0uY2FsbChLZXl3b3JkU2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZ2V0T2ZmZXJSZXN1bHQ6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5oYXNFeGl0ZWQ6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5udW1XYW50c1NhdGlzZmllZDpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldEZpbmFsQWxsb2NhdGlvbjpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldEV4aXRTdWJzY3JpYmVyOk0uY2FsbCgpLnJldHVybnMoTS5hbnkoKSl9KTskaM2PX29uY2UuY29yZVVzZXJTZWF0TWV0aG9kcyhjb3JlVXNlclNlYXRNZXRob2RzKTtcblxuXG5jb25zdCAgICAgICAgWm9lVXNlclNlYXRTaGFwZT1NLmludGVyZmFjZSgnVXNlclNlYXQnLHtcbi4uLmNvcmVVc2VyU2VhdE1ldGhvZHMsXG50cnlFeGl0Ok0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpfSk7JGjNj19vbmNlLlpvZVVzZXJTZWF0U2hhcGUoWm9lVXNlclNlYXRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIE9yaWdpbmFsWm9lU2VhdElLaXQ9aGFyZGVuKHtcbnpvZVNlYXRBZG1pbjpNLmludGVyZmFjZSgnWm9lU2VhdEFkbWluJyx7XG5yZXBsYWNlQWxsb2NhdGlvbjpNLmNhbGwoQW1vdW50S2V5d29yZFJlY29yZFNoYXBlKS5yZXR1cm5zKCksXG5leGl0Ok0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5mYWlsOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5yZXNvbHZlRXhpdEFuZFJlc3VsdDpNLmNhbGwoe1xub2ZmZXJSZXN1bHRQcm9taXNlOk0ucHJvbWlzZSgpLFxuZXhpdE9iajpFeGl0T2JqZWN0U2hhcGV9KS5cbnJldHVybnMoKSxcbmdldEV4aXRTdWJzY3JpYmVyOk0uY2FsbCgpLnJldHVybnMoU3Vic2NyaWJlclNoYXBlKSxcbi8vXG4vL1xuZmluYWxQYXlvdXRzOk0uY2FsbChNLmVyZWYoUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUpKS5yZXR1cm5zKFxuTS5wcm9taXNlKCkpfSksXG5cblxudXNlclNlYXQ6Wm9lVXNlclNlYXRTaGFwZX0pOyRozY9fb25jZS5PcmlnaW5hbFpvZVNlYXRJS2l0KE9yaWdpbmFsWm9lU2VhdElLaXQpO1xuXG5cbmNvbnN0IGFzc2VydEhhc05vdEV4aXRlZD0oYyxtc2cpPT57XG4hYy5zdGF0ZS5pbnN0YW5jZUFkbWluSGVscGVyLmhhc0V4aXRlZChjLmZhY2V0cy56b2VTZWF0QWRtaW4pfHxcbmFzc2VydCghYy5zdGF0ZS5pbnN0YW5jZUFkbWluSGVscGVyLmhhc0V4aXRlZChjLmZhY2V0cy56b2VTZWF0QWRtaW4pLG1zZyk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVjbGFyZU9sZFpvZVNlYXRBZG1pbktpbmQ9KGJhZ2dhZ2UsbWFrZUR1cmFibGVQdWJsaXNoS2l0KT0+e1xuY29uc3QgZG9FeGl0PShcbnpvZVNlYXRBZG1pbixcbmN1cnJlbnRBbGxvY2F0aW9uLFxud2l0aGRyYXdGYWNldCxcbmluc3RhbmNlQWRtaW5IZWxwZXIpPT5cbntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF5b3V0cz13aXRoZHJhd0ZhY2V0LndpdGhkcmF3UGF5bWVudHMoY3VycmVudEFsbG9jYXRpb24pO1xucmV0dXJuIEUud2hlbihcbnpvZVNlYXRBZG1pbi5maW5hbFBheW91dHMocGF5b3V0cyksXG4oKT0+aW5zdGFuY2VBZG1pbkhlbHBlci5leGl0Wm9lU2VhdEFkbWluKHpvZVNlYXRBZG1pbiksXG4oKT0+aW5zdGFuY2VBZG1pbkhlbHBlci5leGl0Wm9lU2VhdEFkbWluKHpvZVNlYXRBZG1pbikpO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8qXG5cbiAgICovXG5jb25zdCBlcGhlbWVyYWxPZmZlclJlc3VsdFN0b3JlPW5ldyBXZWFrTWFwKCk7XG5cbi8vXG5wcmVwYXJlRXhvQ2xhc3NLaXQoXG5iYWdnYWdlLFxuJ1pvZVNlYXRLaXQnLFxuT3JpZ2luYWxab2VTZWF0SUtpdCxcbi8qXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbihcbmluaXRpYWxBbGxvY2F0aW9uLFxucHJvcG9zYWwsXG5pbnN0YW5jZUFkbWluSGVscGVyLFxud2l0aGRyYXdGYWNldCxcbmV4aXRPYmo9dW5kZWZpbmVkLFxuLy9cbi8vXG5vZmZlclJlc3VsdElzVW5kZWZpbmVkPWZhbHNlKT0+XG57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZUR1cmFibGVQdWJsaXNoS2l0KCk7XG5yZXR1cm57XG5jdXJyZW50QWxsb2NhdGlvbjppbml0aWFsQWxsb2NhdGlvbixcbnByb3Bvc2FsLFxuZXhpdE9iaixcbm9mZmVyUmVzdWx0Oi8qICAgICAgICAgICAgICAqL3VuZGVmaW5lZCxcbm9mZmVyUmVzdWx0U3RvcmVkOm9mZmVyUmVzdWx0SXNVbmRlZmluZWQsXG5pbnN0YW5jZUFkbWluSGVscGVyLFxud2l0aGRyYXdGYWNldCxcbnB1Ymxpc2hlcixcbnN1YnNjcmliZXIsXG5wYXlvdXRzOmhhcmRlbih7fSksXG5leGl0aW5nOmZhbHNlfTtcblxuIH0sXG57XG56b2VTZWF0QWRtaW46e1xucmVwbGFjZUFsbG9jYXRpb24ocmVwbGFjZW1lbnRBbGxvY2F0aW9uKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuYXNzZXJ0SGFzTm90RXhpdGVkKFxudGhpcyxcbidDYW5ub3QgcmVwbGFjZSBhbGxvY2F0aW9uLiBTZWF0IGhhcyBhbHJlYWR5IGV4aXRlZCcpO1xuXG5oYXJkZW4ocmVwbGFjZW1lbnRBbGxvY2F0aW9uKTtcbi8vXG4vL1xuXG5zdGF0ZS5jdXJyZW50QWxsb2NhdGlvbj1yZXBsYWNlbWVudEFsbG9jYXRpb247XG4gfSxcbmV4aXQoY29tcGxldGlvbil7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG4vL1xuLy9cbmlmKHN0YXRlLmV4aXRpbmcpe1xucmV0dXJuO1xuIH1cbmFzc2VydEhhc05vdEV4aXRlZCh0aGlzLCdDYW5ub3QgZXhpdCBzZWF0LiBTZWF0IGhhcyBhbHJlYWR5IGV4aXRlZCcpO1xuXG5zdGF0ZS5leGl0aW5nPXRydWU7XG52b2lkIEUud2hlbihcbmRvRXhpdChcbmZhY2V0cy56b2VTZWF0QWRtaW4sXG5zdGF0ZS5jdXJyZW50QWxsb2NhdGlvbixcbnN0YXRlLndpdGhkcmF3RmFjZXQsXG5zdGF0ZS5pbnN0YW5jZUFkbWluSGVscGVyKSxcblxuKCk9PnN0YXRlLnB1Ymxpc2hlci5maW5pc2goY29tcGxldGlvbikpO1xuXG4gfSxcbmZhaWwocmVhc29uKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcbi8vXG4vL1xuaWYoc3RhdGUuZXhpdGluZyl7XG5yZXR1cm47XG4gfVxuXG5hc3NlcnRIYXNOb3RFeGl0ZWQodGhpcywnQ2Fubm90IGZhaWwgc2VhdC4gU2VhdCBoYXMgYWxyZWFkeSBleGl0ZWQnKTtcblxuc3RhdGUuZXhpdGluZz10cnVlO1xudm9pZCBFLndoZW4oXG5kb0V4aXQoXG5mYWNldHMuem9lU2VhdEFkbWluLFxuc3RhdGUuY3VycmVudEFsbG9jYXRpb24sXG5zdGF0ZS53aXRoZHJhd0ZhY2V0LFxuc3RhdGUuaW5zdGFuY2VBZG1pbkhlbHBlciksXG5cbigpPT5zdGF0ZS5wdWJsaXNoZXIuZmFpbChyZWFzb24pLFxuKCk9PnN0YXRlLnB1Ymxpc2hlci5mYWlsKHJlYXNvbikpO1xuXG4gfSxcbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZXNvbHZlRXhpdEFuZFJlc3VsdCh7b2ZmZXJSZXN1bHRQcm9taXNlLGV4aXRPYmp9KXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcblxuIXN0YXRlLm9mZmVyUmVzdWx0U3RvcmVkfHxcbkZhaWwgYG9mZmVyUmVzdWx0U3RvcmVkIGJlZm9yZSBvZmZlclJlc3VsdFByb21pc2VgO1xuXG5pZighZXBoZW1lcmFsT2ZmZXJSZXN1bHRTdG9yZS5oYXMoZmFjZXRzLnVzZXJTZWF0KSl7XG4vL1xuY29uc3Qga2l0PW1ha2VQcm9taXNlS2l0KCk7XG5raXQucmVzb2x2ZShvZmZlclJlc3VsdFByb21pc2UpO1xuZXBoZW1lcmFsT2ZmZXJSZXN1bHRTdG9yZS5zZXQoZmFjZXRzLnVzZXJTZWF0LGtpdCk7XG4gfVxuXG5jb25zdCBwS2l0PWVwaGVtZXJhbE9mZmVyUmVzdWx0U3RvcmUuZ2V0KGZhY2V0cy51c2VyU2VhdCk7XG52b2lkIEUud2hlbihcbm9mZmVyUmVzdWx0UHJvbWlzZSxcbihvZmZlclJlc3VsdCk9Pntcbi8vXG5wS2l0LnJlc29sdmUob2ZmZXJSZXN1bHQpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xudm9pZCBFLndoZW4oXG5kZWVwbHlGdWxmaWxsZWQob2ZmZXJSZXN1bHQpLFxuKGZ1bGZpbGxlZE9mZmVyUmVzdWx0KT0+e1xudHJ5e1xuLy9cbnN0YXRlLm9mZmVyUmVzdWx0PWZ1bGZpbGxlZE9mZmVyUmVzdWx0O1xuLy9cbi8vXG5zdGF0ZS5vZmZlclJlc3VsdFN0b3JlZD10cnVlO1xuZXBoZW1lcmFsT2ZmZXJSZXN1bHRTdG9yZS5kZWxldGUoZmFjZXRzLnVzZXJTZWF0KTtcbiB9Y2F0Y2goZXJyKXtcbmNvbnNvbGUud2Fybihcbidub24tZHVyYWJsZSBvZmZlciByZXN1bHQgd2lsbCBiZSBsb3N0IHVwb24gem9lIHZhdCB0ZXJtaW5hdGlvbjonLFxub2ZmZXJSZXN1bHQpO1xuXG4gfVxuIH1cbi8vXG4vL1xuKTtcbiB9LFxuKGUpPT57XG5wS2l0LnJlamVjdChlKTtcbi8vXG4vL1xuIH0pO1xuXG5cbnN0YXRlLmV4aXRPYmo9ZXhpdE9iajtcbiB9LFxuZ2V0RXhpdFN1YnNjcmliZXIoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLnN1YnNjcmliZXI7XG4gfSxcbiAgICAgIGFzeW5jIGZpbmFsUGF5b3V0cyhwYXltZW50cyl7XG5jb25zdHtzdGF0ZX09dGhpcztcblxuY29uc3Qgc2V0dGxlZFBheW91dHM9YXdhaXQgZGVlcGx5RnVsZmlsbGVkKHBheW1lbnRzKTtcbnN0YXRlLnBheW91dHM9c2V0dGxlZFBheW91dHM7XG4gfX0sXG5cbnVzZXJTZWF0OntcbiAgICAgIGFzeW5jIGdldFByb3Bvc2FsKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5wcm9wb3NhbDtcbiB9LFxuICAgICAgYXN5bmMgZ2V0UGF5b3V0cygpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5cbnJldHVybiBFLndoZW4oXG5zdGF0ZS5zdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKCksXG4oKT0+c3RhdGUucGF5b3V0cyxcbigpPT5zdGF0ZS5wYXlvdXRzKTtcblxuIH0sXG4gICAgICBhc3luYyBnZXRQYXlvdXQoa2V5d29yZCl7XG5jb25zdHtzdGF0ZX09dGhpcztcblxuLy9cbi8vXG4vL1xucmV0dXJuIEUud2hlbihcbnN0YXRlLnN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKSxcbigpPT5zdGF0ZS5wYXlvdXRzW2tleXdvcmRdLFxuKCk9PnN0YXRlLnBheW91dHNba2V5d29yZF0pO1xuXG4gfSxcblxuICAgICAgYXN5bmMgZ2V0T2ZmZXJSZXN1bHQoKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcblxuaWYoc3RhdGUub2ZmZXJSZXN1bHRTdG9yZWQpe1xucmV0dXJuIHN0YXRlLm9mZmVyUmVzdWx0O1xuIH1cblxuaWYoZXBoZW1lcmFsT2ZmZXJSZXN1bHRTdG9yZS5oYXMoZmFjZXRzLnVzZXJTZWF0KSl7XG5yZXR1cm4gZXBoZW1lcmFsT2ZmZXJSZXN1bHRTdG9yZS5nZXQoZmFjZXRzLnVzZXJTZWF0KS5wcm9taXNlO1xuIH1cblxuY29uc3Qga2l0PW1ha2VQcm9taXNlS2l0KCk7XG5lcGhlbWVyYWxPZmZlclJlc3VsdFN0b3JlLnNldChmYWNldHMudXNlclNlYXQsa2l0KTtcbnJldHVybiBraXQucHJvbWlzZTtcbiB9LFxuICAgICAgYXN5bmMgaGFzRXhpdGVkKCl7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG5cbnJldHVybihcbnN0YXRlLmV4aXRpbmd8fFxuc3RhdGUuaW5zdGFuY2VBZG1pbkhlbHBlci5oYXNFeGl0ZWQoZmFjZXRzLnpvZVNlYXRBZG1pbikpO1xuXG4gfSxcbiAgICAgIGFzeW5jIHRyeUV4aXQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuaWYoIXN0YXRlLmV4aXRPYmopXG50aHJvdyBGYWlsIGBleGl0T2JqIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZWA7XG5hc3NlcnRIYXNOb3RFeGl0ZWQodGhpcywnQ2Fubm90IGV4aXQ7IHNlYXQgaGFzIGFscmVhZHkgZXhpdGVkJyk7XG5cbnJldHVybiBFKHN0YXRlLmV4aXRPYmopLmV4aXQoKTtcbiB9LFxuICAgICAgYXN5bmMgbnVtV2FudHNTYXRpc2ZpZWQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIEUud2hlbihcbnN0YXRlLnN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKSxcbigpPT5zYXRpc2ZpZXNXYW50KHN0YXRlLnByb3Bvc2FsLHN0YXRlLmN1cnJlbnRBbGxvY2F0aW9uKSxcbigpPT5zYXRpc2ZpZXNXYW50KHN0YXRlLnByb3Bvc2FsLHN0YXRlLmN1cnJlbnRBbGxvY2F0aW9uKSk7XG5cbiB9LFxuZ2V0RXhpdFN1YnNjcmliZXIoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLnN1YnNjcmliZXI7XG4gfSxcbmdldEZpbmFsQWxsb2NhdGlvbigpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gRS53aGVuKFxuc3RhdGUuc3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcigpLFxuKCk9PnN0YXRlLmN1cnJlbnRBbGxvY2F0aW9uLFxuKCk9PnN0YXRlLmN1cnJlbnRBbGxvY2F0aW9uKTtcblxuIH19fSk7XG5cblxuXG4gfTskaM2PX29uY2UuZGVjbGFyZU9sZFpvZVNlYXRBZG1pbktpbmQoZGVjbGFyZU9sZFpvZVNlYXRBZG1pbktpbmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29yZVVzZXJTZWF0TWV0aG9kcyI6WyJjb3JlVXNlclNlYXRNZXRob2RzIl0sIlpvZVVzZXJTZWF0U2hhcGUiOlsiWm9lVXNlclNlYXRTaGFwZSJdLCJPcmlnaW5hbFpvZVNlYXRJS2l0IjpbIk9yaWdpbmFsWm9lU2VhdElLaXQiXSwiZGVjbGFyZU9sZFpvZVNlYXRBZG1pbktpbmQiOlsiZGVjbGFyZU9sZFpvZVNlYXRBZG1pbktpbmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAIM1zeconAADKJwAAMwAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3pvZVNlcnZpY2Uvc3RhcnRJbnN0YW5jZS5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdXBncmFkZS1hcGkuanMiLCJAZW5kby9lcnJvcnMiLCIuLi9tYWtlSGFuZGxlLmpzIiwiLi9pbnN0YW5jZUFkbWluU3RvcmFnZS5qcyIsIi4uL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlU3RhcnRJbnN0YW5jZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLHBhc3NTdHlsZU9mLE0scHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUscHJlcGFyZUV4b0NsYXNzLHByZXBhcmVFeG8sd2F0Y2hQcm9taXNlLGluaXRFbXB0eSxpc1VwZ3JhZGVEaXNjb25uZWN0aW9uLEZhaWwscSxkZWZpbmVEdXJhYmxlSGFuZGxlLG1ha2VJbnN0YW5jZUFkbWluTWFrZXIsQWRtaW5GYWNldEksSW5zdGFuY2VBZG1pbkksSW5zdGFuY2VBZG1pblNoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG8gPSAkaM2PX2EpXV0sW1wid2F0Y2hQcm9taXNlXCIsIFskaM2PX2EgPT4gKHdhdGNoUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImluaXRFbXB0eVwiLCBbJGjNj19hID0+IChpbml0RW1wdHkgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qc1wiLCBbW1wiaXNVcGdyYWRlRGlzY29ubmVjdGlvblwiLCBbJGjNj19hID0+IChpc1VwZ3JhZGVEaXNjb25uZWN0aW9uID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi4vbWFrZUhhbmRsZS5qc1wiLCBbW1wiZGVmaW5lRHVyYWJsZUhhbmRsZVwiLCBbJGjNj19hID0+IChkZWZpbmVEdXJhYmxlSGFuZGxlID0gJGjNj19hKV1dXV0sW1wiLi9pbnN0YW5jZUFkbWluU3RvcmFnZS5qc1wiLCBbW1wibWFrZUluc3RhbmNlQWRtaW5NYWtlclwiLCBbJGjNj19hID0+IChtYWtlSW5zdGFuY2VBZG1pbk1ha2VyID0gJGjNj19hKV1dXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiQWRtaW5GYWNldElcIiwgWyRozY9fYSA9PiAoQWRtaW5GYWNldEkgPSAkaM2PX2EpXV0sW1wiSW5zdGFuY2VBZG1pbklcIiwgWyRozY9fYSA9PiAoSW5zdGFuY2VBZG1pbkkgPSAkaM2PX2EpXV0sW1wiSW5zdGFuY2VBZG1pblNoYXBlXCIsIFskaM2PX2EgPT4gKEluc3RhbmNlQWRtaW5TaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RhcnRJbnN0YW5jZT0oXG5zdGFydEluc3RhbmNlQWNjZXNzLFxuZ2V0WmNmQnVuZGxlQ2FwUCxcbmdldEJ1bmRsZUNhcEJ5SWROb3csXG56b2VCYWdnYWdlKT0+XG57XG5jb25zdCBtYWtlSW5zdGFuY2VIYW5kbGU9ZGVmaW5lRHVyYWJsZUhhbmRsZSh6b2VCYWdnYWdlLCdJbnN0YW5jZScpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2VhdEhhbmRsZVRvWm9lU2VhdEFkbWluPXByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKFxuem9lQmFnZ2FnZSxcbidzZWF0SGFuZGxlVG9ab2VTZWF0QWRtaW4nKTtcblxuXG5jb25zdCBpbnN0YW5jZUFkbWluTWFrZXI9bWFrZUluc3RhbmNlQWRtaW5NYWtlcihcbnpvZUJhZ2dhZ2UsXG5zZWF0SGFuZGxlVG9ab2VTZWF0QWRtaW4pO1xuXG5cbmNvbnN0IGdldEZyZXNoWmNmQnVuZGxlQ2FwPWFzeW5jKCk9PntcbmNvbnN0IHNldHRsZWRCdW5kbGVDYXA9YXdhaXQgZ2V0WmNmQnVuZGxlQ2FwUCgpO1xuc2V0dGxlZEJ1bmRsZUNhcCE9PXVuZGVmaW5lZHx8RmFpbCBgdGhlIFpDRiBidW5kbGUgY2FwIHdhcyBicm9rZW5gO1xucmV0dXJuIHNldHRsZWRCdW5kbGVDYXA7XG4gfTtcblxuY29uc3QgSW5zdGFuY2VBZG1pblN0YXRlU2hhcGU9aGFyZGVuKHtcbmluc3RhbmNlU3RvcmFnZTpNLnJlbW90YWJsZSgnWm9lSW5zdGFuY2VTdG9yYWdlTWFuYWdlcicpLFxuaW5zdGFuY2VBZG1pbjpNLnJlbW90YWJsZSgnSW5zdGFuY2VBZG1pbicpLFxuc2VhdEhhbmRsZVRvU2VhdEFkbWluOk0ucmVtb3RhYmxlKCksLy9cbmFkbWluTm9kZTpNLnJlbW90YWJsZSgnYWRtaW5Ob2RlJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd2F0Y2hlcj1wcmVwYXJlRXhvKFxuem9lQmFnZ2FnZSxcbidJbnN0YW5jZUNvbXBsZXRpb25XYXRjaGVyJyxcbk0uaW50ZXJmYWNlKCdJbnN0YW5jZUNvbXBsZXRpb25XYXRjaGVyJyx7XG5vbkZ1bGZpbGxlZDpNLmNhbGwoXG5NLmFueSgpLFxuSW5zdGFuY2VBZG1pblNoYXBlLFxuTS5yZW1vdGFibGUoJ2FkbWluTm9kZScpKS5cbnJldHVybnMoKSxcbm9uUmVqZWN0ZWQ6TS5jYWxsKFxuTS5hbnkoKSxcbkluc3RhbmNlQWRtaW5TaGFwZSxcbk0ucmVtb3RhYmxlKCdhZG1pbk5vZGUnKSkuXG5yZXR1cm5zKCl9KSxcblxue1xub25GdWxmaWxsZWQ6KGNvbXBsZXRpb24saW5zdGFuY2VBZG1pbik9PlxuaW5zdGFuY2VBZG1pbi5leGl0QWxsU2VhdHMoY29tcGxldGlvbiksXG5vblJlamVjdGVkOigvKiAgICAgICAgICAgICAgICAqL3JlYXNvbixpbnN0YW5jZUFkbWluLGFkbWluTm9kZSk9PntcbmlmKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24ocmVhc29uKSl7XG5jb25zb2xlLmxvZyggYHJlc2V0dGluZyBwcm9taXNlIHdhdGNoZXIgYWZ0ZXIgdXBncmFkZWAscmVhc29uKTtcbi8vXG53YXRjaEZvckFkbWluTm9kZURvbmUoYWRtaW5Ob2RlLGluc3RhbmNlQWRtaW4pO1xuIH1lbHNle1xuaW5zdGFuY2VBZG1pbi5mYWlsQWxsU2VhdHMocmVhc29uKTtcbiB9XG4gfX0pO1xuXG5cblxuY29uc3Qgd2F0Y2hGb3JBZG1pbk5vZGVEb25lPShhZG1pbk5vZGUsaW5zdEFkbWluKT0+e1xud2F0Y2hQcm9taXNlKEUoYWRtaW5Ob2RlKS5kb25lKCksd2F0Y2hlcixpbnN0QWRtaW4sYWRtaW5Ob2RlKTtcbiB9O1xuXG5jb25zdCBtYWtlWm9lSW5zdGFuY2VBZG1pbj1wcmVwYXJlRXhvQ2xhc3MoXG56b2VCYWdnYWdlLFxuJ3pvZUluc3RhbmNlQWRtaW4nLFxuSW5zdGFuY2VBZG1pbkksXG4vKlxuXG5cblxuXG5cbiAgICAgKi9cbihpbnN0YW5jZVN0b3JhZ2UsaW5zdGFuY2VBZG1pbixzZWF0SGFuZGxlVG9TZWF0QWRtaW4sYWRtaW5Ob2RlKT0+KHtcbmluc3RhbmNlU3RvcmFnZSxcbmluc3RhbmNlQWRtaW4sXG5zZWF0SGFuZGxlVG9TZWF0QWRtaW4sXG5hZG1pbk5vZGV9KSxcblxue1xubWFrZUludml0YXRpb24oaGFuZGxlLGRlc2MsY3VzdG9tRGV0YWlscyxwcm9wb3NhbFNoYXBlKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLmluc3RhbmNlU3RvcmFnZS5tYWtlSW52aXRhdGlvbihcbmhhbmRsZSxcbmRlc2MsXG5jdXN0b21EZXRhaWxzLFxucHJvcG9zYWxTaGFwZSk7XG5cbiB9LFxuLy9cbnNhdmVJc3N1ZXIoaXNzdWVyLGtleXdvcmQpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VTdG9yYWdlLnNhdmVJc3N1ZXIoaXNzdWVyLGtleXdvcmQpO1xuIH0sXG4vL1xubWFrZU5vRXNjcm93U2VhdChpbml0aWFsQWxsb2NhdGlvbnMscHJvcG9zYWwsZXhpdE9iaixzZWF0SGFuZGxlKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLmluc3RhbmNlQWRtaW4ubWFrZU5vRXNjcm93U2VhdChcbmluaXRpYWxBbGxvY2F0aW9ucyxcbnByb3Bvc2FsLFxuZXhpdE9iaixcbnNlYXRIYW5kbGUpO1xuXG4gfSxcbmV4aXRBbGxTZWF0cyhjb21wbGV0aW9uKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuc3RhdGUuaW5zdGFuY2VBZG1pbi5leGl0QWxsU2VhdHMoY29tcGxldGlvbik7XG4gfSxcbmZhaWxBbGxTZWF0cyhyZWFzb24pe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VBZG1pbi5mYWlsQWxsU2VhdHMocmVhc29uKTtcbiB9LFxuZXhpdFNlYXQoc2VhdEhhbmRsZSxjb21wbGV0aW9uKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuc3RhdGUuc2VhdEhhbmRsZVRvU2VhdEFkbWluLmdldChzZWF0SGFuZGxlKS5leGl0KGNvbXBsZXRpb24pO1xuIH0sXG5mYWlsU2VhdChzZWF0SGFuZGxlLHJlYXNvbil7XG5jb25zdHtzdGF0ZX09dGhpcztcbnN0YXRlLnNlYXRIYW5kbGVUb1NlYXRBZG1pbi5nZXQoc2VhdEhhbmRsZSkuZmFpbChyZWFzb24pO1xuIH0sXG5tYWtlWm9lTWludChrZXl3b3JkLGFzc2V0S2luZCxkaXNwbGF5SW5mbyxvcHRpb25zKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLmluc3RhbmNlU3RvcmFnZS5tYWtlWm9lTWludChcbmtleXdvcmQsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbm9wdGlvbnMpO1xuXG4gfSxcbnJlZ2lzdGVyRmVlTWludChrZXl3b3JkLGZlZU1pbnRBY2Nlc3Mpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VTdG9yYWdlLnJlZ2lzdGVyRmVlTWludChrZXl3b3JkLGZlZU1pbnRBY2Nlc3MpO1xuIH0sXG5yZXBsYWNlQWxsb2NhdGlvbnMoc2VhdEhhbmRsZUFsbG9jYXRpb25zKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xudHJ5e1xuZm9yKGNvbnN0e3NlYXRIYW5kbGUsYWxsb2NhdGlvbn1vZiBzZWF0SGFuZGxlQWxsb2NhdGlvbnMpe1xuY29uc3Qgem9lU2VhdEFkbWluPXN0YXRlLnNlYXRIYW5kbGVUb1NlYXRBZG1pbi5nZXQoc2VhdEhhbmRsZSk7XG56b2VTZWF0QWRtaW4ucmVwbGFjZUFsbG9jYXRpb24oYWxsb2NhdGlvbik7XG4gfVxuIH1jYXRjaChlcnIpe1xuLy9cbnZvaWQgRShzdGF0ZS5hZG1pbk5vZGUpLnRlcm1pbmF0ZVdpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxuIH0sXG5zdG9wQWNjZXB0aW5nT2ZmZXJzKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZUFkbWluLnN0b3BBY2NlcHRpbmdPZmZlcnMoKTtcbiB9LFxuc2V0T2ZmZXJGaWx0ZXIoc3RyaW5ncyl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnN0YXRlLmluc3RhbmNlQWRtaW4uc2V0T2ZmZXJGaWx0ZXIoc3RyaW5ncyk7XG4gfSxcbmdldE9mZmVyRmlsdGVyKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZUFkbWluLmdldE9mZmVyRmlsdGVyKCk7XG4gfSxcbmdldEV4aXRTdWJzY3JpYmVyKHNlYXRIYW5kbGUpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuc2VhdEhhbmRsZVRvU2VhdEFkbWluLmdldChzZWF0SGFuZGxlKS5nZXRFeGl0U3Vic2NyaWJlcigpO1xuIH0sXG5pc0Jsb2NrZWQoc3RyaW5nKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLmluc3RhbmNlQWRtaW4uaXNCbG9ja2VkKHN0cmluZyk7XG4gfSxcbnJlcGFpckNvbnRyYWN0Q29tcGxldGlvbldhdGNoZXIoKXtcbmNvbnN0e3N0YXRlLHNlbGZ9PXRoaXM7XG52b2lkIHdhdGNoRm9yQWRtaW5Ob2RlRG9uZShzdGF0ZS5hZG1pbk5vZGUsc2VsZik7XG4gfX0sXG5cbntcbnN0YXRlU2hhcGU6SW5zdGFuY2VBZG1pblN0YXRlU2hhcGV9KTtcblxuXG5cbmNvbnN0IHByZXBhcmVFbXB0eUZhY2V0PShmYWNldE5hbWUpPT5cbnByZXBhcmVFeG9DbGFzcyhcbnpvZUJhZ2dhZ2UsXG5mYWNldE5hbWUsXG5NLmludGVyZmFjZShmYWNldE5hbWUse30pLFxuaW5pdEVtcHR5LFxue30pO1xuXG5jb25zdCBtYWtlRW1wdHlDcmVhdG9yRmFjZXQ9cHJlcGFyZUVtcHR5RmFjZXQoJ2VtcHR5Q3JlYXRvckZhY2V0Jyk7XG5jb25zdCBtYWtlRW1wdHlQdWJsaWNGYWNldD1wcmVwYXJlRW1wdHlGYWNldCgnZW1wdHlQdWJsaWNGYWNldCcpO1xuXG5jb25zdCBtYWtlQWRtaW5GYWNldD1wcmVwYXJlRXhvQ2xhc3MoXG56b2VCYWdnYWdlLFxuJ2FkbWluRmFjZXQnLFxuQWRtaW5GYWNldEksXG4vKlxuXG5cblxuICAgICAqL1xuKGFkbWluTm9kZSxjb250cmFjdEJ1bmRsZUNhcCk9Pih7XG5hZG1pbk5vZGUsXG5jb250cmFjdEJ1bmRsZUNhcH0pLFxuXG57XG5nZXRWYXRTaHV0ZG93blByb21pc2UoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuXG5yZXR1cm4gRShzdGF0ZS5hZG1pbk5vZGUpLmRvbmUoKTtcbiB9LFxucmVzdGFydENvbnRyYWN0KG5ld1ByaXZhdGVBcmdzPXVuZGVmaW5lZCl7XG5jb25zdHtzdGF0ZX09dGhpcztcblxuY29uc3QgdmF0UGFyYW1ldGVycz17XG5jb250cmFjdEJ1bmRsZUNhcDpzdGF0ZS5jb250cmFjdEJ1bmRsZUNhcCxcbnByaXZhdGVBcmdzOm5ld1ByaXZhdGVBcmdzfTtcblxuXG5yZXR1cm4gRS53aGVuKGdldEZyZXNoWmNmQnVuZGxlQ2FwKCksKGJDYXApPT5cbkUoc3RhdGUuYWRtaW5Ob2RlKS51cGdyYWRlKGJDYXAse3ZhdFBhcmFtZXRlcnN9KSk7XG5cbiB9LFxuICAgICAgYXN5bmMgdXBncmFkZUNvbnRyYWN0KGNvbnRyYWN0QnVuZGxlSWQsbmV3UHJpdmF0ZUFyZ3M9dW5kZWZpbmVkKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuXG5jb25zdCBuZXdDb250cmFjdEJ1bmRsZUNhcD1cbmF3YWl0IGdldEJ1bmRsZUNhcEJ5SWROb3coY29udHJhY3RCdW5kbGVJZCk7XG5jb25zdCB2YXRQYXJhbWV0ZXJzPXtcbmNvbnRyYWN0QnVuZGxlQ2FwOm5ld0NvbnRyYWN0QnVuZGxlQ2FwLFxucHJpdmF0ZUFyZ3M6bmV3UHJpdmF0ZUFyZ3N9O1xuXG5zdGF0ZS5jb250cmFjdEJ1bmRsZUNhcD1uZXdDb250cmFjdEJ1bmRsZUNhcDtcbnJldHVybiBFLndoZW4oZ2V0RnJlc2haY2ZCdW5kbGVDYXAoKSwoYkNhcCk9PlxuRShzdGF0ZS5hZG1pbk5vZGUpLnVwZ3JhZGUoYkNhcCx7dmF0UGFyYW1ldGVyc30pKTtcblxuIH0sXG50ZXJtaW5hdGVDb250cmFjdChyZWFzb24pe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5cbnJldHVybiBFKHN0YXRlLmFkbWluTm9kZSkudGVybWluYXRlV2l0aEZhaWx1cmUocmVhc29uKTtcbiB9fSk7XG5cblxuXG4vKlxuXG4gICAqL1xuY29uc3Qgc3RhcnRJbnN0YW5jZT1hc3luYyhcbmluc3RhbGxhdGlvblAsXG51bmNsZWFuSXNzdWVyS2V5d29yZFJlY29yZD1oYXJkZW4oe30pLFxuLy9cbmN1c3RvbVRlcm1zPWhhcmRlbih7fSksXG5wcml2YXRlQXJncz11bmRlZmluZWQsXG5pbnN0YW5jZUxhYmVsPScnKT0+XG57XG5jb25zdHtpbnN0YWxsYXRpb24sYnVuZGxlLGJ1bmRsZUNhcH09XG5hd2FpdCBFKHN0YXJ0SW5zdGFuY2VBY2Nlc3MpLnVud3JhcEluc3RhbGxhdGlvbihpbnN0YWxsYXRpb25QKTtcbi8vXG5cbmNvbnN0IGNvbnRyYWN0QnVuZGxlQ2FwPWJ1bmRsZXx8YnVuZGxlQ2FwO1xuYXNzZXJ0KGNvbnRyYWN0QnVuZGxlQ2FwKTtcblxuaWYocHJpdmF0ZUFyZ3MhPT11bmRlZmluZWQpe1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHByaXZhdGVBcmdzKTtcbnBhc3NTdHlsZT09PSdjb3B5UmVjb3JkJ3x8XG5GYWlsIGBwcml2YXRlQXJncyBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IHJlY29yZCwgYnV0IGluc3RlYWQgd2FzIGEgJHtxKFxucGFzc1N0eWxlKVxuIH06ICR7cHJpdmF0ZUFyZ3N9YDtcbiB9XG5cbmNvbnN0IGluc3RhbmNlSGFuZGxlPW1ha2VJbnN0YW5jZUhhbmRsZSgpO1xuXG5jb25zdCB6b2VJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyPWF3YWl0IEUoXG5zdGFydEluc3RhbmNlQWNjZXNzKS5cbm1ha2Vab2VJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyKFxuaW5zdGFsbGF0aW9uLFxuY3VzdG9tVGVybXMsXG51bmNsZWFuSXNzdWVyS2V5d29yZFJlY29yZCxcbmluc3RhbmNlSGFuZGxlLFxuY29udHJhY3RCdW5kbGVDYXAsXG5pbnN0YW5jZUxhYmVsKTtcblxuLy9cblxuY29uc3QgYWRtaW5Ob2RlPXpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIuZ2V0QWRtaW5Ob2RlKCk7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCB6Y2ZSb290PXpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIuZ2V0Um9vdCgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YW5jZUFkbWluPWluc3RhbmNlQWRtaW5NYWtlcihcbmluc3RhbmNlSGFuZGxlLFxuem9lSW5zdGFuY2VTdG9yYWdlTWFuYWdlcixcbmFkbWluTm9kZSk7XG5cbnpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIuaW5pdEluc3RhbmNlQWRtaW4oaW5zdGFuY2VIYW5kbGUsaW5zdGFuY2VBZG1pbik7XG5cbnZvaWQgd2F0Y2hGb3JBZG1pbk5vZGVEb25lKGFkbWluTm9kZSxpbnN0YW5jZUFkbWluKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IHpvZUluc3RhbmNlQWRtaW5Gb3JaY2Y9bWFrZVpvZUluc3RhbmNlQWRtaW4oXG56b2VJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyLFxuaW5zdGFuY2VBZG1pbixcbnNlYXRIYW5kbGVUb1pvZVNlYXRBZG1pbixcbmFkbWluTm9kZSk7XG5cblxuLy9cblxuY29uc3R7XG5jcmVhdG9yRmFjZXQ9bWFrZUVtcHR5Q3JlYXRvckZhY2V0KCksXG5wdWJsaWNGYWNldD1tYWtlRW1wdHlQdWJsaWNGYWNldCgpLFxuY3JlYXRvckludml0YXRpb246Y3JlYXRvckludml0YXRpb25QLFxuaGFuZGxlT2ZmZXJPYmp9PVxuYXdhaXQgRSh6Y2ZSb290KS5zdGFydFpjZihcbnpvZUluc3RhbmNlQWRtaW5Gb3JaY2YsXG56b2VJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyLmdldEluc3RhbmNlUmVjb3JkKCksXG56b2VJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyLmdldElzc3VlclJlY29yZHMoKSxcbnByaXZhdGVBcmdzKTtcblxuXG5pbnN0YW5jZUFkbWluLmluaXREZWxheWVkU3RhdGUoaGFuZGxlT2ZmZXJPYmoscHVibGljRmFjZXQpO1xuXG4vL1xuLy9cbi8vXG5yZXR1cm4gRS53aGVuKFxuUHJvbWlzZS5hbGwoW1xuY3JlYXRvckludml0YXRpb25QLFxuY3JlYXRvckludml0YXRpb25QIT09dW5kZWZpbmVkJiZcbnpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIuXG5nZXRJbnZpdGF0aW9uSXNzdWVyKCkuXG5pc0xpdmUoY3JlYXRvckludml0YXRpb25QKV0pLFxuXG4oW2NyZWF0b3JJbnZpdGF0aW9uLGlzTGl2ZVJlc3VsdF0pPT57XG5jcmVhdG9ySW52aXRhdGlvbj09PXVuZGVmaW5lZHx8XG5pc0xpdmVSZXN1bHR8fFxuRmFpbCBgVGhlIGNvbnRyYWN0IGRpZCBub3QgY29ycmVjdGx5IHJldHVybiBhIGNyZWF0b3JJbnZpdGF0aW9uYDtcblxuY29uc3QgYWRtaW5GYWNldD1tYWtlQWRtaW5GYWNldChhZG1pbk5vZGUsY29udHJhY3RCdW5kbGVDYXApO1xuXG4vL1xucmV0dXJuIGhhcmRlbih7XG5jcmVhdG9yRmFjZXQsXG5cbi8vXG5jcmVhdG9ySW52aXRhdGlvbixcbmluc3RhbmNlOmluc3RhbmNlSGFuZGxlLFxucHVibGljRmFjZXQsXG5hZG1pbkZhY2V0fSk7XG5cbiB9KTtcblxuIH07XG5yZXR1cm4gaGFyZGVuKHN0YXJ0SW5zdGFuY2UpO1xuIH07JGjNj19vbmNlLm1ha2VTdGFydEluc3RhbmNlKG1ha2VTdGFydEluc3RhbmNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VTdGFydEluc3RhbmNlIjpbIm1ha2VTdGFydEluc3RhbmNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMue+T8AGwAAABsAACkAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy96b2VTZXJ2aWNlL3pvZS5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL3N0b3JlIiwiQGVuZG8vZXJyb3JzIiwiLi96b2VTdG9yYWdlTWFuYWdlci5qcyIsIi4vc3RhcnRJbnN0YW5jZS5qcyIsIi4vb2ZmZXIvb2ZmZXIuanMiLCIuL2ludml0YXRpb25RdWVyaWVzLmpzIiwiLi9jcmVhdGVaQ0ZWYXQuanMiLCIuL2ZlZU1pbnQuanMiLCIuLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsibWFrZUR1cmFibGVab2VLaXQiLCJtYWtlWm9lS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxwcmVwYXJlRXhvLE0sRmFpbCxtYWtlWm9lU3RvcmFnZU1hbmFnZXIsbWFrZVN0YXJ0SW5zdGFuY2UsbWFrZU9mZmVyTWV0aG9kLG1ha2VJbnZpdGF0aW9uUXVlcnlGbnMsZ2V0WmNmQnVuZGxlQ2FwLGRlZmF1bHRGZWVJc3N1ZXJDb25maWcscHJlcGFyZUZlZU1pbnQsWm9lU2VydmljZUk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG8gPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vem9lU3RvcmFnZU1hbmFnZXIuanNcIiwgW1tcIm1ha2Vab2VTdG9yYWdlTWFuYWdlclwiLCBbJGjNj19hID0+IChtYWtlWm9lU3RvcmFnZU1hbmFnZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N0YXJ0SW5zdGFuY2UuanNcIiwgW1tcIm1ha2VTdGFydEluc3RhbmNlXCIsIFskaM2PX2EgPT4gKG1ha2VTdGFydEluc3RhbmNlID0gJGjNj19hKV1dXV0sW1wiLi9vZmZlci9vZmZlci5qc1wiLCBbW1wibWFrZU9mZmVyTWV0aG9kXCIsIFskaM2PX2EgPT4gKG1ha2VPZmZlck1ldGhvZCA9ICRozY9fYSldXV1dLFtcIi4vaW52aXRhdGlvblF1ZXJpZXMuanNcIiwgW1tcIm1ha2VJbnZpdGF0aW9uUXVlcnlGbnNcIiwgWyRozY9fYSA9PiAobWFrZUludml0YXRpb25RdWVyeUZucyA9ICRozY9fYSldXV1dLFtcIi4vY3JlYXRlWkNGVmF0LmpzXCIsIFtbXCJnZXRaY2ZCdW5kbGVDYXBcIiwgWyRozY9fYSA9PiAoZ2V0WmNmQnVuZGxlQ2FwID0gJGjNj19hKV1dXV0sW1wiLi9mZWVNaW50LmpzXCIsIFtbXCJkZWZhdWx0RmVlSXNzdWVyQ29uZmlnXCIsIFskaM2PX2EgPT4gKGRlZmF1bHRGZWVJc3N1ZXJDb25maWcgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUZlZU1pbnRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUZlZU1pbnQgPSAkaM2PX2EpXV1dXSxbXCIuLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJab2VTZXJ2aWNlSVwiLCBbJGjNj19hID0+IChab2VTZXJ2aWNlSSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VEdXJhYmxlWm9lS2l0PSh7XG56b2VCYWdnYWdlLFxudmF0QWRtaW5TdmMsXG5zaHV0ZG93blpvZVZhdD0oKT0+eyB9LFxuZmVlSXNzdWVyQ29uZmlnPWRlZmF1bHRGZWVJc3N1ZXJDb25maWcsXG56Y2ZTcGVjPXtuYW1lOid6Y2YnfX0pPT5cbntcbi8qICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHpjZkJ1bmRsZUNhcDtcblxuY29uc3Qgc2F2ZUJ1bmRsZUNhcD0oKT0+e1xudm9pZCBFLndoZW4oXG5Qcm9taXNlLmFsbChbdmF0QWRtaW5TdmMsZ2V0WmNmQnVuZGxlQ2FwKHpjZlNwZWMsdmF0QWRtaW5TdmMpXSksXG4oW3ZhdEFkbWluU2VydmljZSxidW5kbGVDYXBdKT0+e1xuemNmQnVuZGxlQ2FwPWJ1bmRsZUNhcDtcblxuaWYoIXpvZUJhZ2dhZ2UuaGFzKCd2YXRBZG1pblN2YycpKXtcbnpvZUJhZ2dhZ2UuaW5pdCgndmF0QWRtaW5TdmMnLHZhdEFkbWluU2VydmljZSk7XG56b2VCYWdnYWdlLmluaXQoJ3pjZkJ1bmRsZUNhcCcsemNmQnVuZGxlQ2FwKTtcbiB9ZWxzZXtcbnpvZUJhZ2dhZ2Uuc2V0KCd2YXRBZG1pblN2YycsdmF0QWRtaW5TZXJ2aWNlKTtcbnpvZUJhZ2dhZ2Uuc2V0KCd6Y2ZCdW5kbGVDYXAnLHpjZkJ1bmRsZUNhcCk7XG4gfVxuIH0pO1xuXG4gfTtcblxuY29uc3Qgc2V0VmF0QWRtaW5TZXJ2aWNlPUZhcignc2V0VmF0QWRtaW5TZXJ2aWNlJywobGF0ZVZhdEFkbWluU3ZjKT0+e1xudmF0QWRtaW5TdmM9bGF0ZVZhdEFkbWluU3ZjO1xuc2F2ZUJ1bmRsZUNhcCgpO1xuIH0pO1xuXG5pZih2YXRBZG1pblN2Yyl7XG5zYXZlQnVuZGxlQ2FwKCk7XG4gfWVsc2UgaWYoem9lQmFnZ2FnZS5oYXMoJ3pjZkJ1bmRsZUNhcCcpKXtcbnpjZkJ1bmRsZUNhcD16b2VCYWdnYWdlLmdldCgnemNmQnVuZGxlQ2FwJyk7XG4vL1xudmF0QWRtaW5TdmM9em9lQmFnZ2FnZS5nZXQoJ3ZhdEFkbWluU3ZjJyk7XG4gfVxuXG5jb25zdCBmZWVNaW50S2l0PXByZXBhcmVGZWVNaW50KFxuem9lQmFnZ2FnZSxcbmZlZUlzc3VlckNvbmZpZyxcbnNodXRkb3duWm9lVmF0KTtcblxuXG4vL1xuY29uc3QgZ2V0QWN0dWFsVmF0QWRtaW5TdmNQPSgpPT57XG5pZighdmF0QWRtaW5TdmMpe1xudGhyb3cgRmFpbCBgY3JlYXRlWkNGVmF0IGRpZCBub3QgZ2V0IGJ1bmRsZUNhcGA7XG4gfVxucmV0dXJuIHZhdEFkbWluU3ZjO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBnZXRCdW5kbGVDYXBGb3JJRD0oYnVuZGxlSUQpPT57XG5yZXR1cm4gRShnZXRBY3R1YWxWYXRBZG1pblN2Y1AoKSkud2FpdEZvckJ1bmRsZUNhcChidW5kbGVJRCk7XG4gfTtcblxuY29uc3QgZ2V0QnVuZGxlQ2FwQnlJZE5vdz0oaWQpPT57XG5yZXR1cm4gRShnZXRBY3R1YWxWYXRBZG1pblN2Y1AoKSkuZ2V0QnVuZGxlQ2FwKGlkKTtcbiB9O1xuXG4vL1xuLy9cbi8vXG5jb25zdCBjcmVhdGVaQ0ZWYXQ9KGNvbnRyYWN0QnVuZGxlQ2FwLGNvbnRyYWN0TGFiZWwpPT57XG56Y2ZCdW5kbGVDYXB8fEZhaWwgYGNyZWF0ZVpDRlZhdCBkaWQgbm90IGdldCBidW5kbGVDYXBgO1xuY29uc3QgbmFtZT1cbmNvbnRyYWN0TGFiZWwmJlxudHlwZW9mIGNvbnRyYWN0TGFiZWw9PT0nc3RyaW5nJyYmXG5jb250cmFjdExhYmVsLmxlbmd0aD4wP1xuIGB6Y2YtJHtjb250cmFjdExhYmVsfWA6XG4nemNmJztcblxucmV0dXJuIEUoZ2V0QWN0dWFsVmF0QWRtaW5TdmNQKCkpLmNyZWF0ZVZhdChcbnpjZkJ1bmRsZUNhcCxcbmhhcmRlbih7XG5uYW1lLFxudmF0UGFyYW1ldGVyczp7XG5jb250cmFjdEJ1bmRsZUNhcCxcbi8vXG56b2VTZXJ2aWNlLFxuLy9cbmludml0YXRpb25Jc3N1ZXI6aW52aXRhdGlvbklzc3VlckFjY2Vzcy5nZXRJbnZpdGF0aW9uSXNzdWVyKCl9fSkpO1xuXG5cblxuIH07XG5cbi8vXG4vL1xuY29uc3R7XG56b2VTZXJ2aWNlRGF0YUFjY2VzczpkYXRhQWNjZXNzLFxubWFrZU9mZmVyQWNjZXNzLFxuc3RhcnRJbnN0YW5jZUFjY2Vzcyxcbmludml0YXRpb25Jc3N1ZXJBY2Nlc3N9PVxubWFrZVpvZVN0b3JhZ2VNYW5hZ2VyKFxuY3JlYXRlWkNGVmF0LFxuZ2V0QnVuZGxlQ2FwRm9ySUQsXG5zaHV0ZG93blpvZVZhdCxcbmZlZU1pbnRLaXQuZmVlTWludCxcbnpvZUJhZ2dhZ2UpO1xuXG5cbi8vXG5jb25zdCBzdGFydEluc3RhbmNlPW1ha2VTdGFydEluc3RhbmNlKFxuc3RhcnRJbnN0YW5jZUFjY2VzcyxcbigpPT56Y2ZCdW5kbGVDYXAsXG5nZXRCdW5kbGVDYXBCeUlkTm93LFxuem9lQmFnZ2FnZSk7XG5cblxuLy9cbmNvbnN0IG9mZmVyPW1ha2VPZmZlck1ldGhvZChtYWtlT2ZmZXJBY2Nlc3MpO1xuXG4vL1xuLy9cblxuY29uc3QgaW52aXRhdGlvbklzc3Vlcj1pbnZpdGF0aW9uSXNzdWVyQWNjZXNzLmdldEludml0YXRpb25Jc3N1ZXIoKTtcbmNvbnN0e2dldEluc3RhbmNlLGdldEluc3RhbGxhdGlvbixnZXRJbnZpdGF0aW9uRGV0YWlsc309XG5tYWtlSW52aXRhdGlvblF1ZXJ5Rm5zKGludml0YXRpb25Jc3N1ZXIpO1xuXG5jb25zdCBnZXRDb25maWd1cmF0aW9uPSgpPT57XG5yZXR1cm4gaGFyZGVuKHtcbmZlZUlzc3VlckNvbmZpZ30pO1xuXG4gfTtcblxuY29uc3QgWm9lQ29uZmlnST1NLmludGVyZmFjZSgnWm9lQ29uZmlnRmFjZXQnLHtcbnVwZGF0ZVpjZkJ1bmRsZUlkOk0uY2FsbChNLnN0cmluZygpKS5yZXR1cm5zKCl9KTtcblxuXG5jb25zdCB6b2VDb25maWdGYWNldD1wcmVwYXJlRXhvKHpvZUJhZ2dhZ2UsJ1pvZUNvbmZpZ0ZhY2V0Jyxab2VDb25maWdJLHtcbnVwZGF0ZVpjZkJ1bmRsZUlkKGJ1bmRsZUlkKXtcbnZvaWQgRS53aGVuKFxuZ2V0WmNmQnVuZGxlQ2FwKHtpZDpidW5kbGVJZH0sdmF0QWRtaW5TdmMpLFxuKGJ1bmRsZUNhcCk9PntcbnpjZkJ1bmRsZUNhcD1idW5kbGVDYXA7XG56b2VCYWdnYWdlLnNldCgnemNmQnVuZGxlQ2FwJyx6Y2ZCdW5kbGVDYXApO1xuIH0sXG4oZSk9PntcbmNvbnNvbGUuZXJyb3IoJ/CfmqggdW5hYmxlIHRvIHVwZGF0ZSBaQ0YgQnVuZGxlOiAnLGUpO1xudGhyb3cgZTtcbiB9KTtcblxuIH19KTtcblxuXG5jb25zdCB6b2VTZXJ2aWNlPXByZXBhcmVFeG8oXG56b2VCYWdnYWdlLFxuJ1pvZVNlcnZpY2UnLFxuWm9lU2VydmljZUksXG4vKiAgICAgICAgICAgICAgICAgICAgICove1xuaW5zdGFsbChidW5kbGVJZCxidW5kbGVMYWJlbCl7XG5yZXR1cm4gZGF0YUFjY2Vzcy5pbnN0YWxsQnVuZGxlKGJ1bmRsZUlkLGJ1bmRsZUxhYmVsKTtcbiB9LFxuaW5zdGFsbEJ1bmRsZUlEKGJ1bmRsZUlkLGJ1bmRsZUxhYmVsKXtcbnJldHVybiBkYXRhQWNjZXNzLmluc3RhbGxCdW5kbGVJRChidW5kbGVJZCxidW5kbGVMYWJlbCk7XG4gfSxcbnN0YXJ0SW5zdGFuY2UsXG5vZmZlcixcblxuLy9cbi8vXG5nZXRPZmZlckZpbHRlcihpbnN0YW5jZSl7XG5yZXR1cm4gZGF0YUFjY2Vzcy5nZXRPZmZlckZpbHRlcihpbnN0YW5jZSk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEludml0YXRpb25Jc3N1ZXIoKXtcbnJldHVybiBkYXRhQWNjZXNzLmdldEludml0YXRpb25Jc3N1ZXIoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0RmVlSXNzdWVyKCl7XG5yZXR1cm4gZmVlTWludEtpdC5mZWVNaW50LmdldEZlZUlzc3VlcigpO1xuIH0sXG5cbmdldEJyYW5kcyhpbnN0YW5jZSl7XG5yZXR1cm4gZGF0YUFjY2Vzcy5nZXRCcmFuZHMoaW5zdGFuY2UpO1xuIH0sXG5nZXRJc3N1ZXJzKGluc3RhbmNlKXtcbnJldHVybiBkYXRhQWNjZXNzLmdldElzc3VlcnMoaW5zdGFuY2UpO1xuIH0sXG5nZXRQdWJsaWNGYWNldChpbnN0YW5jZSl7XG5yZXR1cm4gZGF0YUFjY2Vzcy5nZXRQdWJsaWNGYWNldChpbnN0YW5jZSk7XG4gfSxcbmdldFRlcm1zKGluc3RhbmNlKXtcbnJldHVybiBkYXRhQWNjZXNzLmdldFRlcm1zKGluc3RhbmNlKTtcbiB9LFxuZ2V0SW5zdGFsbGF0aW9uRm9ySW5zdGFuY2UoaW5zdGFuY2Upe1xucmV0dXJuIGRhdGFBY2Nlc3MuZ2V0SW5zdGFsbGF0aW9uKGluc3RhbmNlKTtcbiB9LFxuZ2V0QnVuZGxlSURGcm9tSW5zdGFsbGF0aW9uKGluc3RhbGxhdGlvbil7XG5yZXR1cm4gZGF0YUFjY2Vzcy5nZXRCdW5kbGVJREZyb21JbnN0YWxsYXRpb24oaW5zdGFsbGF0aW9uKTtcbiB9LFxuZ2V0SW5zdGFsbGF0aW9uLFxuXG5nZXRJbnN0YW5jZShpbnZpdGF0aW9uKXtcbnJldHVybiBnZXRJbnN0YW5jZShpbnZpdGF0aW9uKTtcbiB9LFxuZ2V0Q29uZmlndXJhdGlvbixcbmdldEludml0YXRpb25EZXRhaWxzLFxuZ2V0UHJvcG9zYWxTaGFwZUZvckludml0YXRpb24oaW52aXRhdGlvbil7XG5yZXR1cm4gZGF0YUFjY2Vzcy5nZXRQcm9wb3NhbFNoYXBlRm9ySW52aXRhdGlvbihpbnZpdGF0aW9uKTtcbiB9fSk7XG5cblxuXG5yZXR1cm4gaGFyZGVuKHtcbnpvZVNlcnZpY2UsXG56b2VDb25maWdGYWNldCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5mZWVNaW50QWNjZXNzOmZlZU1pbnRLaXQuZmVlTWludEFjY2VzcyxcbnNldFZhdEFkbWluU2VydmljZX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZUR1cmFibGVab2VLaXQobWFrZUR1cmFibGVab2VLaXQpO1xuY29uc3QgbWFrZVpvZUtpdD0odmF0QWRtaW5TdmMsc2h1dGRvd25ab2VWYXQsZmVlSXNzdWVyQ29uZmlnLHpjZlNwZWMpPT5cbm1ha2VEdXJhYmxlWm9lS2l0KHtcbnZhdEFkbWluU3ZjLFxuc2h1dGRvd25ab2VWYXQsXG5mZWVJc3N1ZXJDb25maWcsXG56Y2ZTcGVjLFxuem9lQmFnZ2FnZTptYWtlU2NhbGFyQmlnTWFwU3RvcmUoJ2Zha2Ugem9lIGJhZ2dhZ2UnLHtkdXJhYmxlOnRydWV9KX0pOyRozY9fb25jZS5tYWtlWm9lS2l0KG1ha2Vab2VLaXQpO1xuXG5oYXJkZW4obWFrZVpvZUtpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRHVyYWJsZVpvZUtpdCI6WyJtYWtlRHVyYWJsZVpvZUtpdCJdLCJtYWtlWm9lS2l0IjpbIm1ha2Vab2VLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAUbksUy4mAAAuJgAALQAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3pvZVNlcnZpY2Uvem9lU2VhdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL25vdGlmaWVyIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuLi9jb250cmFjdEZhY2V0L29mZmVyU2FmZXR5LmpzIiwiLi4vdHlwZXMtYW1iaWVudC5qcyIsIi4uL2ludGVybmFsLXR5cGVzLmpzIiwiLi9vcmlnaW5hbFpvZVNlYXQuanMiXSwiZXhwb3J0cyI6WyJtYWtlWm9lU2VhdEFkbWluRmFjdG9yeSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCxFLE0scHJlcGFyZUV4b0NsYXNzS2l0LGRlZXBseUZ1bGZpbGxlZCxtYWtlUHJvbWlzZUtpdCxzYXRpc2ZpZXNXYW50LGRlY2xhcmVPbGRab2VTZWF0QWRtaW5LaW5kLE9yaWdpbmFsWm9lU2VhdElLaXQsWm9lVXNlclNlYXRTaGFwZSxjb3JlVXNlclNlYXRNZXRob2RzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc0tpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJkZWVwbHlGdWxmaWxsZWRcIiwgWyRozY9fYSA9PiAoZGVlcGx5RnVsZmlsbGVkID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjNj19hKV1dXV0sW1wiLi4vY29udHJhY3RGYWNldC9vZmZlclNhZmV0eS5qc1wiLCBbW1wic2F0aXNmaWVzV2FudFwiLCBbJGjNj19hID0+IChzYXRpc2ZpZXNXYW50ID0gJGjNj19hKV1dXV0sW1wiLi4vdHlwZXMtYW1iaWVudC5qc1wiLCBbXV0sW1wiLi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dLFtcIi4vb3JpZ2luYWxab2VTZWF0LmpzXCIsIFtbXCJkZWNsYXJlT2xkWm9lU2VhdEFkbWluS2luZFwiLCBbJGjNj19hID0+IChkZWNsYXJlT2xkWm9lU2VhdEFkbWluS2luZCA9ICRozY9fYSldXSxbXCJPcmlnaW5hbFpvZVNlYXRJS2l0XCIsIFskaM2PX2EgPT4gKE9yaWdpbmFsWm9lU2VhdElLaXQgPSAkaM2PX2EpXV0sW1wiWm9lVXNlclNlYXRTaGFwZVwiLCBbJGjNj19hID0+IChab2VVc2VyU2VhdFNoYXBlID0gJGjNj19hKV1dLFtcImNvcmVVc2VyU2VhdE1ldGhvZHNcIiwgWyRozY9fYSA9PiAoY29yZVVzZXJTZWF0TWV0aG9kcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG4vL1xuLy9cblxuY29uc3QgWm9lU2VhdEFkbWluPWhhcmRlbih7XG51c2VyU2VhdEFjY2VzczpNLmludGVyZmFjZSgnVXNlclNlYXRBY2Nlc3MnLHtcbi4uLmNvcmVVc2VyU2VhdE1ldGhvZHMsXG5pbml0RXhpdE9iamVjdFNldHRlcjpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpLFxuYXNzZXJ0SGFzTm90RXhpdGVkOk0uY2FsbChNLnN0cmluZygpKS5yZXR1cm5zKCl9KSxcblxuem9lU2VhdEFkbWluOk9yaWdpbmFsWm9lU2VhdElLaXQuem9lU2VhdEFkbWlufSk7XG5cblxuY29uc3QgWm9lVXNlclNlYXQ9aGFyZGVuKHtcbnVzZXJTZWF0OlpvZVVzZXJTZWF0U2hhcGUsXG5leGl0T2JqU2V0dGVyOk0uaW50ZXJmYWNlKCdleGl0T2JqU2V0dGVyJyx7XG5zZXRFeGl0T2JqZWN0Ok0uY2FsbChNLm9yKE0ucmVtb3RhYmxlKCksTS51bmRlZmluZWQoKSkpLnJldHVybnMoKX0pfSk7XG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2Vab2VTZWF0QWRtaW5GYWN0b3J5PShiYWdnYWdlKT0+e1xuY29uc3QgbWFrZUR1cmFibGVQdWJsaXNoS2l0PXByZXBhcmVEdXJhYmxlUHVibGlzaEtpdChcbmJhZ2dhZ2UsXG4nem9lIFNlYXQgcHVibGlzaGVyJyk7XG5cblxuZGVjbGFyZU9sZFpvZVNlYXRBZG1pbktpbmQoYmFnZ2FnZSxtYWtlRHVyYWJsZVB1Ymxpc2hLaXQpO1xuXG5jb25zdCBkb0V4aXQ9KFxuem9lU2VhdEFkbWluLFxuY3VycmVudEFsbG9jYXRpb24sXG53aXRoZHJhd0ZhY2V0LFxuaW5zdGFuY2VBZG1pbkhlbHBlcik9Plxue1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYXlvdXRzPXdpdGhkcmF3RmFjZXQud2l0aGRyYXdQYXltZW50cyhjdXJyZW50QWxsb2NhdGlvbik7XG5yZXR1cm4gRS53aGVuKFxuem9lU2VhdEFkbWluLmZpbmFsUGF5b3V0cyhwYXlvdXRzKSxcbigpPT5pbnN0YW5jZUFkbWluSGVscGVyLmV4aXRab2VTZWF0QWRtaW4oem9lU2VhdEFkbWluKSxcbigpPT5pbnN0YW5jZUFkbWluSGVscGVyLmV4aXRab2VTZWF0QWRtaW4oem9lU2VhdEFkbWluKSk7XG5cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLypcblxuICAgKi9cbmNvbnN0IGVwaGVtZXJhbE9mZmVyUmVzdWx0U3RvcmU9bmV3IFdlYWtNYXAoKTtcblxuY29uc3QgbWFrZVpvZVNlYXRBZG1pbj1wcmVwYXJlRXhvQ2xhc3NLaXQoXG5iYWdnYWdlLFxuJ1pvZVNlYXRBZG1pbicsXG5ab2VTZWF0QWRtaW4sXG4vKlxuXG5cblxuXG5cbiAgICAgKi9cbihcbmluaXRpYWxBbGxvY2F0aW9uLFxucHJvcG9zYWwsXG5pbnN0YW5jZUFkbWluSGVscGVyLFxud2l0aGRyYXdGYWNldCxcbi8vXG4vL1xub2ZmZXJSZXN1bHRJc1VuZGVmaW5lZD1mYWxzZSk9Plxue1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VEdXJhYmxlUHVibGlzaEtpdCgpO1xucmV0dXJue1xuY3VycmVudEFsbG9jYXRpb246aW5pdGlhbEFsbG9jYXRpb24sXG5wcm9wb3NhbCxcbm9mZmVyUmVzdWx0Oi8qICAgICAgICAgICAgICAqL3VuZGVmaW5lZCxcbm9mZmVyUmVzdWx0U3RvcmVkOm9mZmVyUmVzdWx0SXNVbmRlZmluZWQsXG5pbnN0YW5jZUFkbWluSGVscGVyLFxud2l0aGRyYXdGYWNldCxcbnB1Ymxpc2hlcixcbnN1YnNjcmliZXIsXG5wYXlvdXRzOmhhcmRlbih7fSksXG5leGl0aW5nOmZhbHNlLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmV4aXRPYmplY3RTZXR0ZXI6dW5kZWZpbmVkfTtcblxuIH0sXG57XG4vL1xudXNlclNlYXRBY2Nlc3M6e1xuICAgICAgYXN5bmMgZ2V0UHJvcG9zYWwoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLnByb3Bvc2FsO1xuIH0sXG4gICAgICBhc3luYyBnZXRQYXlvdXRzKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcblxucmV0dXJuIEUud2hlbihcbnN0YXRlLnN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKSxcbigpPT5zdGF0ZS5wYXlvdXRzLFxuKCk9PnN0YXRlLnBheW91dHMpO1xuXG4gfSxcbiAgICAgIGFzeW5jIGdldFBheW91dChrZXl3b3JkKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuXG4vL1xuLy9cbi8vXG5yZXR1cm4gRS53aGVuKFxuc3RhdGUuc3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcigpLFxuKCk9PnN0YXRlLnBheW91dHNba2V5d29yZF0sXG4oKT0+c3RhdGUucGF5b3V0c1trZXl3b3JkXSk7XG5cbiB9LFxuXG4gICAgICBhc3luYyBnZXRPZmZlclJlc3VsdCgpe1xuY29uc3R7c3RhdGUsZmFjZXRzfT10aGlzO1xuXG5pZihzdGF0ZS5vZmZlclJlc3VsdFN0b3JlZCl7XG5yZXR1cm4gc3RhdGUub2ZmZXJSZXN1bHQ7XG4gfVxuXG5pZihlcGhlbWVyYWxPZmZlclJlc3VsdFN0b3JlLmhhcyhmYWNldHMuem9lU2VhdEFkbWluKSl7XG5yZXR1cm4gZXBoZW1lcmFsT2ZmZXJSZXN1bHRTdG9yZS5nZXQoZmFjZXRzLnpvZVNlYXRBZG1pbikucHJvbWlzZTtcbiB9XG5cbmNvbnN0IGtpdD1tYWtlUHJvbWlzZUtpdCgpO1xuZXBoZW1lcmFsT2ZmZXJSZXN1bHRTdG9yZS5zZXQoZmFjZXRzLnpvZVNlYXRBZG1pbixraXQpO1xucmV0dXJuIGtpdC5wcm9taXNlO1xuIH0sXG4gICAgICBhc3luYyBoYXNFeGl0ZWQoKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcblxucmV0dXJuKFxuc3RhdGUuZXhpdGluZ3x8XG5zdGF0ZS5pbnN0YW5jZUFkbWluSGVscGVyLmhhc0V4aXRlZChmYWNldHMuem9lU2VhdEFkbWluKSk7XG5cbiB9LFxuICAgICAgYXN5bmMgbnVtV2FudHNTYXRpc2ZpZWQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIEUud2hlbihcbnN0YXRlLnN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKSxcbigpPT5zYXRpc2ZpZXNXYW50KHN0YXRlLnByb3Bvc2FsLHN0YXRlLmN1cnJlbnRBbGxvY2F0aW9uKSxcbigpPT5zYXRpc2ZpZXNXYW50KHN0YXRlLnByb3Bvc2FsLHN0YXRlLmN1cnJlbnRBbGxvY2F0aW9uKSk7XG5cbiB9LFxuZ2V0RXhpdFN1YnNjcmliZXIoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLnN1YnNjcmliZXI7XG4gfSxcbmdldEZpbmFsQWxsb2NhdGlvbigpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gRS53aGVuKFxuc3RhdGUuc3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcigpLFxuKCk9PnN0YXRlLmN1cnJlbnRBbGxvY2F0aW9uLFxuKCk9PnN0YXRlLmN1cnJlbnRBbGxvY2F0aW9uKTtcblxuIH0sXG5pbml0RXhpdE9iamVjdFNldHRlcihzZXR0ZXIpe1xudGhpcy5zdGF0ZS5leGl0T2JqZWN0U2V0dGVyPXNldHRlcjtcbiB9LFxuYXNzZXJ0SGFzTm90RXhpdGVkKG1zZyl7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG5jb25zdHtpbnN0YW5jZUFkbWluSGVscGVyfT1zdGF0ZTtcbmNvbnN0IGhhc0V4aXRlZDE9aW5zdGFuY2VBZG1pbkhlbHBlci5oYXNFeGl0ZWQoZmFjZXRzLnpvZVNlYXRBZG1pbik7XG5cbiFoYXNFeGl0ZWQxfHxhc3NlcnQoIWhhc0V4aXRlZDEsbXNnKTtcbiB9fSxcblxuem9lU2VhdEFkbWluOntcbnJlcGxhY2VBbGxvY2F0aW9uKHJlcGxhY2VtZW50QWxsb2NhdGlvbil7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG5mYWNldHMudXNlclNlYXRBY2Nlc3MuYXNzZXJ0SGFzTm90RXhpdGVkKFxuJ0Nhbm5vdCByZXBsYWNlIGFsbG9jYXRpb24uIFNlYXQgaGFzIGFscmVhZHkgZXhpdGVkJyk7XG5cbmhhcmRlbihyZXBsYWNlbWVudEFsbG9jYXRpb24pO1xuLy9cbi8vXG5cbnN0YXRlLmN1cnJlbnRBbGxvY2F0aW9uPXJlcGxhY2VtZW50QWxsb2NhdGlvbjtcbiB9LFxuZXhpdChjb21wbGV0aW9uKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcbi8vXG4vL1xuaWYoc3RhdGUuZXhpdGluZyl7XG5yZXR1cm47XG4gfVxuZmFjZXRzLnVzZXJTZWF0QWNjZXNzLmFzc2VydEhhc05vdEV4aXRlZChcbidDYW5ub3QgZXhpdCBzZWF0LiBTZWF0IGhhcyBhbHJlYWR5IGV4aXRlZCcpO1xuXG5cbnN0YXRlLmV4aXRpbmc9dHJ1ZTtcbnZvaWQgRS53aGVuKFxuZG9FeGl0KFxuZmFjZXRzLnpvZVNlYXRBZG1pbixcbnN0YXRlLmN1cnJlbnRBbGxvY2F0aW9uLFxuc3RhdGUud2l0aGRyYXdGYWNldCxcbnN0YXRlLmluc3RhbmNlQWRtaW5IZWxwZXIpLFxuXG4oKT0+e1xuaWYoc3RhdGUuZXhpdE9iamVjdFNldHRlcil7XG5zdGF0ZS5leGl0T2JqZWN0U2V0dGVyLnNldEV4aXRPYmplY3QodW5kZWZpbmVkKTtcbnN0YXRlLmV4aXRPYmplY3RTZXR0ZXI9dW5kZWZpbmVkO1xuIH1cbnJldHVybiBzdGF0ZS5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pO1xuIH0pO1xuXG4gfSxcbmZhaWwocmVhc29uKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcbi8vXG4vL1xuaWYoc3RhdGUuZXhpdGluZyl7XG5yZXR1cm47XG4gfVxuXG5mYWNldHMudXNlclNlYXRBY2Nlc3MuYXNzZXJ0SGFzTm90RXhpdGVkKFxuJ0Nhbm5vdCBmYWlsIHNlYXQuIFNlYXQgaGFzIGFscmVhZHkgZXhpdGVkJyk7XG5cblxuc3RhdGUuZXhpdGluZz10cnVlO1xudm9pZCBFLndoZW4oXG5kb0V4aXQoXG5mYWNldHMuem9lU2VhdEFkbWluLFxuc3RhdGUuY3VycmVudEFsbG9jYXRpb24sXG5zdGF0ZS53aXRoZHJhd0ZhY2V0LFxuc3RhdGUuaW5zdGFuY2VBZG1pbkhlbHBlciksXG5cbigpPT5zdGF0ZS5wdWJsaXNoZXIuZmFpbChyZWFzb24pLFxuKCk9PnN0YXRlLnB1Ymxpc2hlci5mYWlsKHJlYXNvbikpO1xuXG5cbmlmKHN0YXRlLmV4aXRPYmplY3RTZXR0ZXIpe1xuc3RhdGUuZXhpdE9iamVjdFNldHRlci5zZXRFeGl0T2JqZWN0KHVuZGVmaW5lZCk7XG5zdGF0ZS5leGl0T2JqZWN0U2V0dGVyPXVuZGVmaW5lZDtcbiB9XG4gfSxcbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZXNvbHZlRXhpdEFuZFJlc3VsdCh7b2ZmZXJSZXN1bHRQcm9taXNlLGV4aXRPYmp9KXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcblxuIXN0YXRlLm9mZmVyUmVzdWx0U3RvcmVkfHxcbkZhaWwgYG9mZmVyUmVzdWx0U3RvcmVkIGJlZm9yZSBvZmZlclJlc3VsdFByb21pc2VgO1xuXG5pZighZXBoZW1lcmFsT2ZmZXJSZXN1bHRTdG9yZS5oYXMoZmFjZXRzLnpvZVNlYXRBZG1pbikpe1xuLy9cbmNvbnN0IGtpdD1tYWtlUHJvbWlzZUtpdCgpO1xua2l0LnJlc29sdmUob2ZmZXJSZXN1bHRQcm9taXNlKTtcbmVwaGVtZXJhbE9mZmVyUmVzdWx0U3RvcmUuc2V0KGZhY2V0cy56b2VTZWF0QWRtaW4sa2l0KTtcbiB9XG5cbmNvbnN0IHBLaXQ9ZXBoZW1lcmFsT2ZmZXJSZXN1bHRTdG9yZS5nZXQoZmFjZXRzLnpvZVNlYXRBZG1pbik7XG52b2lkIEUud2hlbihcbm9mZmVyUmVzdWx0UHJvbWlzZSxcbihvZmZlclJlc3VsdCk9Pntcbi8vXG5wS2l0LnJlc29sdmUob2ZmZXJSZXN1bHQpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xudm9pZCBFLndoZW4oXG5kZWVwbHlGdWxmaWxsZWQob2ZmZXJSZXN1bHQpLFxuKGZ1bGZpbGxlZE9mZmVyUmVzdWx0KT0+e1xudHJ5e1xuLy9cbnN0YXRlLm9mZmVyUmVzdWx0PWZ1bGZpbGxlZE9mZmVyUmVzdWx0O1xuLy9cbi8vXG5zdGF0ZS5vZmZlclJlc3VsdFN0b3JlZD10cnVlO1xuZXBoZW1lcmFsT2ZmZXJSZXN1bHRTdG9yZS5kZWxldGUoZmFjZXRzLnpvZVNlYXRBZG1pbik7XG4gfWNhdGNoKGVycil7XG5jb25zb2xlLndhcm4oXG4nbm9uLWR1cmFibGUgb2ZmZXIgcmVzdWx0IHdpbGwgYmUgbG9zdCB1cG9uIHpvZSB2YXQgdGVybWluYXRpb246Jyxcbm9mZmVyUmVzdWx0KTtcblxuIH1cbiB9XG4vL1xuLy9cbik7XG4gfSxcbihlKT0+e1xucEtpdC5yZWplY3QoZSk7XG4vL1xuLy9cbiB9KTtcblxuXG4vL1xuc3RhdGUuZXhpdE9iamVjdFNldHRlci5zZXRFeGl0T2JqZWN0KGV4aXRPYmopO1xuIH0sXG5nZXRFeGl0U3Vic2NyaWJlcigpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuc3Vic2NyaWJlcjtcbiB9LFxuICAgICAgYXN5bmMgZmluYWxQYXlvdXRzKHBheW1lbnRzKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuXG5jb25zdCBzZXR0bGVkUGF5b3V0cz1hd2FpdCBkZWVwbHlGdWxmaWxsZWQocGF5bWVudHMpO1xuc3RhdGUucGF5b3V0cz1zZXR0bGVkUGF5b3V0cztcbiB9fX0pO1xuXG5cblxuXG5jb25zdCBtYWtlVXNlclNlYXQ9cHJlcGFyZUV4b0NsYXNzS2l0KFxuYmFnZ2FnZSxcbidab2VVc2VyU2VhdCcsXG5ab2VVc2VyU2VhdCxcbih1c2VyU2VhdEFjY2VzcyxleGl0T2JqKT0+e1xucmV0dXJue1xudXNlclNlYXRBY2Nlc3MsXG5leGl0T2JqfTtcblxuIH0sXG57XG51c2VyU2VhdDp7XG4gICAgICBhc3luYyBnZXRQcm9wb3NhbCgpe1xucmV0dXJuIHRoaXMuc3RhdGUudXNlclNlYXRBY2Nlc3MuZ2V0UHJvcG9zYWwoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0UGF5b3V0cygpe1xucmV0dXJuIHRoaXMuc3RhdGUudXNlclNlYXRBY2Nlc3MuZ2V0UGF5b3V0cygpO1xuIH0sXG4gICAgICBhc3luYyBnZXRQYXlvdXQoa2V5d29yZCl7XG5yZXR1cm4gdGhpcy5zdGF0ZS51c2VyU2VhdEFjY2Vzcy5nZXRQYXlvdXQoa2V5d29yZCk7XG4gfSxcblxuICAgICAgYXN5bmMgZ2V0T2ZmZXJSZXN1bHQoKXtcbnJldHVybiB0aGlzLnN0YXRlLnVzZXJTZWF0QWNjZXNzLmdldE9mZmVyUmVzdWx0KCk7XG4gfSxcbiAgICAgIGFzeW5jIGhhc0V4aXRlZCgpe1xucmV0dXJuIHRoaXMuc3RhdGUudXNlclNlYXRBY2Nlc3MuaGFzRXhpdGVkKCk7XG4gfSxcbiAgICAgIGFzeW5jIHRyeUV4aXQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuXG5zdGF0ZS51c2VyU2VhdEFjY2Vzcy5hc3NlcnRIYXNOb3RFeGl0ZWQoXG4nQ2Fubm90IGV4aXQ7IHNlYXQgaGFzIGFscmVhZHkgZXhpdGVkJyk7XG5cbmlmKCFzdGF0ZS5leGl0T2JqKVxudGhyb3cgRmFpbCBgZXhpdE9iaiBub3QgaW5pdGlhbGl6ZWQgb3IgYWxyZWFkeSBudWxsaWZpZWRgO1xuXG5jb25zdCBleGl0UmVzdWx0PUUoc3RhdGUuZXhpdE9iaikuZXhpdCgpO1xuXG4vL1xuc3RhdGUuZXhpdE9iaj11bmRlZmluZWQ7XG5cbnJldHVybiBleGl0UmVzdWx0O1xuIH0sXG4gICAgICBhc3luYyBudW1XYW50c1NhdGlzZmllZCgpe1xucmV0dXJuIHRoaXMuc3RhdGUudXNlclNlYXRBY2Nlc3MubnVtV2FudHNTYXRpc2ZpZWQoKTtcbiB9LFxuZ2V0RXhpdFN1YnNjcmliZXIoKXtcbnJldHVybiB0aGlzLnN0YXRlLnVzZXJTZWF0QWNjZXNzLmdldEV4aXRTdWJzY3JpYmVyKCk7XG4gfSxcbmdldEZpbmFsQWxsb2NhdGlvbigpe1xucmV0dXJuIHRoaXMuc3RhdGUudXNlclNlYXRBY2Nlc3MuZ2V0RmluYWxBbGxvY2F0aW9uKCk7XG4gfX0sXG5cbmV4aXRPYmpTZXR0ZXI6e1xuc2V0RXhpdE9iamVjdChleGl0T2JqZWN0KXtcbnRoaXMuc3RhdGUuZXhpdE9iaj1leGl0T2JqZWN0O1xuIH19fSk7XG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZVpvZVNlYXRBZG1pbktpdD0oXG5pbml0aWFsQWxsb2NhdGlvbixcbnByb3Bvc2FsLFxuaW5zdGFuY2VBZG1pbkhlbHBlcixcbndpdGhkcmF3RmFjZXQsXG5leGl0T2JqPXVuZGVmaW5lZCxcbm9mZmVyUmVzdWx0SXNVbmRlZmluZWQ9ZmFsc2UpPT5cbntcbmNvbnN0e3pvZVNlYXRBZG1pbix1c2VyU2VhdEFjY2Vzc309bWFrZVpvZVNlYXRBZG1pbihcbmluaXRpYWxBbGxvY2F0aW9uLFxucHJvcG9zYWwsXG5pbnN0YW5jZUFkbWluSGVscGVyLFxud2l0aGRyYXdGYWNldCxcbm9mZmVyUmVzdWx0SXNVbmRlZmluZWQpO1xuXG5jb25zdHt1c2VyU2VhdCxleGl0T2JqU2V0dGVyfT1tYWtlVXNlclNlYXQodXNlclNlYXRBY2Nlc3MsZXhpdE9iaik7XG51c2VyU2VhdEFjY2Vzcy5pbml0RXhpdE9iamVjdFNldHRlcihleGl0T2JqU2V0dGVyKTtcblxuLy9cbi8vXG5yZXR1cm57dXNlclNlYXQsem9lU2VhdEFkbWlufTtcbiB9O1xucmV0dXJuIG1ha2Vab2VTZWF0QWRtaW5LaXQ7XG4gfTskaM2PX29uY2UubWFrZVpvZVNlYXRBZG1pbkZhY3RvcnkobWFrZVpvZVNlYXRBZG1pbkZhY3RvcnkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVpvZVNlYXRBZG1pbkZhY3RvcnkiOlsibWFrZVpvZVNlYXRBZG1pbkZhY3RvcnkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKiXzpKUtAAClLQAANwAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3pvZVNlcnZpY2Uvem9lU3RvcmFnZU1hbmFnZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiQGFnb3JpYy9lcnRwIiwiQGFnb3JpYy92YXQtZGF0YSIsIi4uL2lzc3VlclN0b3JhZ2UuanMiLCIuLi9pbnN0YW5jZVJlY29yZFN0b3JhZ2UuanMiLCIuLi9pc3N1ZXJSZWNvcmQuanMiLCIuL2VzY3Jvd1N0b3JhZ2UuanMiLCIuL21ha2VJbnZpdGF0aW9uLmpzIiwiLi9pbnN0YW5jZUFkbWluU3RvcmFnZS5qcyIsIi4vaW5zdGFsbGF0aW9uU3RvcmFnZS5qcyIsIi4vaW50ZXJuYWwtdHlwZXMuanMiLCIuLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsibWFrZVpvZVN0b3JhZ2VNYW5hZ2VyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsQXNzZXRLaW5kLG1ha2VEdXJhYmxlSXNzdWVyS2l0LEFtb3VudE1hdGgsdXBncmFkZUlzc3VlcktpdCxtYWtlU2NhbGFyQmlnTWFwU3RvcmUscHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUscHJlcGFyZUV4b0NsYXNzS2l0LHByZXBhcmVFeG9DbGFzcyxwcm92aWRlRHVyYWJsZVNldFN0b3JlLHByb3ZpZGVJc3N1ZXJTdG9yYWdlLG1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2UsbWFrZUlzc3VlclJlY29yZCxwcm92aWRlRXNjcm93U3RvcmFnZSxwcmVwYXJlSW52aXRhdGlvbktpdCxtYWtlSW5zdGFuY2VBZG1pblN0b3JhZ2UsbWFrZUluc3RhbGxhdGlvblN0b3JhZ2UsSW5zdGFuY2VTdG9yYWdlTWFuYWdlcklLaXQsWm9lTWludEksWm9lU3RvcmFnZU1hbmFnZXJJS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFzc2V0S2luZFwiLCBbJGjNj19hID0+IChBc3NldEtpbmQgPSAkaM2PX2EpXV0sW1wibWFrZUR1cmFibGVJc3N1ZXJLaXRcIiwgWyRozY9fYSA9PiAobWFrZUR1cmFibGVJc3N1ZXJLaXQgPSAkaM2PX2EpXV0sW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dLFtcInVwZ3JhZGVJc3N1ZXJLaXRcIiwgWyRozY9fYSA9PiAodXBncmFkZUlzc3VlcktpdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVTZXRTdG9yZSA9ICRozY9fYSldXV1dLFtcIi4uL2lzc3VlclN0b3JhZ2UuanNcIiwgW1tcInByb3ZpZGVJc3N1ZXJTdG9yYWdlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVJc3N1ZXJTdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiLi4vaW5zdGFuY2VSZWNvcmRTdG9yYWdlLmpzXCIsIFtbXCJtYWtlSW5zdGFuY2VSZWNvcmRTdG9yYWdlXCIsIFskaM2PX2EgPT4gKG1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2UgPSAkaM2PX2EpXV1dXSxbXCIuLi9pc3N1ZXJSZWNvcmQuanNcIiwgW1tcIm1ha2VJc3N1ZXJSZWNvcmRcIiwgWyRozY9fYSA9PiAobWFrZUlzc3VlclJlY29yZCA9ICRozY9fYSldXV1dLFtcIi4vZXNjcm93U3RvcmFnZS5qc1wiLCBbW1wicHJvdmlkZUVzY3Jvd1N0b3JhZ2VcIiwgWyRozY9fYSA9PiAocHJvdmlkZUVzY3Jvd1N0b3JhZ2UgPSAkaM2PX2EpXV1dXSxbXCIuL21ha2VJbnZpdGF0aW9uLmpzXCIsIFtbXCJwcmVwYXJlSW52aXRhdGlvbktpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlSW52aXRhdGlvbktpdCA9ICRozY9fYSldXV1dLFtcIi4vaW5zdGFuY2VBZG1pblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VJbnN0YW5jZUFkbWluU3RvcmFnZVwiLCBbJGjNj19hID0+IChtYWtlSW5zdGFuY2VBZG1pblN0b3JhZ2UgPSAkaM2PX2EpXV1dXSxbXCIuL2luc3RhbGxhdGlvblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VJbnN0YWxsYXRpb25TdG9yYWdlXCIsIFskaM2PX2EgPT4gKG1ha2VJbnN0YWxsYXRpb25TdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiLi9pbnRlcm5hbC10eXBlcy5qc1wiLCBbXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiSW5zdGFuY2VTdG9yYWdlTWFuYWdlcklLaXRcIiwgWyRozY9fYSA9PiAoSW5zdGFuY2VTdG9yYWdlTWFuYWdlcklLaXQgPSAkaM2PX2EpXV0sW1wiWm9lTWludElcIiwgWyRozY9fYSA9PiAoWm9lTWludEkgPSAkaM2PX2EpXV0sW1wiWm9lU3RvcmFnZU1hbmFnZXJJS2l0XCIsIFskaM2PX2EgPT4gKFpvZVN0b3JhZ2VNYW5hZ2VySUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVpvZVN0b3JhZ2VNYW5hZ2VyPShcbmNyZWF0ZVpDRlZhdCxcbmdldEJ1bmRsZUNhcEZvcklELFxuc2h1dGRvd25ab2VWYXQsXG5mZWVNaW50LFxuem9lQmFnZ2FnZSk9Plxue1xuLy9cbi8vXG4vL1xuY29uc3QgaXNzdWVyU3RvcmFnZT1wcm92aWRlSXNzdWVyU3RvcmFnZSh6b2VCYWdnYWdlKTtcbmlzc3VlclN0b3JhZ2UuaW5zdGFudGlhdGUoKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgZXNjcm93U3RvcmFnZT1wcm92aWRlRXNjcm93U3RvcmFnZSh6b2VCYWdnYWdlKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5lc2Nyb3dTdG9yYWdlLnByb3ZpZGVMb2NhbFB1cnNlKFxuZmVlTWludC5nZXRGZWVJc3N1ZXIoKSxcbmZlZU1pbnQuZ2V0RmVlQnJhbmQoKSk7XG5cblxuY29uc3QgcHJvcG9zYWxTaGFwZXM9cHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoXG56b2VCYWdnYWdlLFxuJ3Byb3Bvc2FsIHNoYXBlcycpO1xuXG5cbi8vXG4vL1xuLy9cbmNvbnN0e2ludml0YXRpb25Jc3N1ZXIsaW52aXRhdGlvbktpdH09cHJlcGFyZUludml0YXRpb25LaXQoXG56b2VCYWdnYWdlLFxuc2h1dGRvd25ab2VWYXQpO1xuXG5cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBpbnN0YW5jZUFkbWluU3RvcmFnZT1tYWtlSW5zdGFuY2VBZG1pblN0b3JhZ2Uoem9lQmFnZ2FnZSk7XG5cbi8vXG4vL1xuY29uc3QgaW5zdGFsbGF0aW9uU3RvcmFnZT1tYWtlSW5zdGFsbGF0aW9uU3RvcmFnZShcbmdldEJ1bmRsZUNhcEZvcklELFxuem9lQmFnZ2FnZSk7XG5cblxuY29uc3QgZ2V0UHJvcG9zYWxTaGFwZUZvckludml0YXRpb249KGludml0YXRpb25IYW5kbGUpPT57XG5pZihwcm9wb3NhbFNoYXBlcy5oYXMoaW52aXRhdGlvbkhhbmRsZSkpe1xucmV0dXJuIHByb3Bvc2FsU2hhcGVzLmdldChpbnZpdGF0aW9uSGFuZGxlKTtcbiB9XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07XG5cbmNvbnN0IHpvZU1pbnRCYWdnYWdlU2V0PXByb3ZpZGVEdXJhYmxlU2V0U3RvcmUoXG56b2VCYWdnYWdlLFxuJ3pvZU1pbnRCYWdnYWdlU2V0Jyk7XG5cbmZvcihjb25zdCBpc3N1ZXJCYWdnYWdlIG9mIHpvZU1pbnRCYWdnYWdlU2V0LnZhbHVlcygpKXtcbnVwZ3JhZGVJc3N1ZXJLaXQoaXNzdWVyQmFnZ2FnZSk7XG4gfVxuXG5jb25zdCBtYWtlWm9lTWludD1wcmVwYXJlRXhvQ2xhc3MoXG56b2VCYWdnYWdlLFxuJ1pvZU1pbnQnLFxuWm9lTWludEksXG4obG9jYWxNaW50LGxvY2FsUG9vbGVkUHVyc2UsYWRtaW5Ob2RlLGxvY2FsSXNzdWVyUmVjb3JkKT0+KHtcbmxvY2FsTWludCxcbmxvY2FsUG9vbGVkUHVyc2UsXG5hZG1pbk5vZGUsXG5sb2NhbElzc3VlclJlY29yZH0pLFxuXG57XG5nZXRJc3N1ZXJSZWNvcmQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLmxvY2FsSXNzdWVyUmVjb3JkO1xuIH0sXG5taW50QW5kRXNjcm93KHRvdGFsVG9NaW50KXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3QgcGF5bWVudD1zdGF0ZS5sb2NhbE1pbnQubWludFBheW1lbnQodG90YWxUb01pbnQpO1xuLy9cbnN0YXRlLmxvY2FsUG9vbGVkUHVyc2UuZGVwb3NpdChwYXltZW50LHRvdGFsVG9NaW50KTtcbiB9LFxud2l0aGRyYXdBbmRCdXJuKHRvdGFsVG9CdXJuKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xudHJ5e1xuLy9cbmNvbnN0IHBheW1lbnQ9c3RhdGUubG9jYWxQb29sZWRQdXJzZS53aXRoZHJhdyh0b3RhbFRvQnVybik7XG4vL1xuc3RhdGUubG9jYWxJc3N1ZXJSZWNvcmQuaXNzdWVyLmJ1cm4ocGF5bWVudCx0b3RhbFRvQnVybik7XG4gfWNhdGNoKGVycil7XG4vL1xudm9pZCBFKHN0YXRlLmFkbWluTm9kZSkudGVybWluYXRlV2l0aEZhaWx1cmUoZXJyKTtcbnRocm93IGVycjtcbiB9XG4gfX0pO1xuXG5cblxuY29uc3QgbWFrZUluc3RhbmNlU3RvcmFnZU1hbmFnZXI9cHJlcGFyZUV4b0NsYXNzS2l0KFxuem9lQmFnZ2FnZSxcbidJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyJyxcbkluc3RhbmNlU3RvcmFnZU1hbmFnZXJJS2l0LFxuKGluc3RhbmNlUmVjb3JkLGFkbWluTm9kZSxyb290LGZ1bmN0aW9ucyk9PlxuaGFyZGVuKHtcbmluc3RhbmNlU3RhdGU6aW5zdGFuY2VSZWNvcmQsXG5hZG1pbk5vZGUsXG5yb290LFxuZnVuY3Rpb25zfSksXG5cbntcbmluc3RhbmNlU3RvcmFnZU1hbmFnZXI6e1xuZ2V0VGVybXMoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLmluc3RhbmNlU3RhdGUuZ2V0VGVybXMoKTtcbiB9LFxuZ2V0SXNzdWVycygpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VTdGF0ZS5nZXRJc3N1ZXJzKCk7XG4gfSxcbmdldEJyYW5kcygpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VTdGF0ZS5nZXRCcmFuZHMoKTtcbiB9LFxuZ2V0SW5zdGFsbGF0aW9uKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVN0YXRlLmdldEluc3RhbGxhdGlvbigpO1xuIH0sXG4gICAgICBhc3luYyBzYXZlSXNzdWVyKGlzc3VlclAsa2V5d29yZCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0IGlzc3VlclJlY29yZD1hd2FpdCBpc3N1ZXJTdG9yYWdlLnN0b3JlSXNzdWVyKGlzc3VlclApO1xuYXdhaXQgZXNjcm93U3RvcmFnZS5jcmVhdGVQdXJzZShcbmlzc3VlclJlY29yZC5pc3N1ZXIsXG5pc3N1ZXJSZWNvcmQuYnJhbmQpO1xuXG5zdGF0ZS5pbnN0YW5jZVN0YXRlLmFkZElzc3VlcihrZXl3b3JkLGlzc3VlclJlY29yZCk7XG5yZXR1cm4gaXNzdWVyUmVjb3JkO1xuIH0sXG5tYWtlWm9lTWludChcbmtleXdvcmQsXG5hc3NldEtpbmQ9QXNzZXRLaW5kLk5BVCxcbmRpc3BsYXlJbmZvLFxue2VsZW1lbnRTaGFwZT11bmRlZmluZWR9PXt9KVxue1xuY29uc3R7c3RhdGUsZmFjZXRzfT10aGlzO1xuLy9cbi8vXG5jb25zdCBpc3N1ZXJCYWdnYWdlPW1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnSXNzdWVyQmFnZ2FnZScse1xuZHVyYWJsZTp0cnVlfSk7XG5cbmNvbnN0IGxvY2FsSXNzdWVyS2l0PW1ha2VEdXJhYmxlSXNzdWVyS2l0KFxuaXNzdWVyQmFnZ2FnZSxcbmtleXdvcmQsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbihyZWFzb24pPT5FKHN0YXRlLmFkbWluTm9kZSkudGVybWluYXRlV2l0aEZhaWx1cmUocmVhc29uKSxcbntlbGVtZW50U2hhcGV9KTtcblxuem9lTWludEJhZ2dhZ2VTZXQuYWRkKGlzc3VlckJhZ2dhZ2UpO1xucmV0dXJuIGZhY2V0cy5oZWxwZXJzLndyYXBJc3N1ZXJLaXRXaXRoWm9lTWludChcbmtleXdvcmQsXG5sb2NhbElzc3VlcktpdCxcbnN0YXRlLmFkbWluTm9kZSk7XG5cbiB9LFxucmVnaXN0ZXJGZWVNaW50KGtleXdvcmQsYWxsZWdlZEZlZU1pbnRBY2Nlc3Mpe1xuY29uc3R7c3RhdGUsZmFjZXRzfT10aGlzO1xuY29uc3QgZmVlSXNzdWVyS2l0PWZlZU1pbnQuZ2V0RmVlSXNzdWVyS2l0KGFsbGVnZWRGZWVNaW50QWNjZXNzKTtcbnJldHVybiBmYWNldHMuaGVscGVycy53cmFwSXNzdWVyS2l0V2l0aFpvZU1pbnQoXG5rZXl3b3JkLFxuZmVlSXNzdWVyS2l0LFxuc3RhdGUuYWRtaW5Ob2RlKTtcblxuIH0sXG5nZXRJbnN0YW5jZVJlY29yZCgpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VTdGF0ZS5nZXRJbnN0YW5jZVJlY29yZCgpO1xuIH0sXG5nZXRJc3N1ZXJSZWNvcmRzKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBpc3N1ZXJTdG9yYWdlLmdldElzc3VlclJlY29yZHMoXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LnZhbHVlcyhcbnN0YXRlLmluc3RhbmNlU3RhdGUuZ2V0SW5zdGFuY2VSZWNvcmQoKS50ZXJtcy5pc3N1ZXJzKSk7XG5cblxuIH0sXG5pbml0SW5zdGFuY2VBZG1pbihpbnN0YW5jZUhhbmRsZSxpbnN0YW5jZUFkbWluKXtcbnJldHVybiBpbnN0YW5jZUFkbWluU3RvcmFnZS51cGRhdGVyLmluaXRJbnN0YW5jZUFkbWluKFxuaW5zdGFuY2VIYW5kbGUsXG5pbnN0YW5jZUFkbWluKTtcblxuIH0sXG5kZWxldGVJbnN0YW5jZUFkbWluKGkpe1xuaW5zdGFuY2VBZG1pblN0b3JhZ2UudXBkYXRlci5kZWxldGVJbnN0YW5jZUFkbWluKGkpO1xuIH0sXG5tYWtlSW52aXRhdGlvbihcbmhhbmRsZSxcbmRlc2MsXG5jdXN0b21EZXRhaWxzPXVuZGVmaW5lZCxcbnByb3Bvc2FsU2hhcGU9dW5kZWZpbmVkKVxue1xuY29uc3R7c3RhdGV9PXRoaXM7XG5cbmNvbnN0IGV4dHJhUHJvcGVydGllcz1cbnR5cGVvZiBjdXN0b21EZXRhaWxzPT09J29iamVjdCcmJlxub3duS2V5cyhjdXN0b21EZXRhaWxzKS5sZW5ndGg+PTE/XG5oYXJkZW4oe2N1c3RvbURldGFpbHN9KTpcbmhhcmRlbih7fSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnZpdGF0aW9uQW1vdW50PUFtb3VudE1hdGgubWFrZShcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL2ludml0YXRpb25LaXQuYnJhbmQsXG5oYXJkZW4oW1xue1xuLi4uZXh0cmFQcm9wZXJ0aWVzLFxuZGVzY3JpcHRpb246ZGVzYyxcbmhhbmRsZSxcbmluc3RhbmNlOnN0YXRlLmluc3RhbmNlU3RhdGUuZ2V0SW5zdGFuY2VSZWNvcmQoKS5pbnN0YW5jZSxcbmluc3RhbGxhdGlvbjpcbnN0YXRlLmluc3RhbmNlU3RhdGUuZ2V0SW5zdGFuY2VSZWNvcmQoKS5pbnN0YWxsYXRpb259XSkpO1xuXG5cblxuaWYocHJvcG9zYWxTaGFwZSE9PXVuZGVmaW5lZCl7XG5wcm9wb3NhbFNoYXBlcy5pbml0KGhhbmRsZSxwcm9wb3NhbFNoYXBlKTtcbiB9XG5yZXR1cm4gaW52aXRhdGlvbktpdC5taW50Lm1pbnRQYXltZW50KGludml0YXRpb25BbW91bnQpO1xuIH0sXG5nZXRJbnZpdGF0aW9uSXNzdWVyKCl7XG5yZXR1cm4gaW52aXRhdGlvbklzc3VlcjtcbiB9LFxuZ2V0Um9vdCgpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUucm9vdDtcbiB9LFxuZ2V0V2l0aGRyYXdGYWNldCgpe1xuY29uc3R7ZmFjZXRzfT10aGlzO1xucmV0dXJuIGZhY2V0cy53aXRoZHJhd0ZhY2V0O1xuIH0sXG5nZXRBZG1pbk5vZGUoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLmFkbWluTm9kZTtcbiB9fSxcblxuLy9cbndpdGhkcmF3RmFjZXQ6e1xud2l0aGRyYXdQYXltZW50cyhhbW91bnRzKXtcbnJldHVybiBlc2Nyb3dTdG9yYWdlLndpdGhkcmF3UGF5bWVudHMoYW1vdW50cyk7XG4gfX0sXG5cbmhlbHBlcnM6e1xud3JhcElzc3VlcktpdFdpdGhab2VNaW50KGtleXdvcmQsbG9jYWxJc3N1ZXJLaXQsYWRtaW5Ob2RlKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3R7XG5taW50OmxvY2FsTWludCxcbmlzc3Vlcjpsb2NhbElzc3VlcixcbmJyYW5kOmxvY2FsQnJhbmQsXG5kaXNwbGF5SW5mbzpsb2NhbERpc3BsYXlJbmZvfT1cbmxvY2FsSXNzdWVyS2l0O1xuXG5jb25zdCBsb2NhbElzc3VlclJlY29yZD1tYWtlSXNzdWVyUmVjb3JkKFxubG9jYWxCcmFuZCxcbmxvY2FsSXNzdWVyLFxubG9jYWxEaXNwbGF5SW5mbyk7XG5cbmlzc3VlclN0b3JhZ2Uuc3RvcmVJc3N1ZXJSZWNvcmQobG9jYWxJc3N1ZXJSZWNvcmQpO1xuY29uc3QgbG9jYWxQb29sZWRQdXJzZT1lc2Nyb3dTdG9yYWdlLnByb3ZpZGVMb2NhbFB1cnNlKFxubG9jYWxJc3N1ZXJSZWNvcmQuaXNzdWVyLFxubG9jYWxJc3N1ZXJSZWNvcmQuYnJhbmQpO1xuXG5zdGF0ZS5pbnN0YW5jZVN0YXRlLmFkZElzc3VlcihrZXl3b3JkLGxvY2FsSXNzdWVyUmVjb3JkKTtcbi8qICAgICAgICAgICAgICAgICAgKi9cbnJldHVybiBtYWtlWm9lTWludChcbmxvY2FsTWludCxcbmxvY2FsUG9vbGVkUHVyc2UsXG5hZG1pbk5vZGUsXG5sb2NhbElzc3VlclJlY29yZCk7XG5cbiB9fX0pO1xuXG5cblxuY29uc3QgbWFrZUluc3RhbmNlUmVjb3JkPW1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2Uoem9lQmFnZ2FnZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYWtlWm9lSW5zdGFuY2VTdG9yYWdlTWFuYWdlcj1hc3luYyhcbmluc3RhbGxhdGlvbixcbmN1c3RvbVRlcm1zLFxudW5jbGVhbklzc3VlcktleXdvcmRSZWNvcmQsXG5pbnN0YW5jZSxcbmNvbnRyYWN0QnVuZGxlQ2FwLFxuaW5zdGFuY2VMYWJlbCk9Plxue1xuLy9cbi8vXG4vL1xuY29uc3R7aXNzdWVycyxicmFuZHN9PWF3YWl0IGlzc3VlclN0b3JhZ2Uuc3RvcmVJc3N1ZXJLZXl3b3JkUmVjb3JkKFxudW5jbGVhbklzc3VlcktleXdvcmRSZWNvcmQpO1xuXG5cbi8vXG5hd2FpdCBQcm9taXNlLmFsbChcbk9iamVjdC5lbnRyaWVzKGlzc3VlcnMpLm1hcCgoW2tleXdvcmQsaXNzdWVyXSk9PlxuZXNjcm93U3RvcmFnZS5jcmVhdGVQdXJzZShpc3N1ZXIsYnJhbmRzW2tleXdvcmRdKSkpO1xuXG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBpbnN0YW5jZVJlY29yZD1tYWtlSW5zdGFuY2VSZWNvcmQoXG5oYXJkZW4oe1xuaW5zdGFsbGF0aW9uLFxuaW5zdGFuY2UsXG50ZXJtczp7XG4uLi5jdXN0b21UZXJtcyxcbmlzc3VlcnMsXG5icmFuZHN9fSkpO1xuXG5cblxuXG5jb25zdCBidW5kbGVMYWJlbD1pbnN0YWxsYXRpb24uZ2V0QnVuZGxlTGFiZWwoKTtcbmNvbnN0IGNvbnRyYWN0TGFiZWw9aW5zdGFuY2VMYWJlbD9cbiBgJHtidW5kbGVMYWJlbH0tJHtpbnN0YW5jZUxhYmVsfWA6XG5idW5kbGVMYWJlbDtcblxuY29uc3R7cm9vdCxhZG1pbk5vZGV9PWF3YWl0IGNyZWF0ZVpDRlZhdChcbmNvbnRyYWN0QnVuZGxlQ2FwLFxuY29udHJhY3RMYWJlbCk7XG5cbi8vXG5yZXR1cm4gbWFrZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIoaW5zdGFuY2VSZWNvcmQsYWRtaW5Ob2RlLHJvb3QpLlxuaW5zdGFuY2VTdG9yYWdlTWFuYWdlcjtcbiB9O1xuXG5jb25zdCBnZXRJbnZpdGF0aW9uSXNzdWVyPSgpPT5pbnZpdGF0aW9uSXNzdWVyO1xuXG5jb25zdCBtYWtlU3RvcmFnZU1hbmFnZXI9cHJlcGFyZUV4b0NsYXNzS2l0KFxuem9lQmFnZ2FnZSxcbidab2VTdG9yYWdlTWFuYWdlcicsXG5ab2VTdG9yYWdlTWFuYWdlcklLaXQsXG4oaW5zdGFuY2VBZG1pbnMpPT4oe2luc3RhbmNlQWRtaW5zfSksXG57XG56b2VTZXJ2aWNlRGF0YUFjY2Vzczp7XG5nZXRJbnZpdGF0aW9uSXNzdWVyLFxuZ2V0QnVuZGxlSURGcm9tSW5zdGFsbGF0aW9uKGFsbGVnZWRJbnN0YWxsYXRpb24pe1xucmV0dXJuIGluc3RhbGxhdGlvblN0b3JhZ2UuZ2V0QnVuZGxlSURGcm9tSW5zdGFsbGF0aW9uKFxuYWxsZWdlZEluc3RhbGxhdGlvbik7XG5cbiB9LFxuZ2V0UHVibGljRmFjZXQoaW5zdGFuY2Upe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VBZG1pbnMuZ2V0UHVibGljRmFjZXQoaW5zdGFuY2UpO1xuIH0sXG5nZXRCcmFuZHMoaW5zdGFuY2Upe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VBZG1pbnMuZ2V0QnJhbmRzKGluc3RhbmNlKTtcbiB9LFxuZ2V0SXNzdWVycyhpbnN0YW5jZSl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZUFkbWlucy5nZXRJc3N1ZXJzKGluc3RhbmNlKTtcbiB9LFxuZ2V0T2ZmZXJGaWx0ZXIoaW5zdGFuY2Upe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VBZG1pbnMuZ2V0T2ZmZXJGaWx0ZXIoaW5zdGFuY2UpO1xuIH0sXG5nZXRUZXJtcyhpbnN0YW5jZSl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZUFkbWlucy5nZXRUZXJtcyhpbnN0YW5jZSk7XG4gfSxcbmdldEluc3RhbGxhdGlvbihpbnN0YW5jZSl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZUFkbWlucy5nZXRJbnN0YWxsYXRpb24oaW5zdGFuY2UpO1xuIH0sXG5nZXRQcm9wb3NhbFNoYXBlRm9ySW52aXRhdGlvbixcbmluc3RhbGxCdW5kbGU6KGFsbGVnZWRCdW5kbGUsYnVuZGxlTGFiZWwpPT57XG5yZXR1cm4gaW5zdGFsbGF0aW9uU3RvcmFnZS5pbnN0YWxsQnVuZGxlKGFsbGVnZWRCdW5kbGUsYnVuZGxlTGFiZWwpO1xuIH0sXG5pbnN0YWxsQnVuZGxlSUQoYnVuZGxlSUQsYnVuZGxlTGFiZWwpe1xucmV0dXJuIGluc3RhbGxhdGlvblN0b3JhZ2UuaW5zdGFsbEJ1bmRsZUlEKGJ1bmRsZUlELGJ1bmRsZUxhYmVsKTtcbiB9fSxcblxubWFrZU9mZmVyQWNjZXNzOntcbmdldEFzc2V0S2luZEJ5QnJhbmQ6aXNzdWVyU3RvcmFnZS5nZXRBc3NldEtpbmRCeUJyYW5kLFxuZ2V0SW5zdGFuY2VBZG1pbihpbnN0YW5jZSl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS5pbnN0YW5jZUFkbWlucy5nZXRJbnN0YW5jZUFkbWluKGluc3RhbmNlKTtcbiB9LFxuZ2V0UHJvcG9zYWxTaGFwZUZvckludml0YXRpb24sXG5nZXRJbnZpdGF0aW9uSXNzdWVyLFxuZGVwb3NpdFBheW1lbnRzKHByb3Bvc2FsLHBheW1lbnRzKXtcbnJldHVybiBlc2Nyb3dTdG9yYWdlLmRlcG9zaXRQYXltZW50cyhwcm9wb3NhbCxwYXltZW50cyk7XG4gfX0sXG5cbnN0YXJ0SW5zdGFuY2VBY2Nlc3M6e1xubWFrZVpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVud3JhcEluc3RhbGxhdGlvbihpbnN0YWxsYXRpb24pe1xucmV0dXJuIGluc3RhbGxhdGlvblN0b3JhZ2UudW53cmFwSW5zdGFsbGF0aW9uKGluc3RhbGxhdGlvbik7XG4gfX0sXG5cbmludml0YXRpb25Jc3N1ZXJBY2Nlc3M6e1xuZ2V0SW52aXRhdGlvbklzc3Vlcn19KTtcblxuXG5cblxucmV0dXJuIG1ha2VTdG9yYWdlTWFuYWdlcihpbnN0YW5jZUFkbWluU3RvcmFnZS5hY2Nlc3Nvcik7XG4gfTskaM2PX29uY2UubWFrZVpvZVN0b3JhZ2VNYW5hZ2VyKG1ha2Vab2VTdG9yYWdlTWFuYWdlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlWm9lU3RvcmFnZU1hbmFnZXIiOlsibWFrZVpvZVN0b3JhZ2VNYW5hZ2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANt1Ov+IAQAAiAEAAB4AAABAYWdvcmljL3pvbmUtdjAuMi4yL2R1cmFibGUuanN7ImltcG9ydHMiOlsiLi9zcmMvZHVyYWJsZS5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL2R1cmFibGUuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2R1cmFibGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAceWNIg4RAAAOEQAAIgAAAEBhZ29yaWMvem9uZS12MC4yLjIvc3JjL2R1cmFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2Jhc2Utem9uZSJdLCJleHBvcnRzIjpbIm1ha2VEdXJhYmxlWm9uZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixpc1Bhc3NhYmxlLGNhbkJlRHVyYWJsZSxtYWtlU2NhbGFyTWFwU3RvcmUscHJlcGFyZUV4byxwcmVwYXJlRXhvQ2xhc3MscHJlcGFyZUV4b0NsYXNzS2l0LHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUscHJvdmlkZUR1cmFibGVTZXRTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSx3YXRjaFByb21pc2Usa2V5cyxtYWtlT25jZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJpc1Bhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGlzUGFzc2FibGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJjYW5CZUR1cmFibGVcIiwgWyRozY9fYSA9PiAoY2FuQmVEdXJhYmxlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3MgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVTZXRTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZVNldFN0b3JlID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlID0gJGjNj19hKV1dLFtcIndhdGNoUHJvbWlzZVwiLCBbJGjNj19hID0+ICh3YXRjaFByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2Jhc2Utem9uZVwiLCBbW1wiYWdvcmljVmF0RGF0YUtleXNcIiwgWyRozY9fYSA9PiAoa2V5cyA9ICRozY9fYSldXSxbXCJtYWtlT25jZUtpdFwiLCBbJGjNj19hID0+IChtYWtlT25jZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc1N0b3JhYmxlPShzcGVjaW1lbik9PmlzUGFzc2FibGUoc3BlY2ltZW4pJiZjYW5CZUR1cmFibGUoc3BlY2ltZW4pO1xuaGFyZGVuKGlzU3RvcmFibGUpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IGF0dGFjaER1cmFibGVTdG9yZXM9KGdldEJhZ2dhZ2UpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXBTdG9yZT0obGFiZWwsb3B0aW9ucyk9PntcbmNvbnN0IGJhZ2dhZ2U9Z2V0QmFnZ2FnZSgpO1xuY29uc3QgcmV0PXByb3ZpZGVEdXJhYmxlTWFwU3RvcmUoYmFnZ2FnZSxsYWJlbCxvcHRpb25zKTtcbnJldHVybiByZXQ7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNldFN0b3JlPShsYWJlbCxvcHRpb25zKT0+XG5wcm92aWRlRHVyYWJsZVNldFN0b3JlKGdldEJhZ2dhZ2UoKSxsYWJlbCxvcHRpb25zKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3ZWFrU2V0U3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlKGdldEJhZ2dhZ2UoKSxsYWJlbCxvcHRpb25zKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3ZWFrTWFwU3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKGdldEJhZ2dhZ2UoKSxsYWJlbCxvcHRpb25zKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZXR1cm4gRmFyKCdkdXJhYmxlU3RvcmVzJyx7XG4vL1xuZGV0YWNoZWQ6KCk9PmRldGFjaGVkRHVyYWJsZVN0b3JlcyxcbmlzU3RvcmFibGUsXG5tYXBTdG9yZSxcbnNldFN0b3JlLFxud2Vha01hcFN0b3JlLFxud2Vha1NldFN0b3JlfSk7XG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRldGFjaGVkRHVyYWJsZVN0b3Jlcz1hdHRhY2hEdXJhYmxlU3RvcmVzKCgpPT5cbm1ha2VTY2FsYXJNYXBTdG9yZSgnZGV0YWNoZWQnKSk7XG5cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRHVyYWJsZVpvbmU9KGJhZ2dhZ2UsYmFzZUxhYmVsPSdkdXJhYmxlWm9uZScpPT57XG5iYWdnYWdlfHxGYWlsIGBiYWdnYWdlIHJlcXVpcmVkYDtcblxuY29uc3QgYXR0YWNoZWRTdG9yZXM9YXR0YWNoRHVyYWJsZVN0b3JlcygoKT0+YmFnZ2FnZSk7XG5cbmNvbnN0e21ha2VPbmNlLHdyYXBQcm92aWRlcn09bWFrZU9uY2VLaXQoXG5iYXNlTGFiZWwsXG5hdHRhY2hlZFN0b3JlcyxcbmJhZ2dhZ2UpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGV4b0NsYXNzPSguLi5hcmdzKT0+cHJlcGFyZUV4b0NsYXNzKGJhZ2dhZ2UsLi4uYXJncyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbmNvbnN0IGV4b0NsYXNzS2l0PSguLi5hcmdzKT0+cHJlcGFyZUV4b0NsYXNzS2l0KGJhZ2dhZ2UsLi4uYXJncyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZXhvPSguLi5hcmdzKT0+cHJlcGFyZUV4byhiYWdnYWdlLC4uLmFyZ3MpO1xuXG5jb25zdCBzdWJab25lU3RvcmU9d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLm1hcFN0b3JlLGtleXMuem9uZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3ViWm9uZT0obGFiZWwsb3B0aW9ucz17fSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdWJCYWdnYWdlPXN1YlpvbmVTdG9yZShsYWJlbCxvcHRpb25zKTtcbnJldHVybiBtYWtlRHVyYWJsZVpvbmUoc3ViQmFnZ2FnZSwgYCR7YmFzZUxhYmVsfS4ke2xhYmVsfWApO1xuIH07XG5cbnJldHVybiBGYXIoJ2R1cmFibGVab25lJyx7XG5leG86d3JhcFByb3ZpZGVyKGV4byxrZXlzLmV4byksXG5leG9DbGFzczp3cmFwUHJvdmlkZXIoZXhvQ2xhc3Msa2V5cy5leG9DbGFzcyksXG5leG9DbGFzc0tpdDp3cmFwUHJvdmlkZXIoZXhvQ2xhc3NLaXQsa2V5cy5leG9DbGFzc0tpdCksXG5zdWJab25lLFxuXG5tYWtlT25jZSxcbndhdGNoUHJvbWlzZSxcbmRldGFjaGVkOmF0dGFjaGVkU3RvcmVzLmRldGFjaGVkLFxuaXNTdG9yYWJsZTphdHRhY2hlZFN0b3Jlcy5pc1N0b3JhYmxlLFxuXG5tYXBTdG9yZTp3cmFwUHJvdmlkZXIoYXR0YWNoZWRTdG9yZXMubWFwU3RvcmUsa2V5cy5zdG9yZSksXG5zZXRTdG9yZTp3cmFwUHJvdmlkZXIoYXR0YWNoZWRTdG9yZXMuc2V0U3RvcmUsa2V5cy5zdG9yZSksXG53ZWFrTWFwU3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLndlYWtNYXBTdG9yZSxrZXlzLnN0b3JlKSxcbndlYWtTZXRTdG9yZTp3cmFwUHJvdmlkZXIoYXR0YWNoZWRTdG9yZXMud2Vha1NldFN0b3JlLGtleXMuc3RvcmUpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRHVyYWJsZVpvbmUobWFrZUR1cmFibGVab25lKTtcbmhhcmRlbihtYWtlRHVyYWJsZVpvbmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUR1cmFibGVab25lIjpbIm1ha2VEdXJhYmxlWm9uZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABU4lu4xwQAAMcEAAArAAAAQGVuZG8vY29tbW9uLXYxLjIuNy9hcHBseS1sYWJlbGluZy1lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Rocm93LWxhYmVsZWQuanMiXSwiZXhwb3J0cyI6WyJhcHBseUxhYmVsaW5nRXJyb3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxpc1Byb21pc2UsdGhyb3dMYWJlbGVkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3Rocm93LWxhYmVsZWQuanNcIiwgW1tcInRocm93TGFiZWxlZFwiLCBbJGjNj19hID0+ICh0aHJvd0xhYmVsZWQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXBwbHlMYWJlbGluZ0Vycm9yPShmdW5jLGFyZ3MsbGFiZWw9dW5kZWZpbmVkKT0+e1xuaWYobGFiZWw9PT11bmRlZmluZWQpe1xucmV0dXJuIGZ1bmMoLi4uYXJncyk7XG4gfVxubGV0IHJlc3VsdDtcbnRyeXtcbnJlc3VsdD1mdW5jKC4uLmFyZ3MpO1xuIH1jYXRjaChlcnIpe1xudGhyb3dMYWJlbGVkKGVycixsYWJlbCk7XG4gfVxuaWYoaXNQcm9taXNlKHJlc3VsdCkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIEUud2hlbihyZXN1bHQsdW5kZWZpbmVkLChyZWFzb24pPT50aHJvd0xhYmVsZWQocmVhc29uLGxhYmVsKSk7XG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9OyRozY9fb25jZS5hcHBseUxhYmVsaW5nRXJyb3IoYXBwbHlMYWJlbGluZ0Vycm9yKTtcbmhhcmRlbihhcHBseUxhYmVsaW5nRXJyb3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXBwbHlMYWJlbGluZ0Vycm9yIjpbImFwcGx5TGFiZWxpbmdFcnJvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACQBleGXAQAAFwEAAAqAAAAQGVuZG8vY29tbW9uLXYxLjIuNy9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImZyb21VbmlxdWVFbnRyaWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmcm9tVW5pcXVlRW50cmllcz0oYWxsRW50cmllcyk9PntcbmNvbnN0IGVudHJpZXNBcnJheT1bLi4uYWxsRW50cmllc107XG5jb25zdCByZXN1bHQ9aGFyZGVuKGZyb21FbnRyaWVzKGVudHJpZXNBcnJheSkpO1xuaWYob3duS2V5cyhyZXN1bHQpLmxlbmd0aD09PWVudHJpZXNBcnJheS5sZW5ndGgpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7XG5mb3IoY29uc3RbbmFtZSxfXW9mIGVudHJpZXNBcnJheSl7XG5pZihuYW1lcy5oYXMobmFtZSkpe1xuRmFpbCBgY29sbGlzaW9uIG9uIHByb3BlcnR5IG5hbWUgJHtxKG5hbWUpfTogJHtlbnRyaWVzQXJyYXl9YDtcbiB9XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IGZhaWxlZCB0byBjcmVhdGUgb2JqZWN0IGZyb20gdW5pcXVlIGVudHJpZXNgO1xuIH07JGjNj19vbmNlLmZyb21VbmlxdWVFbnRyaWVzKGZyb21VbmlxdWVFbnRyaWVzKTtcbmhhcmRlbihmcm9tVW5pcXVlRW50cmllcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJmcm9tVW5pcXVlRW50cmllcyI6WyJmcm9tVW5pcXVlRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABRcw2kNwIAADcCAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuNy9pZGVudC1jaGVja2VyLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpZGVudENoZWNrZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpZGVudENoZWNrZXI9KGNvbmQsX2RldGFpbHMpPT5jb25kOyRozY9fb25jZS5pZGVudENoZWNrZXIoaWRlbnRDaGVja2VyKTtcbmhhcmRlbihpZGVudENoZWNrZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWRlbnRDaGVja2VyIjpbImlkZW50Q2hlY2tlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABhWP6GeAIAAHgCAAAmAAAAQGVuZG8vY29tbW9uLXYxLjIuNy9saXN0LWRpZmZlcmVuY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImxpc3REaWZmZXJlbmNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbGlzdERpZmZlcmVuY2U9KGxlZnRMaXN0LHJpZ2h0TGlzdCk9PntcbmNvbnN0IHJpZ2h0U2V0PW5ldyBTZXQocmlnaHRMaXN0KTtcbnJldHVybiBsZWZ0TGlzdC5maWx0ZXIoKGVsZW1lbnQpPT4hcmlnaHRTZXQuaGFzKGVsZW1lbnQpKTtcbiB9OyRozY9fb25jZS5saXN0RGlmZmVyZW5jZShsaXN0RGlmZmVyZW5jZSk7XG5oYXJkZW4obGlzdERpZmZlcmVuY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibGlzdERpZmZlcmVuY2UiOlsibGlzdERpZmZlcmVuY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAD5vAqF0DAABdAwAAKgAAAEBlbmRvL2NvbW1vbi12MS4yLjcvbWFrZS1hcnJheS1pdGVyYXRvci5qc3siaW1wb3J0cyI6WyIuL21ha2UtaXRlcmF0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlQXJyYXlJdGVyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlSXRlcmF0b3I7JGjNj19pbXBvcnRzKFtbXCIuL21ha2UtaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VJdGVyYXRvclwiLCBbJGjNj19hID0+IChtYWtlSXRlcmF0b3IgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBcnJheUl0ZXJhdG9yPShhcnIpPT57XG5jb25zdHtsZW5ndGh9PWFycjtcbmxldCBpPTA7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG4vKiAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZihpPGxlbmd0aCl7XG52YWx1ZT1hcnJbaV07XG5pKz0xO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbi8vXG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWV9KTtcbiB9KTtcbiB9OyRozY9fb25jZS5tYWtlQXJyYXlJdGVyYXRvcihtYWtlQXJyYXlJdGVyYXRvcik7XG5oYXJkZW4obWFrZUFycmF5SXRlcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFycmF5SXRlcmF0b3IiOlsibWFrZUFycmF5SXRlcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVosJ4zkCAAA5AgAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjcvbWFrZS1pdGVyYXRvci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZUl0ZXJhdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJdGVyYXRvcj0obmV4dCk9PntcbmNvbnN0IGl0ZXI9aGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT5pdGVyLFxubmV4dH0pO1xuXG5yZXR1cm4gaXRlcjtcbiB9OyRozY9fb25jZS5tYWtlSXRlcmF0b3IobWFrZUl0ZXJhdG9yKTtcbmhhcmRlbihtYWtlSXRlcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUl0ZXJhdG9yIjpbIm1ha2VJdGVyYXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACtVwZ+AgMAAAIDAAAhAAAAQGVuZG8vY29tbW9uLXYxLjIuNy9vYmplY3QtbWFwLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJvYmplY3RNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIGNvbnN0e2VudHJpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgb2JqZWN0TWFwPShvcmlnaW5hbCxtYXBGbik9PntcbmNvbnN0IGVudHM9ZW50cmllcyhvcmlnaW5hbCk7XG5jb25zdCBtYXBFbnRzPWVudHMubWFwKFxuKFtrLHZdKT0+LyogICAgICAgICAgICAgICAgICAgICAgICovW2ssbWFwRm4odixrKV0pO1xuXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2hhcmRlbihmcm9tRW50cmllcyhtYXBFbnRzKSkpO1xuIH07JGjNj19vbmNlLm9iamVjdE1hcChvYmplY3RNYXApO1xuaGFyZGVuKG9iamVjdE1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJvYmplY3RNYXAiOlsib2JqZWN0TWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADufX47hAwAA4QMAACYAAABAZW5kby9jb21tb24tdjEuMi43L29iamVjdC1tZXRhLW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWV0YU1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxjcmVhdGUsZnJvbUVudHJpZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgb2JqZWN0TWV0YU1hcD0oXG5vcmlnaW5hbCxcbm1ldGFNYXBGbixcbnByb3RvPU9iamVjdC5wcm90b3R5cGUpPT5cbntcbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob3JpZ2luYWwpO1xuY29uc3Qga2V5cz1vd25LZXlzKG9yaWdpbmFsKTtcblxuY29uc3QgZGVzY0VudHJpZXM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xua2V5cy5cbm1hcCgoa2V5KT0+W2tleSxtZXRhTWFwRm4oZGVzY3Nba2V5XSxrZXkpXSkuXG5maWx0ZXIoKFtfa2V5LG9wdERlc2NdKT0+b3B0RGVzYyE9PXVuZGVmaW5lZCk7XG5cbnJldHVybiBoYXJkZW4oY3JlYXRlKHByb3RvLGZyb21FbnRyaWVzKGRlc2NFbnRyaWVzKSkpO1xuIH07JGjNj19vbmNlLm9iamVjdE1ldGFNYXAob2JqZWN0TWV0YU1hcCk7XG5oYXJkZW4ob2JqZWN0TWV0YU1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJvYmplY3RNZXRhTWFwIjpbIm9iamVjdE1ldGFNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAwgIay+EDAADhAwAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjcvdGhyb3ctbGFiZWxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJ0aHJvd0xhYmVsZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRocm93TGFiZWxlZD0oXG5pbm5lckVycixcbmxhYmVsLFxuZXJyQ29uc3RydWN0b3I9dW5kZWZpbmVkLFxub3B0aW9ucz11bmRlZmluZWQpPT5cbntcbmlmKHR5cGVvZiBsYWJlbD09PSdudW1iZXInKXtcbmxhYmVsPSBgWyR7bGFiZWx9XWA7XG4gfVxuY29uc3Qgb3V0ZXJFcnI9bWFrZUVycm9yKFxuIGAke2xhYmVsfTogJHtpbm5lckVyci5tZXNzYWdlfWAsXG5lcnJDb25zdHJ1Y3Rvcixcbm9wdGlvbnMpO1xuXG5hbm5vdGF0ZUVycm9yKG91dGVyRXJyLFggYENhdXNlZCBieSAke2lubmVyRXJyfWApO1xudGhyb3cgb3V0ZXJFcnI7XG4gfTskaM2PX29uY2UudGhyb3dMYWJlbGVkKHRocm93TGFiZWxlZCk7XG5oYXJkZW4odGhyb3dMYWJlbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InRocm93TGFiZWxlZCI6WyJ0aHJvd0xhYmVsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxRjnOpQBAACUAQAAIQAAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbnYtb3B0aW9ucy5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL2Vudi1vcHRpb25zLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9lbnYtb3B0aW9ucy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACSt0d+7A0AAOwNAAArAAAAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43L3NyYy9lbnYtb3B0aW9ucy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyIsImdldEVudmlyb25tZW50T3B0aW9uIiwiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCIsIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5cbmNvbnN0e2ZyZWV6ZX09T2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5cbi8vXG4vL1xuY29uc3QgdW5jdXJyeVRoaXM9XG4oZm4pPT5cbihyZWNlaXZlciwuLi5hcmdzKT0+XG5hcHBseShmbixyZWNlaXZlcixhcmdzKTtcbmNvbnN0IGFycmF5UHVzaD11bmN1cnJ5VGhpcyhBcnJheS5wcm90b3R5cGUucHVzaCk7XG5jb25zdCBhcnJheUluY2x1ZGVzPXVuY3VycnlUaGlzKEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyk7XG5jb25zdCBzdHJpbmdTcGxpdD11bmN1cnJ5VGhpcyhTdHJpbmcucHJvdG90eXBlLnNwbGl0KTtcblxuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuY29uc3QgRmFpbD0obGl0ZXJhbHMsLi4uYXJncyk9PntcbmxldCBtc2c9bGl0ZXJhbHNbMF07XG5mb3IobGV0IGk9MDtpPGFyZ3MubGVuZ3RoO2krPTEpe1xubXNnPSBgJHttc2d9JHthcmdzW2ldfSR7bGl0ZXJhbHNbaSsxXX1gO1xuIH1cbnRocm93IEVycm9yKG1zZyk7XG4gfTtcblxuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbnZpcm9ubWVudENhcHRvcj0oYUdsb2JhbCxkcm9wTmFtZXM9ZmFsc2UpPT57XG5jb25zdCBjYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXM9W107XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGdldEVudmlyb25tZW50T3B0aW9uPShcbm9wdGlvbk5hbWUsXG5kZWZhdWx0U2V0dGluZyxcbm9wdE90aGVyVmFsdWVzPXVuZGVmaW5lZCk9Plxue1xudHlwZW9mIG9wdGlvbk5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gbmFtZSAke3Eob3B0aW9uTmFtZSl9IG11c3QgYmUgYSBzdHJpbmcuYDtcbnR5cGVvZiBkZWZhdWx0U2V0dGluZz09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBkZWZhdWx0IHNldHRpbmcgJHtxKFxuZGVmYXVsdFNldHRpbmcpXG4gfSBtdXN0IGJlIGEgc3RyaW5nLmA7XG5cbi8qICAgICAgICAgICAgICAgICAqL1xubGV0IHNldHRpbmc9ZGVmYXVsdFNldHRpbmc7XG5jb25zdCBnbG9iYWxQcm9jZXNzPWFHbG9iYWwucHJvY2Vzc3x8dW5kZWZpbmVkO1xuY29uc3QgZ2xvYmFsRW52PVxudHlwZW9mIGdsb2JhbFByb2Nlc3M9PT0nb2JqZWN0JyYmZ2xvYmFsUHJvY2Vzcy5lbnZ8fHVuZGVmaW5lZDtcbmlmKHR5cGVvZiBnbG9iYWxFbnY9PT0nb2JqZWN0Jyl7XG5pZihvcHRpb25OYW1lIGluIGdsb2JhbEVudil7XG5pZighZHJvcE5hbWVzKXtcbmFycmF5UHVzaChjYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXMsb3B0aW9uTmFtZSk7XG4gfVxuY29uc3Qgb3B0aW9uVmFsdWU9Z2xvYmFsRW52W29wdGlvbk5hbWVdO1xuLy9cbnR5cGVvZiBvcHRpb25WYWx1ZT09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBuYW1lZCAke3EoXG5vcHRpb25OYW1lKVxuIH0sIGlmIHByZXNlbnQsIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHZhbHVlLCBnb3QgJHtxKFxub3B0aW9uVmFsdWUpXG4gfWA7XG5zZXR0aW5nPW9wdGlvblZhbHVlO1xuIH1cbiB9XG5vcHRPdGhlclZhbHVlcz09PXVuZGVmaW5lZHx8XG5zZXR0aW5nPT09ZGVmYXVsdFNldHRpbmd8fFxuYXJyYXlJbmNsdWRlcyhvcHRPdGhlclZhbHVlcyxzZXR0aW5nKXx8XG5GYWlsIGBVbnJlY29nbml6ZWQgJHtxKG9wdGlvbk5hbWUpfSB2YWx1ZSAke3EoXG5zZXR0aW5nKVxuIH0uIEV4cGVjdGVkIG9uZSBvZiAke3EoW2RlZmF1bHRTZXR0aW5nLC4uLm9wdE90aGVyVmFsdWVzXSl9YDtcbnJldHVybiBzZXR0aW5nO1xuIH07XG5mcmVlemUoZ2V0RW52aXJvbm1lbnRPcHRpb24pO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0PShvcHRpb25OYW1lKT0+e1xuY29uc3Qgb3B0aW9uPWdldEVudmlyb25tZW50T3B0aW9uKG9wdGlvbk5hbWUsJycpO1xucmV0dXJuIGZyZWV6ZShvcHRpb249PT0nJz9bXTpzdHJpbmdTcGxpdChvcHRpb24sJywnKSk7XG4gfTtcbmZyZWV6ZShnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KTtcblxuY29uc3QgZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcz0ob3B0aW9uTmFtZSxlbGVtZW50KT0+XG5hcnJheUluY2x1ZGVzKGdldEVudmlyb25tZW50T3B0aW9uc0xpc3Qob3B0aW9uTmFtZSksZWxlbWVudCk7XG5cbmNvbnN0IGdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcz0oKT0+e1xucmV0dXJuIGZyZWV6ZShbLi4uY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzXSk7XG4gfTtcbmZyZWV6ZShnZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXMpO1xuXG5yZXR1cm4gZnJlZXplKHtcbmdldEVudmlyb25tZW50T3B0aW9uLFxuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCxcbmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMsXG5nZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXN9KTtcblxuIH07JGjNj19vbmNlLm1ha2VFbnZpcm9ubWVudENhcHRvcihtYWtlRW52aXJvbm1lbnRDYXB0b3IpO1xuZnJlZXplKG1ha2VFbnZpcm9ubWVudENhcHRvcik7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICB7XG5nZXRFbnZpcm9ubWVudE9wdGlvbixcbmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QsXG5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzfT1cbm1ha2VFbnZpcm9ubWVudENhcHRvcihnbG9iYWxUaGlzLHRydWUpOyRozY9fb25jZS5nZXRFbnZpcm9ubWVudE9wdGlvbihnZXRFbnZpcm9ubWVudE9wdGlvbik7JGjNj19vbmNlLmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCk7JGjNj19vbmNlLmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRW52aXJvbm1lbnRDYXB0b3IiOlsibWFrZUVudmlyb25tZW50Q2FwdG9yIl0sImdldEVudmlyb25tZW50T3B0aW9uIjpbImdldEVudmlyb25tZW50T3B0aW9uIl0sImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiOlsiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCJdLCJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIjpbImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA/HBpMd8HAADfBwAAHAAAAEBlbmRvL2Vycm9ycy12MS4yLjcvaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkZhaWwiLCJYIiwiYW5ub3RhdGVFcnJvciIsImFzc2VydCIsImIiLCJiYXJlIiwibWFrZUVycm9yIiwibm90ZSIsInEiLCJxdW90ZSIsInJlZGFjdGVkIiwidGhyb3dSZWRhY3RlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cblxuY29uc3QgZ2xvYmFsQXNzZXJ0PWdsb2JhbFRoaXMuYXNzZXJ0O1xuXG5pZihnbG9iYWxBc3NlcnQ9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbml0aWFsaXplIEBlbmRvL2Vycm9ycywgbWlzc2luZyBnbG9iYWxUaGlzLmFzc2VydCwgaW1wb3J0ICdzZXMnIGJlZm9yZSAnQGVuZG8vZXJyb3JzJ2ApO1xuXG4gfVxuXG5jb25zdCBtaXNzaW5nPS8qICAgICAgICAgICAgICAgICovW1xuJ3R5cGVvZicsXG4nZXJyb3InLFxuJ2ZhaWwnLFxuJ2VxdWFsJyxcbidzdHJpbmcnLFxuJ25vdGUnLFxuJ2RldGFpbHMnLFxuJ0ZhaWwnLFxuJ3F1b3RlJyxcbi8vXG4vL1xuLy9cbi8vXG4nbWFrZUFzc2VydCddLlxuZmlsdGVyKChuYW1lKT0+Z2xvYmFsQXNzZXJ0W25hbWVdPT09dW5kZWZpbmVkKTtcbmlmKG1pc3NpbmcubGVuZ3RoPjApe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbml0aWFsaXplIEBlbmRvL2Vycm9ycywgbWlzc2luZyBnbG9iYWxUaGlzLmFzc2VydCBtZXRob2RzICR7bWlzc2luZy5qb2luKFxuJywgJylcbiB9YCk7XG5cbiB9XG5cbi8vXG4vL1xuLy9cbmNvbnN0e1xuYmFyZSxcbmRldGFpbHM6cmVkYWN0ZWQsXG5lcnJvcjptYWtlRXJyb3IsXG5GYWlsOnRocm93UmVkYWN0ZWQsXG5tYWtlQXNzZXJ0Ol9vbWl0dGVkTWFrZUFzc2VydCxcbm5vdGUsXG5xdW90ZSxcbi4uLmFzc2VydGlvbnN9PVxuZ2xvYmFsQXNzZXJ0O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuJGjNj19vbmNlLnJlZGFjdGVkKHJlZGFjdGVkKTskaM2PX29uY2UubWFrZUVycm9yKG1ha2VFcnJvcik7JGjNj19vbmNlLnRocm93UmVkYWN0ZWQodGhyb3dSZWRhY3RlZCk7JGjNj19vbmNlLm5vdGUobm90ZSk7JGjNj19vbmNlLnF1b3RlKHF1b3RlKTtjb25zdCBhc3NlcnQ9KHZhbHVlLG9wdERldGFpbHMsZXJyQ29udHJ1Y3RvcixvcHRpb25zKT0+XG5nbG9iYWxBc3NlcnQodmFsdWUsb3B0RGV0YWlscyxlcnJDb250cnVjdG9yLG9wdGlvbnMpOyRozY9fb25jZS5hc3NlcnQoYXNzZXJ0KTtcbk9iamVjdC5hc3NpZ24oYXNzZXJ0LGFzc2VydGlvbnMpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBiYXJlT3JRdW90ZT1iYXJlfHxxdW90ZTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5iYXJlT3JRdW90ZShiYXJlT3JRdW90ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJyZWRhY3RlZCI6WyJyZWRhY3RlZCJdLCJYIjpbInJlZGFjdGVkIl0sIm1ha2VFcnJvciI6WyJtYWtlRXJyb3IiXSwidGhyb3dSZWRhY3RlZCI6WyJ0aHJvd1JlZGFjdGVkIl0sIkZhaWwiOlsidGhyb3dSZWRhY3RlZCJdLCJub3RlIjpbIm5vdGUiXSwiYW5ub3RhdGVFcnJvciI6WyJub3RlIl0sInF1b3RlIjpbInF1b3RlIl0sInEiOlsicXVvdGUiXSwiYXNzZXJ0IjpbImFzc2VydCJdLCJiYXJlIjpbImJhcmVPclF1b3RlIl0sImIiOlsiYmFyZU9yUXVvdGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAfl1VK6UQAAClEAAAIwAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9FLmpzeyJpbXBvcnRzIjpbIi4vdHJhY2stdHVybnMuanMiLCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6WyJkZWZhdWx0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHRyYWNrVHVybnMsbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyOyRozY9faW1wb3J0cyhbW1wiLi90cmFjay10dXJucy5qc1wiLCBbW1widHJhY2tUdXJuc1wiLCBbJGjNj19hID0+ICh0cmFja1R1cm5zID0gJGjNj19hKV1dXV0sW1wiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtbXCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXJcIiwgWyRozY9fYSA9PiAobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsLGVycm9yOm1ha2VFcnJvcn09YXNzZXJ0O1xuY29uc3R7YXNzaWduLGNyZWF0ZX09T2JqZWN0O1xuXG4vKlxuXG4gKi9cblxuY29uc3Qgb25TZW5kPW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19TRU5EX0JSRUFLUE9JTlRTJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBiYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyPXtcbnNldChfdGFyZ2V0LF9wcm9wLF92YWx1ZSl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbmlzRXh0ZW5zaWJsZShfdGFyZ2V0KXtcbnJldHVybiBmYWxzZTtcbiB9LFxuc2V0UHJvdG90eXBlT2YoX3RhcmdldCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5kZWxldGVQcm9wZXJ0eShfdGFyZ2V0LF9wcm9wKXtcbnJldHVybiBmYWxzZTtcbiB9fTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFUHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltwcm9wZXJ0eUtleV0oLi4uYXJncyl7XG5pZih0aGlzIT09cmVjZWl2ZXIpe1xuLy9cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5yZWplY3QoXG5tYWtlRXJyb3IoXG5YIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShwcm9wZXJ0eUtleSl9XCIgbWV0aG9kIG9mIEUoJHtxKFxucmVjaXBpZW50KVxuIH0pYCkpO1xuXG5cbiB9XG5cbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kKHJlY2lwaWVudCxwcm9wZXJ0eUtleSxhcmdzKTtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5yZXR1cm4gSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJnQXJyYXkpO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXI9KHJlY2lwaWVudCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5nZXQ6KF90YXJnZXQscHJvcGVydHlLZXkscmVjZWl2ZXIpPT57XG5yZXR1cm4gaGFyZGVuKFxue1xuLy9cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuLy9cbnRoaXM9PT1yZWNlaXZlcnx8XG5GYWlsIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShcbnByb3BlcnR5S2V5KVxuIH1cIiBtZXRob2Qgb2YgRS5zZW5kT25seSgke3EocmVjaXBpZW50KX0pYDtcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlNZXRob2RTZW5kT25seShyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbi8vXG59W3Byb3BlcnR5S2V5XSk7XG5cbiB9LFxuYXBwbHk6KF90YXJnZXQsX3RoaXNBcmcsYXJnc0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5IYW5kbGVkUHJvbWlzZS5hcHBseUZ1bmN0aW9uU2VuZE9ubHkocmVjaXBpZW50LGFyZ3NBcnJheSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFR2V0UHJveHlIYW5kbGVyPSh4LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmhhczooX3RhcmdldCxfcHJvcCk9PnRydWUsXG5nZXQ6KF90YXJnZXQscHJvcCk9PkhhbmRsZWRQcm9taXNlLmdldCh4LHByb3ApfSk7XG5cblxuLypcblxuICovXG5jb25zdCBtYWtlRT0oSGFuZGxlZFByb21pc2UpPT57XG5yZXR1cm4gaGFyZGVuKFxuYXNzaWduKFxuLypcblxuXG5cblxuXG5cblxuICAgICAgICovXG4vL1xuKHgpPT5oYXJkZW4obmV3IFByb3h5KCgpPT57IH0sbWFrZUVQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcbntcbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuZ2V0Oih4KT0+XG4vL1xuaGFyZGVuKFxubmV3IFByb3h5KGNyZWF0ZShudWxsKSxtYWtlRUdldFByb3h5SGFuZGxlcih4LEhhbmRsZWRQcm9taXNlKSkpLFxuXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5yZXNvbHZlOkhhbmRsZWRQcm9taXNlLnJlc29sdmUsXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5zZW5kT25seTooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eSgoKT0+eyB9LG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xud2hlbjooeCxvbmZ1bGZpbGxlZCxvbnJlamVjdGVkKT0+XG5IYW5kbGVkUHJvbWlzZS5yZXNvbHZlKHgpLnRoZW4oXG4uLi50cmFja1R1cm5zKFtvbmZ1bGZpbGxlZCxvbnJlamVjdGVkXSkpfSkpO1xuXG5cblxuXG4gfTtcblxuY29uc3R7ZGVmYXVsdDokY82PX2RlZmF1bHR9PXtkZWZhdWx0Om1ha2VFfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9leHBvcnRzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAQIOOsqgwAAKoMAAAnAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL2xvY2FsLmpzeyJpbXBvcnRzIjpbIi4vbWVzc2FnZS1icmVha3BvaW50cy5qcyJdLCJleHBvcnRzIjpbImdldE1ldGhvZE5hbWVzIiwibG9jYWxBcHBseUZ1bmN0aW9uIiwibG9jYWxBcHBseU1ldGhvZCIsImxvY2FsR2V0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcjskaM2PX2ltcG9ydHMoW1tcIi4vbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbW1wibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyXCIsIFskaM2PX2EgPT4gKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e2RldGFpbHM6WCxxdW90ZTpxLEZhaWx9PWFzc2VydDtcblxuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxnZXRQcm90b3R5cGVPZixmcmVlemV9PU9iamVjdDtcbmNvbnN0e2FwcGx5LG93bktleXN9PVJlZmxlY3Q7XG5cbmNvbnN0IG50eXBlb2Y9KHNwZWNpbWVuKT0+c3BlY2ltZW49PT1udWxsPydudWxsJzp0eXBlb2Ygc3BlY2ltZW47XG5cbmNvbnN0IG9uRGVsaXZlcnk9bWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKCdFTkRPX0RFTElWRVJZX0JSRUFLUE9JTlRTJyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29tcGFyZVN0cmluZ2lmaWVkPShhLGIpPT57XG5pZih0eXBlb2YgYT09PXR5cGVvZiBiKXtcbmNvbnN0IGxlZnQ9U3RyaW5nKGEpO1xuY29uc3QgcmlnaHQ9U3RyaW5nKGIpO1xuLy9cbnJldHVybiBsZWZ0PHJpZ2h0Py0xOmxlZnQ+cmlnaHQ/MTowO1xuIH1cbmlmKHR5cGVvZiBhPT09J3N5bWJvbCcpe1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N0cmluZycpO1xucmV0dXJuLTE7XG4gfVxuYXNzZXJ0KHR5cGVvZiBhPT09J3N0cmluZycpO1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N5bWJvbCcpO1xucmV0dXJuIDE7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2ROYW1lcz0odmFsKT0+e1xubGV0IGxheWVyPXZhbDtcbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTsvL1xud2hpbGUobGF5ZXIhPT1udWxsJiZsYXllciE9PU9iamVjdC5wcm90b3R5cGUpe1xuLy9cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobGF5ZXIpO1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duS2V5cyhkZXNjcykpe1xuLy9cbi8vXG5pZih0eXBlb2YgdmFsW25hbWVdPT09J2Z1bmN0aW9uJyl7XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxuIH1cbmlmKCFpc09iamVjdCh2YWwpKXtcbmJyZWFrO1xuIH1cbmxheWVyPWdldFByb3RvdHlwZU9mKGxheWVyKTtcbiB9XG5yZXR1cm4gaGFyZGVuKFsuLi5uYW1lc10uc29ydChjb21wYXJlU3RyaW5naWZpZWQpKTtcbiB9O1xuLy9cbi8vXG4kaM2PX29uY2UuZ2V0TWV0aG9kTmFtZXMoZ2V0TWV0aG9kTmFtZXMpO2ZyZWV6ZShnZXRNZXRob2ROYW1lcyk7XG5cbmNvbnN0ICAgICAgICBsb2NhbEFwcGx5RnVuY3Rpb249KHJlY2lwaWVudCxhcmdzKT0+e1xudHlwZW9mIHJlY2lwaWVudD09PSdmdW5jdGlvbid8fFxuYXNzZXJ0LmZhaWwoXG5YIGBDYW5ub3QgaW52b2tlIHRhcmdldCBhcyBhIGZ1bmN0aW9uOyB0eXBlb2YgdGFyZ2V0IGlzICR7cShcbm50eXBlb2YocmVjaXBpZW50KSlcbiB9YCxcblR5cGVFcnJvcik7XG5cbmlmKG9uRGVsaXZlcnkmJm9uRGVsaXZlcnkuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuY29uc3QgcmVzdWx0PWFwcGx5KHJlY2lwaWVudCx1bmRlZmluZWQsYXJncyk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmxvY2FsQXBwbHlGdW5jdGlvbihsb2NhbEFwcGx5RnVuY3Rpb24pO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseU1ldGhvZD0ocmVjaXBpZW50LG1ldGhvZE5hbWUsYXJncyk9PntcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWR8fG1ldGhvZE5hbWU9PT1udWxsKXtcbi8vXG5yZXR1cm4gbG9jYWxBcHBseUZ1bmN0aW9uKHJlY2lwaWVudCxhcmdzKTtcbiB9XG5pZihyZWNpcGllbnQ9PT11bmRlZmluZWR8fHJlY2lwaWVudD09PW51bGwpe1xuYXNzZXJ0LmZhaWwoXG5YIGBDYW5ub3QgZGVsaXZlciAke3EobWV0aG9kTmFtZSl9IHRvIHRhcmdldDsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZm49cmVjaXBpZW50W21ldGhvZE5hbWVdO1xuaWYoZm49PT11bmRlZmluZWQpe1xuYXNzZXJ0LmZhaWwoXG5YIGB0YXJnZXQgaGFzIG5vIG1ldGhvZCAke3EobWV0aG9kTmFtZSl9LCBoYXMgJHtxKFxuZ2V0TWV0aG9kTmFtZXMocmVjaXBpZW50KSlcbiB9YCxcblR5cGVFcnJvcik7XG5cbiB9XG5jb25zdCBmdHlwZT1udHlwZW9mKGZuKTtcbnR5cGVvZiBmbj09PSdmdW5jdGlvbid8fFxuRmFpbCBgaW52b2tlZCBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSBpcyBub3QgYSBmdW5jdGlvbjsgaXQgaXMgYSAke3EoXG5mdHlwZSlcbiB9YDtcbmlmKG9uRGVsaXZlcnkmJm9uRGVsaXZlcnkuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsbWV0aG9kTmFtZSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShmbixyZWNpcGllbnQsYXJncyk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmxvY2FsQXBwbHlNZXRob2QobG9jYWxBcHBseU1ldGhvZCk7XG5cbmNvbnN0ICAgICAgICBsb2NhbEdldD0odCxrZXkpPT50W2tleV07JGjNj19vbmNlLmxvY2FsR2V0KGxvY2FsR2V0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldE1ldGhvZE5hbWVzIjpbImdldE1ldGhvZE5hbWVzIl0sImxvY2FsQXBwbHlGdW5jdGlvbiI6WyJsb2NhbEFwcGx5RnVuY3Rpb24iXSwibG9jYWxBcHBseU1ldGhvZCI6WyJsb2NhbEFwcGx5TWV0aG9kIl0sImxvY2FsR2V0IjpbImxvY2FsR2V0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAGOcEzpDAAA6QwAADUAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyJdLCJleHBvcnRzIjpbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjNj19hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e3F1b3RlOnEsRmFpbH09YXNzZXJ0O1xuXG5jb25zdHtoYXNPd24sZnJlZXplLGVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuLypcblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgaXNKU09OUmVjb3JkPSh2YWwpPT5cbnR5cGVvZiB2YWw9PT0nb2JqZWN0JyYmdmFsIT09bnVsbCYmIUFycmF5LmlzQXJyYXkodmFsKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2ltcGxpZnlUYWc9KHRhZyk9PntcbmZvcihjb25zdCBwcmVmaXggb2ZbJ0FsbGVnZWQ6ICcsJ0RlYnVnTmFtZTogJ10pe1xuaWYodGFnLnN0YXJ0c1dpdGgocHJlZml4KSl7XG5yZXR1cm4gdGFnLnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuIH1cbiB9XG5yZXR1cm4gdGFnO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyPShvcHRpb25OYW1lKT0+e1xubGV0IGJyZWFrcG9pbnRzPUpTT04ucGFyc2UoZ2V0RW52aXJvbm1lbnRPcHRpb24ob3B0aW9uTmFtZSwnbnVsbCcpKTtcblxuaWYoYnJlYWtwb2ludHM9PT1udWxsKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBicmVha3BvaW50c1RhYmxlO1xuXG5jb25zdCBnZXRCcmVha3BvaW50cz0oKT0+YnJlYWtwb2ludHM7XG5mcmVlemUoZ2V0QnJlYWtwb2ludHMpO1xuXG5jb25zdCBzZXRCcmVha3BvaW50cz0obmV3QnJlYWtwb2ludHM9YnJlYWtwb2ludHMpPT57XG5pc0pTT05SZWNvcmQobmV3QnJlYWtwb2ludHMpfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uIHRvIGJlIGEgSlNPTiBicmVha3BvaW50cyByZWNvcmRgO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBuZXdCcmVha3BvaW50c1RhYmxlPXtfX3Byb3RvX186bnVsbH07XG5cbmZvcihjb25zdFt0YWcsbWV0aG9kQlBzXW9mIGVudHJpZXMobmV3QnJlYWtwb2ludHMpKXtcbnRhZz09PXNpbXBsaWZ5VGFnKHRhZyl8fFxuRmFpbCBgSnVzdCB1c2Ugc2ltcGxlIHRhZyAke3Eoc2ltcGxpZnlUYWcodGFnKSl9IHJhdGhlciB0aGFuICR7cSh0YWcpfWA7XG5pc0pTT05SZWNvcmQobWV0aG9kQlBzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cShcbnRhZylcbiB9IHRvIGJlIGEgSlNPTiBtZXRob2RzIGJyZWFrcG9pbnRzIHJlY29yZGA7XG5mb3IoY29uc3RbbWV0aG9kTmFtZSxjb3VudF1vZiBlbnRyaWVzKG1ldGhvZEJQcykpe1xuY291bnQ9PT0nKid8fFxudHlwZW9mIGNvdW50PT09J251bWJlcicmJlxuTnVtYmVyLmlzU2FmZUludGVnZXIoY291bnQpJiZcbmNvdW50Pj0wfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uJ3MgJHtxKHRhZyl9LiR7cShcbm1ldGhvZE5hbWUpXG4gfSB0byBiZSBcIipcIiBvciBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyYDtcblxuY29uc3QgY2xhc3NCUHM9aGFzT3duKG5ld0JyZWFrcG9pbnRzVGFibGUsbWV0aG9kTmFtZSk/XG5uZXdCcmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdOlxubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXT17XG4vL1xuX19wcm90b19fOm51bGx9O1xuXG5jbGFzc0JQc1t0YWddPWNvdW50O1xuIH1cbiB9XG5icmVha3BvaW50cz1uZXdCcmVha3BvaW50cztcbmJyZWFrcG9pbnRzVGFibGU9bmV3QnJlYWtwb2ludHNUYWJsZTtcbiB9O1xuZnJlZXplKHNldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2hvdWxkQnJlYWtwb2ludD0ocmVjaXBpZW50LG1ldGhvZE5hbWUpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IGNsYXNzQlBzPWJyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV18fGJyZWFrcG9pbnRzVGFibGVbJyonXTtcbmlmKGNsYXNzQlBzPT09dW5kZWZpbmVkKXtcbnJldHVybiBmYWxzZTtcbiB9XG5sZXQgdGFnPXNpbXBsaWZ5VGFnKHJlY2lwaWVudFtTeW1ib2wudG9TdHJpbmdUYWddKTtcbmxldCBjb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xudGFnPScqJztcbmNvdW50PWNsYXNzQlBzW3RhZ107XG5pZihjb3VudD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbmlmKGNvdW50PT09JyonKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNvdW50PT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5hc3NlcnQodHlwZW9mIGNvdW50PT09J251bWJlcicmJmNvdW50Pj0xKTtcbmNsYXNzQlBzW3RhZ109Y291bnQtMTtcbnJldHVybiBmYWxzZTtcbiB9O1xuZnJlZXplKHNob3VsZEJyZWFrcG9pbnQpO1xuXG5jb25zdCBicmVha3BvaW50VGVzdGVyPWZyZWV6ZSh7XG5nZXRCcmVha3BvaW50cyxcbnNldEJyZWFrcG9pbnRzLFxuc2hvdWxkQnJlYWtwb2ludH0pO1xuXG5icmVha3BvaW50VGVzdGVyLnNldEJyZWFrcG9pbnRzKCk7XG5yZXR1cm4gYnJlYWtwb2ludFRlc3RlcjtcbiB9OyRozY9fb25jZS5tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbmZyZWV6ZShtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIjpbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAZbLtFMwMAADMDAAApAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL25vLXNoaW0uanN7ImltcG9ydHMiOlsiLi9FLmpzIiwiLi9leHBvcnRzLmpzIl0sImV4cG9ydHMiOlsiRSIsIkhhbmRsZWRQcm9taXNlIl0sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZUU7JGjNj19pbXBvcnRzKFtbXCIuL0UuanNcIiwgW1tcImRlZmF1bHRcIiwgWyRozY9fYSA9PiAobWFrZUUgPSAkaM2PX2EpXV1dXSxbXCIuL2V4cG9ydHMuanNcIiwgW11dXSk7ICAgXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBocD1IYW5kbGVkUHJvbWlzZTskaM2PX29uY2UuaHAoaHApO1xuY29uc3QgICAgICAgIEU9bWFrZUUoaHApOyRozY9fb25jZS5FKEUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiSGFuZGxlZFByb21pc2UiOlsiaHAiXSwiRSI6WyJFIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIaopsdfCQAAXwkAAC0AAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvdHJhY2stdHVybnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJ0cmFja1R1cm5zIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldEVudmlyb25tZW50T3B0aW9uLGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRozY9fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaM2PX2EpXV0sW1wiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc1wiLCBbJGjNj19hID0+IChlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5sZXQgaGlkZGVuUHJpb3JFcnJvcjtcbmxldCBoaWRkZW5DdXJyZW50VHVybj0wO1xubGV0IGhpZGRlbkN1cnJlbnRFdmVudD0wO1xuXG4vL1xuY29uc3QgVkVSQk9TRT1lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKCdERUJVRycsJ3RyYWNrLXR1cm5zJyk7XG5cbi8vXG4vL1xuY29uc3QgRU5BQkxFRD1cbmdldEVudmlyb25tZW50T3B0aW9uKCdUUkFDS19UVVJOUycsJ2Rpc2FibGVkJyxbJ2VuYWJsZWQnXSk9PT0nZW5hYmxlZCc7XG5cbi8vXG4vL1xuLy9cbi8vXG5cbmNvbnN0IGFkZFJlamVjdGlvbk5vdGU9KGRldGFpbHNOb3RlKT0+KHJlYXNvbik9PntcbmlmKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUocmVhc29uLGRldGFpbHNOb3RlKTtcbiB9XG5pZihWRVJCT1NFKXtcbmNvbnNvbGUubG9nKCdSRUpFQ1RFRCBhdCB0b3Agb2YgZXZlbnQgbG9vcCcscmVhc29uKTtcbiB9XG4gfTtcblxuY29uc3Qgd3JhcEZ1bmN0aW9uPVxuKGZ1bmMsc2VuZGluZ0Vycm9yLFgpPT5cbiguLi5hcmdzKT0+e1xuaGlkZGVuUHJpb3JFcnJvcj1zZW5kaW5nRXJyb3I7XG5oaWRkZW5DdXJyZW50VHVybis9MTtcbmhpZGRlbkN1cnJlbnRFdmVudD0wO1xudHJ5e1xubGV0IHJlc3VsdDtcbnRyeXtcbnJlc3VsdD1mdW5jKC4uLmFyZ3MpO1xuIH1jYXRjaChlcnIpe1xuaWYoZXJyIGluc3RhbmNlb2YgRXJyb3Ipe1xuZ2xvYmFsVGhpcy5hc3NlcnQubm90ZShcbmVycixcblggYFRocm93biBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnVEhST1dOIHRvIHRvcCBvZiBldmVudCBsb29wJyxlcnIpO1xuIH1cbnRocm93IGVycjtcbiB9XG4vL1xuY29uc3QgZGV0YWlsc05vdGU9WCBgUmVqZWN0aW9uIGZyb206ICR7aGlkZGVuUHJpb3JFcnJvcn06JHtoaWRkZW5DdXJyZW50VHVybn0uJHtoaWRkZW5DdXJyZW50RXZlbnR9YDtcblByb21pc2UucmVzb2x2ZShyZXN1bHQpLmNhdGNoKGFkZFJlamVjdGlvbk5vdGUoZGV0YWlsc05vdGUpKTtcbnJldHVybiByZXN1bHQ7XG4gfWZpbmFsbHl7XG5oaWRkZW5QcmlvckVycm9yPXVuZGVmaW5lZDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdHJhY2tUdXJucz0oZnVuY3MpPT57XG5pZighRU5BQkxFRHx8dHlwZW9mIGdsb2JhbFRoaXM9PT0ndW5kZWZpbmVkJ3x8IWdsb2JhbFRoaXMuYXNzZXJ0KXtcbnJldHVybiBmdW5jcztcbiB9XG5jb25zdHtkZXRhaWxzOlgsbm90ZTphbm5vdGF0ZUVycm9yfT1nbG9iYWxUaGlzLmFzc2VydDtcblxuaGlkZGVuQ3VycmVudEV2ZW50Kz0xO1xuY29uc3Qgc2VuZGluZ0Vycm9yPUVycm9yKFxuIGBFdmVudDogJHtoaWRkZW5DdXJyZW50VHVybn0uJHtoaWRkZW5DdXJyZW50RXZlbnR9YCk7XG5cbmlmKGhpZGRlblByaW9yRXJyb3IhPT11bmRlZmluZWQpe1xuYW5ub3RhdGVFcnJvcihzZW5kaW5nRXJyb3IsWCBgQ2F1c2VkIGJ5OiAke2hpZGRlblByaW9yRXJyb3J9YCk7XG4gfVxuXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi9cbmZ1bmNzLm1hcCgoZnVuYyk9PmZ1bmMmJndyYXBGdW5jdGlvbihmdW5jLHNlbmRpbmdFcnJvcixYKSkpO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLnRyYWNrVHVybnModHJhY2tUdXJucyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0cmFja1R1cm5zIjpbInRyYWNrVHVybnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAP/DnOlYCAABWAgAAIwAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3V0aWxzLmpzeyJpbXBvcnRzIjpbIi4vc3JjL2xvY2FsLmpzIiwiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qcyJdLCJleHBvcnRzIjpbbnVsbCxudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2xvY2FsLmpzXCIsIFtdXSxbXCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvbG9jYWwuanMiOltbImdldE1ldGhvZE5hbWVzIiwiZ2V0TWV0aG9kTmFtZXMiXV0sIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOltbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciIsIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAsVg2mFICAABSAgAAGQAAAEBlbmRvL2V4by12MS41LjYvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZXhvLW1ha2Vycy5qcyIsIi4vc3JjL3R5cGVzLmpzIiwiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9leG8tbWFrZXJzLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2V4by1tYWtlcnMuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXSxbXCIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyI6W1siR0VUX0lOVEVSRkFDRV9HVUFSRCIsIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAD6B373XFAAA1xQAACIAAABAZW5kby9leG8tdjEuNS42L3NyYy9leG8tbWFrZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vZW52LW9wdGlvbnMiLCJAZW5kby9lcnJvcnMiLCIuL2V4by10b29scy5qcyJdLCJleHBvcnRzIjpbImRlZmluZUV4b0NsYXNzIiwiZGVmaW5lRXhvQ2xhc3NLaXQiLCJpbml0RW1wdHkiLCJtYWtlRXhvIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG9iamVjdE1hcCxlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzLEZhaWwscSxkZWZlbmRQcm90b3R5cGUsZGVmZW5kUHJvdG90eXBlS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc1wiLCBbJGjNj19hID0+IChlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi9leG8tdG9vbHMuanNcIiwgW1tcImRlZmVuZFByb3RvdHlwZVwiLCBbJGjNj19hID0+IChkZWZlbmRQcm90b3R5cGUgPSAkaM2PX2EpXV0sW1wiZGVmZW5kUHJvdG90eXBlS2l0XCIsIFskaM2PX2EgPT4gKGRlZmVuZFByb3RvdHlwZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuICovXG5cbmNvbnN0e2NyZWF0ZSxzZWFsLGZyZWV6ZSxkZWZpbmVQcm9wZXJ0eSx2YWx1ZXN9PU9iamVjdDtcblxuLy9cbmNvbnN0IExBQkVMX0lOU1RBTkNFUz1lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKCdERUJVRycsJ2xhYmVsLWluc3RhbmNlcycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTZWxmPShwcm90byxpbnN0YW5jZUNvdW50KT0+e1xuY29uc3Qgc2VsZj1jcmVhdGUocHJvdG8pO1xuaWYoTEFCRUxfSU5TVEFOQ0VTKXtcbmRlZmluZVByb3BlcnR5KHNlbGYsU3ltYm9sLnRvU3RyaW5nVGFnLHtcbnZhbHVlOiBgJHtwcm90b1tTeW1ib2wudG9TdHJpbmdUYWddfSMke2luc3RhbmNlQ291bnR9YCxcbndyaXRhYmxlOmZhbHNlLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZX0pO1xuXG4gfVxucmV0dXJuIGhhcmRlbihzZWxmKTtcbiB9O1xuXG5jb25zdCBlbXB0eVJlY29yZD1oYXJkZW4oe30pO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbml0RW1wdHk9KCk9PmVtcHR5UmVjb3JkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5pbml0RW1wdHkoaW5pdEVtcHR5KTtcbmNvbnN0ICAgICAgICBkZWZpbmVFeG9DbGFzcz0oXG50YWcsXG5pbnRlcmZhY2VHdWFyZCxcbmluaXQsXG5tZXRob2RzLFxub3B0aW9ucz17fSk9Plxue1xuaGFyZGVuKG1ldGhvZHMpO1xuY29uc3R7XG5maW5pc2g9dW5kZWZpbmVkLFxucmVjZWl2ZUFtcGxpZmllcj11bmRlZmluZWQsXG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXI9dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5yZWNlaXZlQW1wbGlmaWVyPT09dW5kZWZpbmVkfHxcbkZhaWwgYE9ubHkgZmFjZXRzIG9mIGFuIGV4byBjbGFzcyBraXQgY2FuIGJlIGFtcGxpZmllZCAke3EodGFnKX1gO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbnRleHRNYXA9bmV3IFdlYWtNYXAoKTtcbmNvbnN0IHByb3RvPWRlZmVuZFByb3RvdHlwZShcbnRhZyxcbihzZWxmKT0+LyogICAgICAgICAgICAgICovY29udGV4dE1hcC5nZXQoc2VsZiksXG5tZXRob2RzLFxudHJ1ZSxcbmludGVyZmFjZUd1YXJkKTtcblxubGV0IGluc3RhbmNlQ291bnQ9MDtcbi8qXG5cbiAgICovXG5jb25zdCBtYWtlSW5zdGFuY2U9KC4uLmFyZ3MpPT57XG4vL1xuY29uc3Qgc3RhdGU9c2VhbChpbml0KC4uLmFyZ3MpKTtcbmluc3RhbmNlQ291bnQrPTE7XG5jb25zdCBzZWxmPW1ha2VTZWxmKHByb3RvLGluc3RhbmNlQ291bnQpO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbnRleHQ9ZnJlZXplKHtzdGF0ZSxzZWxmfSk7XG5jb250ZXh0TWFwLnNldChzZWxmLGNvbnRleHQpO1xuaWYoZmluaXNoKXtcbmZpbmlzaChjb250ZXh0KTtcbiB9XG5yZXR1cm4gc2VsZjtcbiB9O1xuXG5pZihyZWNlaXZlSW5zdGFuY2VUZXN0ZXIpe1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNJbnN0YW5jZT0oZXhvLGZhY2V0TmFtZT11bmRlZmluZWQpPT57XG5mYWNldE5hbWU9PT11bmRlZmluZWR8fFxuRmFpbCBgZmFjZXROYW1lIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBhbiBleG8gY2xhc3Mga2l0OiAke3EoXG50YWcpXG4gfSBoYXMgbm8gZmFjZXQgJHtxKGZhY2V0TmFtZSl9YDtcbnJldHVybiBjb250ZXh0TWFwLmhhcyhleG8pO1xuIH07XG5oYXJkZW4oaXNJbnN0YW5jZSk7XG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXIoaXNJbnN0YW5jZSk7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKG1ha2VJbnN0YW5jZSk7XG4gfTskaM2PX29uY2UuZGVmaW5lRXhvQ2xhc3MoZGVmaW5lRXhvQ2xhc3MpO1xuaGFyZGVuKGRlZmluZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZpbmVFeG9DbGFzc0tpdD0oXG50YWcsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5tZXRob2RzS2l0LFxub3B0aW9ucz17fSk9Plxue1xuaGFyZGVuKG1ldGhvZHNLaXQpO1xuY29uc3R7XG5maW5pc2g9dW5kZWZpbmVkLFxucmVjZWl2ZUFtcGxpZmllcj11bmRlZmluZWQsXG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXI9dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdCBjb250ZXh0TWFwS2l0PW9iamVjdE1hcChtZXRob2RzS2l0LCgpPT5uZXcgV2Vha01hcCgpKTtcbmNvbnN0IGdldENvbnRleHRLaXQ9b2JqZWN0TWFwKFxuY29udGV4dE1hcEtpdCxcbihjb250ZXh0TWFwKT0+KGZhY2V0KT0+Y29udGV4dE1hcC5nZXQoZmFjZXQpKTtcblxuY29uc3QgcHJvdG90eXBlS2l0PWRlZmVuZFByb3RvdHlwZUtpdChcbnRhZyxcbmdldENvbnRleHRLaXQsXG5tZXRob2RzS2l0LFxudHJ1ZSxcbmludGVyZmFjZUd1YXJkS2l0KTtcblxubGV0IGluc3RhbmNlQ291bnQ9MDtcbi8qXG5cbiAgICovXG5jb25zdCBtYWtlSW5zdGFuY2VLaXQ9KC4uLmFyZ3MpPT57XG4vL1xuY29uc3Qgc3RhdGU9c2VhbChpbml0KC4uLmFyZ3MpKTtcbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0PXtzdGF0ZSxmYWNldHM6bnVsbH07XG5pbnN0YW5jZUNvdW50Kz0xO1xuY29uc3QgZmFjZXRzPW9iamVjdE1hcChwcm90b3R5cGVLaXQsKHByb3RvLGZhY2V0TmFtZSk9PntcbmNvbnN0IHNlbGY9bWFrZVNlbGYocHJvdG8saW5zdGFuY2VDb3VudCk7XG5jb250ZXh0TWFwS2l0W2ZhY2V0TmFtZV0uc2V0KHNlbGYsY29udGV4dCk7XG5yZXR1cm4gc2VsZjtcbiB9KTtcbmNvbnRleHQuZmFjZXRzPWZhY2V0cztcbi8vXG5mcmVlemUoY29udGV4dCk7XG5pZihmaW5pc2gpe1xuZmluaXNoKGNvbnRleHQpO1xuIH1cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAqL2NvbnRleHQuZmFjZXRzKTtcbiB9O1xuXG5pZihyZWNlaXZlQW1wbGlmaWVyKXtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFtcGxpZnk9KGV4b0ZhY2V0KT0+e1xuZm9yKGNvbnN0IGNvbnRleHRNYXAgb2YgdmFsdWVzKGNvbnRleHRNYXBLaXQpKXtcbmlmKGNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KSl7XG5jb25zdHtmYWNldHN9PWNvbnRleHRNYXAuZ2V0KGV4b0ZhY2V0KTtcbnJldHVybiBmYWNldHM7XG4gfVxuIH1cbnRocm93IEZhaWwgYE11c3QgYmUgYSBmYWNldCBvZiAke3EodGFnKX06ICR7ZXhvRmFjZXR9YDtcbiB9O1xuaGFyZGVuKGFtcGxpZnkpO1xucmVjZWl2ZUFtcGxpZmllcihhbXBsaWZ5KTtcbiB9XG5cbmlmKHJlY2VpdmVJbnN0YW5jZVRlc3Rlcil7XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpc0luc3RhbmNlPShleG9GYWNldCxmYWNldE5hbWU9dW5kZWZpbmVkKT0+e1xuaWYoZmFjZXROYW1lPT09dW5kZWZpbmVkKXtcbnJldHVybiB2YWx1ZXMoY29udGV4dE1hcEtpdCkuc29tZSgoY29udGV4dE1hcCk9PlxuY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpKTtcblxuIH1cbmFzc2VydC50eXBlb2YoZmFjZXROYW1lLCdzdHJpbmcnKTtcbmNvbnN0IGNvbnRleHRNYXA9Y29udGV4dE1hcEtpdFtmYWNldE5hbWVdO1xuY29udGV4dE1hcCE9PXVuZGVmaW5lZHx8XG5GYWlsIGBleG8gY2xhc3Mga2l0ICR7cSh0YWcpfSBoYXMgbm8gZmFjZXQgbmFtZWQgJHtxKGZhY2V0TmFtZSl9YDtcbnJldHVybiBjb250ZXh0TWFwLmhhcyhleG9GYWNldCk7XG4gfTtcbmhhcmRlbihpc0luc3RhbmNlKTtcbnJlY2VpdmVJbnN0YW5jZVRlc3Rlcihpc0luc3RhbmNlKTtcbiB9XG5cbnJldHVybiBoYXJkZW4obWFrZUluc3RhbmNlS2l0KTtcbiB9OyRozY9fb25jZS5kZWZpbmVFeG9DbGFzc0tpdChkZWZpbmVFeG9DbGFzc0tpdCk7XG5oYXJkZW4oZGVmaW5lRXhvQ2xhc3NLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFeG89KHRhZyxpbnRlcmZhY2VHdWFyZCxtZXRob2RzLG9wdGlvbnM9dW5kZWZpbmVkKT0+e1xuY29uc3QgbWFrZUluc3RhbmNlPWRlZmluZUV4b0NsYXNzKFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cbnJldHVybiBtYWtlSW5zdGFuY2UoKTtcbiB9OyRozY9fb25jZS5tYWtlRXhvKG1ha2VFeG8pO1xuaGFyZGVuKG1ha2VFeG8pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaW5pdEVtcHR5IjpbImluaXRFbXB0eSJdLCJkZWZpbmVFeG9DbGFzcyI6WyJkZWZpbmVFeG9DbGFzcyJdLCJkZWZpbmVFeG9DbGFzc0tpdCI6WyJkZWZpbmVFeG9DbGFzc0tpdCJdLCJtYWtlRXhvIjpbIm1ha2VFeG8iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAzu5bBuYvAADmLwAAIQAAAEBlbmRvL2V4by12MS41LjYvc3JjL2V4by10b29scy5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2ZhciIsIkBlbmRvL3BhdHRlcm5zIiwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9nZXQtaW50ZXJmYWNlLmpzIl0sImV4cG9ydHMiOlsiZGVmZW5kUHJvdG90eXBlIiwiZGVmZW5kUHJvdG90eXBlS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldE1ldGhvZE5hbWVzLGhhc093blByb3BlcnR5T2YsdG9UaHJvd2FibGUsRSxGYXIsbXVzdE1hdGNoLE0saXNBd2FpdEFyZ0d1YXJkLGlzUmF3R3VhcmQsZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQsZ2V0TWV0aG9kR3VhcmRQYXlsb2FkLGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCxnZXRDb3B5TWFwRW50cmllcyxsaXN0RGlmZmVyZW5jZSxvYmplY3RNYXAscSxGYWlsLEdFVF9JTlRFUkZBQ0VfR1VBUkQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJ0b1Rocm93YWJsZVwiLCBbJGjNj19hID0+ICh0b1Rocm93YWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiaXNBd2FpdEFyZ0d1YXJkXCIsIFskaM2PX2EgPT4gKGlzQXdhaXRBcmdHdWFyZCA9ICRozY9fYSldXSxbXCJpc1Jhd0d1YXJkXCIsIFskaM2PX2EgPT4gKGlzUmF3R3VhcmQgPSAkaM2PX2EpXV0sW1wiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV0sW1wiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldE1ldGhvZEd1YXJkUGF5bG9hZCA9ICRozY9fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dLFtcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBFbnRyaWVzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qc1wiLCBbW1wibGlzdERpZmZlcmVuY2VcIiwgWyRozY9fYSA9PiAobGlzdERpZmZlcmVuY2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vZ2V0LWludGVyZmFjZS5qc1wiLCBbW1wiR0VUX0lOVEVSRkFDRV9HVUFSRFwiLCBbJGjNj19hID0+IChHRVRfSU5URVJGQUNFX0dVQVJEID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZGVmaW5lUHJvcGVydGllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUmF3TWV0aG9kR3VhcmQ9TS5jYWxsKCkucmVzdChNLnJhdygpKS5yZXR1cm5zKE0ucmF3KCkpO1xuXG5jb25zdCBSRURBQ1RFRF9SQVdfQVJHPSc8cmVkYWN0ZWQgcmF3IGFyZz4nO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgUGFzc2FibGVNZXRob2RHdWFyZD1NLmNhbGwoKS5yZXN0KE0uYW55KCkpLnJldHVybnMoTS5hbnkoKSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kU3luY0FyZ3M9KHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsPXVuZGVmaW5lZCk9PntcbmNvbnN0e1xuZGVjbGFyZWRMZW4sXG5oYXNSZXN0QXJnR3VhcmQsXG5yZXN0QXJnR3VhcmRJc1JhdyxcbnBhcmFtc1BhdHRlcm4sXG5yZWRhY3RlZEluZGljZXN9PVxubWF0Y2hDb25maWc7XG5cbi8vXG4vL1xubGV0IG1hdGNoYWJsZUFyZ3M9c3luY0FyZ3M7XG5pZihyZXN0QXJnR3VhcmRJc1JhdyYmc3luY0FyZ3MubGVuZ3RoPmRlY2xhcmVkTGVuKXtcbmNvbnN0IHJlc3RMZW49c3luY0FyZ3MubGVuZ3RoLWRlY2xhcmVkTGVuO1xuY29uc3QgcmVkYWN0ZWRSZXN0PUFycmF5KHJlc3RMZW4pLmZpbGwoUkVEQUNURURfUkFXX0FSRyk7XG5tYXRjaGFibGVBcmdzPVsuLi5zeW5jQXJncy5zbGljZSgwLGRlY2xhcmVkTGVuKSwuLi5yZWRhY3RlZFJlc3RdO1xuIH1lbHNlIGlmKFxucmVkYWN0ZWRJbmRpY2VzLmxlbmd0aD4wJiZcbnJlZGFjdGVkSW5kaWNlc1swXTxzeW5jQXJncy5sZW5ndGgpXG57XG4vL1xuLy9cbm1hdGNoYWJsZUFyZ3M9Wy4uLnN5bmNBcmdzXTtcbiB9XG5cbmZvcihjb25zdCBpIG9mIHJlZGFjdGVkSW5kaWNlcyl7XG5pZihpPj1tYXRjaGFibGVBcmdzLmxlbmd0aCl7XG5icmVhaztcbiB9XG5tYXRjaGFibGVBcmdzW2ldPVJFREFDVEVEX1JBV19BUkc7XG4gfVxuXG5tdXN0TWF0Y2goaGFyZGVuKG1hdGNoYWJsZUFyZ3MpLHBhcmFtc1BhdHRlcm4sbGFiZWwpO1xuXG5pZihoYXNSZXN0QXJnR3VhcmQpe1xucmV0dXJuIHN5bmNBcmdzO1xuIH1cbnN5bmNBcmdzLmxlbmd0aDw9ZGVjbGFyZWRMZW58fFxuRmFpbCBgJHtxKGxhYmVsKX0gYWNjZXB0cyBhdCBtb3N0ICR7cShkZWNsYXJlZExlbil9IGFyZ3VtZW50cywgbm90ICR7cShcbnN5bmNBcmdzLmxlbmd0aClcbiB9OiAke3N5bmNBcmdzfWA7XG5yZXR1cm4gc3luY0FyZ3M7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBidWlsZE1hdGNoQ29uZmlnPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcblxuY29uc3QgbWF0Y2hhYmxlQXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCByZWRhY3RlZEluZGljZXM9W107XG5mb3IobGV0IGk9MDtpPG1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZUFyZ0d1YXJkc1tpXSkpe1xubWF0Y2hhYmxlQXJnR3VhcmRzW2ldPVJFREFDVEVEX1JBV19BUkc7XG5yZWRhY3RlZEluZGljZXMucHVzaChpKTtcbiB9XG4gfVxuXG4vL1xubGV0IG1hdGNoYWJsZVJlc3RBcmdHdWFyZD1yZXN0QXJnR3VhcmQ7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZVJlc3RBcmdHdWFyZCkpe1xubWF0Y2hhYmxlUmVzdEFyZ0d1YXJkPU0uYXJyYXlPZihSRURBQ1RFRF9SQVdfQVJHKTtcbiB9XG5jb25zdCBtYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQ9aGFyZGVuKHtcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczptYXRjaGFibGVBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOm1hdGNoYWJsZUFyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKSxcbnJlc3RBcmdHdWFyZDptYXRjaGFibGVSZXN0QXJnR3VhcmR9KTtcblxuXG5jb25zdCBwYXJhbXNQYXR0ZXJuPU0uc3BsaXRBcnJheShcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZC5hcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQub3B0aW9uYWxBcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQucmVzdEFyZ0d1YXJkKTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmRlY2xhcmVkTGVuOm1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGgsXG5oYXNSZXN0QXJnR3VhcmQ6cmVzdEFyZ0d1YXJkIT09dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkSXNSYXc6cmVzdEFyZ0d1YXJkIT09bWF0Y2hhYmxlUmVzdEFyZ0d1YXJkLFxucGFyYW1zUGF0dGVybixcbnJlZGFjdGVkSW5kaWNlcyxcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZH0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZFN5bmNNZXRob2Q9KFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpPT5cbntcbmNvbnN0e3JldHVybkd1YXJkfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5jb25zdCBpc1Jhd1JldHVybj1pc1Jhd0d1YXJkKHJldHVybkd1YXJkKTtcbmNvbnN0IG1hdGNoQ29uZmlnPWJ1aWxkTWF0Y2hDb25maWcobWV0aG9kR3VhcmRQYXlsb2FkKTtcbmNvbnN0e3N5bmNNZXRob2R9PXtcbi8vXG5zeW5jTWV0aG9kKC4uLnN5bmNBcmdzKXtcbnRyeXtcbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbi8vXG5jb25zdCByZWFsQXJncz1kZWZlbmRTeW5jQXJncyhzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbCk7XG5jb25zdCByZXN1bHQ9YXBwbHkoYmVoYXZpb3JNZXRob2QsY29udGV4dCxyZWFsQXJncyk7XG5pZighaXNSYXdSZXR1cm4pe1xubXVzdE1hdGNoKGhhcmRlbihyZXN1bHQpLHJldHVybkd1YXJkLCBgJHtsYWJlbH06IHJlc3VsdGApO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfWNhdGNoKHRocm93blRoaW5nKXtcbnRocm93IHRvVGhyb3dhYmxlKHRocm93blRoaW5nKTtcbiB9XG4gfX07XG5cbnJldHVybiBzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cbiAqL1xuY29uc3QgZGVzeW5jPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcbiFpc0F3YWl0QXJnR3VhcmQocmVzdEFyZ0d1YXJkKXx8XG5GYWlsIGBSZXN0IGFyZ3MgbWF5IG5vdCBiZSBhd2FpdGVkOiAke3Jlc3RBcmdHdWFyZH1gO1xuY29uc3QgcmF3QXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCBhd2FpdEluZGV4ZXM9W107XG5mb3IobGV0IGk9MDtpPHJhd0FyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBhcmdHdWFyZD1yYXdBcmdHdWFyZHNbaV07XG5pZihpc0F3YWl0QXJnR3VhcmQoYXJnR3VhcmQpKXtcbnJhd0FyZ0d1YXJkc1tpXT1nZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChhcmdHdWFyZCkuYXJnR3VhcmQ7XG5hd2FpdEluZGV4ZXMucHVzaChpKTtcbiB9XG4gfVxucmV0dXJue1xuYXdhaXRJbmRleGVzLFxucmF3TWV0aG9kR3VhcmRQYXlsb2FkOntcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczpyYXdBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOnJhd0FyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKX19O1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZEFzeW5jTWV0aG9kPShcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKT0+XG57XG5jb25zdHtyZXR1cm5HdWFyZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuY29uc3QgaXNSYXdSZXR1cm49aXNSYXdHdWFyZChyZXR1cm5HdWFyZCk7XG5cbmNvbnN0e2F3YWl0SW5kZXhlcyxyYXdNZXRob2RHdWFyZFBheWxvYWR9PWRlc3luYyhtZXRob2RHdWFyZFBheWxvYWQpO1xuY29uc3QgbWF0Y2hDb25maWc9YnVpbGRNYXRjaENvbmZpZyhyYXdNZXRob2RHdWFyZFBheWxvYWQpO1xuXG5jb25zdHthc3luY01ldGhvZH09e1xuLy9cbmFzeW5jTWV0aG9kKC4uLmFyZ3Mpe1xuY29uc3QgYXdhaXRMaXN0PVtdO1xuZm9yKGNvbnN0IGkgb2YgYXdhaXRJbmRleGVzKXtcbmlmKGk+PWFyZ3MubGVuZ3RoKXtcbmJyZWFrO1xuIH1cbmF3YWl0TGlzdC5wdXNoKGFyZ3NbaV0pO1xuIH1cbmNvbnN0IHA9UHJvbWlzZS5hbGwoYXdhaXRMaXN0KTtcbmNvbnN0IHN5bmNBcmdzPVsuLi5hcmdzXTtcbmNvbnN0IHJlc3VsdFA9RS53aGVuKFxucCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyhhd2FpdGVkQXJncyk9PntcbmZvcihsZXQgaj0wO2o8YXdhaXRlZEFyZ3MubGVuZ3RoO2orPTEpe1xuc3luY0FyZ3NbYXdhaXRJbmRleGVzW2pdXT1hd2FpdGVkQXJnc1tqXTtcbiB9XG4vL1xuLy9cbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbmNvbnN0IHJlYWxBcmdzPWRlZmVuZFN5bmNBcmdzKHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsKTtcbnJldHVybiBhcHBseShiZWhhdmlvck1ldGhvZCxjb250ZXh0LHJlYWxBcmdzKTtcbiB9KTtcblxucmV0dXJuIEUud2hlbihyZXN1bHRQLChmdWxmaWxsbWVudCk9PntcbmlmKCFpc1Jhd1JldHVybil7XG5tdXN0TWF0Y2goaGFyZGVuKGZ1bGZpbGxtZW50KSxyZXR1cm5HdWFyZCwgYCR7bGFiZWx9OiByZXN1bHRgKTtcbiB9XG5yZXR1cm4gZnVsZmlsbG1lbnQ7XG4gfSkuY2F0Y2goKHJlYXNvbik9PlxuLy9cbi8vXG5Qcm9taXNlLnJlamVjdCh0b1Rocm93YWJsZShyZWFzb24pKSk7XG5cbiB9fTtcblxucmV0dXJuIGFzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRNZXRob2Q9KGdldENvbnRleHQsYmVoYXZpb3JNZXRob2QsbWV0aG9kR3VhcmQsbGFiZWwpPT57XG5jb25zdCBtZXRob2RHdWFyZFBheWxvYWQ9Z2V0TWV0aG9kR3VhcmRQYXlsb2FkKG1ldGhvZEd1YXJkKTtcbmNvbnN0e2NhbGxLaW5kfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5pZihjYWxsS2luZD09PSdzeW5jJyl7XG5yZXR1cm4gZGVmZW5kU3luY01ldGhvZChcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKTtcblxuIH1lbHNle1xuYXNzZXJ0KGNhbGxLaW5kPT09J2FzeW5jJyk7XG5yZXR1cm4gZGVmZW5kQXN5bmNNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBiaW5kTWV0aG9kPShcbm1ldGhvZFRhZyxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQpPT5cbntcbmFzc2VydC50eXBlb2YoYmVoYXZpb3JNZXRob2QsJ2Z1bmN0aW9uJyk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldENvbnRleHQ9KHJlcHJlc2VudGF0aXZlKT0+e1xucmVwcmVzZW50YXRpdmV8fFxuLy9cbkZhaWwgYE1ldGhvZCAke21ldGhvZFRhZ30gY2FsbGVkIHdpdGhvdXQgJ3RoaXMnIG9iamVjdGA7XG5jb25zdCBjb250ZXh0PWNvbnRleHRQcm92aWRlcihyZXByZXNlbnRhdGl2ZSk7XG5pZihjb250ZXh0PT09dW5kZWZpbmVkKXtcbnRocm93IEZhaWwgYCR7cShcbm1ldGhvZFRhZylcbiB9IG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gYSB2YWxpZCBpbnN0YW5jZTogJHtyZXByZXNlbnRhdGl2ZX1gO1xuIH1cbnJldHVybiBjb250ZXh0O1xuIH07XG5cbmNvbnN0IG1ldGhvZD1kZWZlbmRNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCxcbm1ldGhvZFRhZyk7XG5cblxuZGVmaW5lUHJvcGVydGllcyhtZXRob2Qse1xubmFtZTp7dmFsdWU6bWV0aG9kVGFnfSxcbmxlbmd0aDp7dmFsdWU6YmVoYXZpb3JNZXRob2QubGVuZ3RofX0pO1xuXG5yZXR1cm4gbWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZlbmRQcm90b3R5cGU9KFxudGFnLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHM9ZmFsc2UsXG5pbnRlcmZhY2VHdWFyZD11bmRlZmluZWQpPT5cbntcbmNvbnN0IHByb3RvdHlwZT17fTtcbmNvbnN0IG1ldGhvZE5hbWVzPWdldE1ldGhvZE5hbWVzKGJlaGF2aW9yTWV0aG9kcykuZmlsdGVyKFxuLy9cbi8vXG4oa2V5KT0+e1xuaWYoa2V5IT09J2NvbnN0cnVjdG9yJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBjb25zdHJ1Y3Rvcj1iZWhhdmlvck1ldGhvZHMuY29uc3RydWN0b3I7XG5yZXR1cm4hKFxuY29uc3RydWN0b3IucHJvdG90eXBlJiZcbmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj09PWNvbnN0cnVjdG9yKTtcblxuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG1ldGhvZEd1YXJkcztcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZGVmYXVsdEd1YXJkcztcbmlmKGludGVyZmFjZUd1YXJkKXtcbmNvbnN0e1xuaW50ZXJmYWNlTmFtZSxcbm1ldGhvZEd1YXJkczptZyxcbnN5bWJvbE1ldGhvZEd1YXJkcyxcbnNsb3BweSxcbmRlZmF1bHRHdWFyZHM6ZGc9c2xvcHB5PydwYXNzYWJsZSc6ZGVmYXVsdEd1YXJkc309XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoaW50ZXJmYWNlR3VhcmQpO1xubWV0aG9kR3VhcmRzPWhhcmRlbih7XG4uLi5tZyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHMmJlxuZnJvbUVudHJpZXMoZ2V0Q29weU1hcEVudHJpZXMoc3ltYm9sTWV0aG9kR3VhcmRzKSkpfSk7XG5cbmRlZmF1bHRHdWFyZHM9ZGc7XG57XG5jb25zdCBtZXRob2RHdWFyZE5hbWVzPW93bktleXMobWV0aG9kR3VhcmRzKTtcbmNvbnN0IHVuaW1wbGVtZW50ZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kR3VhcmROYW1lcyxtZXRob2ROYW1lcyk7XG51bmltcGxlbWVudGVkLmxlbmd0aD09PTB8fFxuRmFpbCBgbWV0aG9kcyAke3EodW5pbXBsZW1lbnRlZCl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuaWYoZGVmYXVsdEd1YXJkcz09PXVuZGVmaW5lZCl7XG5jb25zdCB1bmd1YXJkZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kTmFtZXMsbWV0aG9kR3VhcmROYW1lcyk7XG51bmd1YXJkZWQubGVuZ3RoPT09MHx8XG5GYWlsIGBtZXRob2RzICR7cSh1bmd1YXJkZWQpfSBub3QgZ3VhcmRlZCBieSAke3EoaW50ZXJmYWNlTmFtZSl9YDtcbiB9XG4gfVxuIH1cblxuZm9yKGNvbnN0IHByb3Agb2YgbWV0aG9kTmFtZXMpe1xuY29uc3Qgb3JpZ2luYWxNZXRob2Q9YmVoYXZpb3JNZXRob2RzW3Byb3BdO1xuY29uc3R7c2hpZnRlZE1ldGhvZH09e1xuc2hpZnRlZE1ldGhvZCguLi5hcmdzKXtcbnJldHVybiBvcmlnaW5hbE1ldGhvZCh0aGlzLC4uLmFyZ3MpO1xuIH19O1xuXG5jb25zdCBiZWhhdmlvck1ldGhvZD10aGlzZnVsTWV0aG9kcz9vcmlnaW5hbE1ldGhvZDpzaGlmdGVkTWV0aG9kO1xuLy9cbi8vXG5sZXQgbWV0aG9kR3VhcmQ9bWV0aG9kR3VhcmRzJiZtZXRob2RHdWFyZHNbcHJvcF07XG5pZighbWV0aG9kR3VhcmQpe1xuc3dpdGNoKGRlZmF1bHRHdWFyZHMpe1xuY2FzZSB1bmRlZmluZWQ6e1xuaWYodGhpc2Z1bE1ldGhvZHMpe1xubWV0aG9kR3VhcmQ9UGFzc2FibGVNZXRob2RHdWFyZDtcbiB9ZWxzZXtcbm1ldGhvZEd1YXJkPVJhd01ldGhvZEd1YXJkO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UncGFzc2FibGUnOntcbm1ldGhvZEd1YXJkPVBhc3NhYmxlTWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5jYXNlJ3Jhdyc6e1xubWV0aG9kR3VhcmQ9UmF3TWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBkZWZhdWx0R3VhcmRzICR7cShkZWZhdWx0R3VhcmRzKX1gO1xuIH19XG5cbiB9XG5wcm90b3R5cGVbcHJvcF09YmluZE1ldGhvZChcbiBgSW4gJHtxKHByb3ApfSBtZXRob2Qgb2YgKCR7dGFnfSlgLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCk7XG5cbiB9XG5cbmlmKCFoYXNPd25Qcm9wZXJ0eU9mKHByb3RvdHlwZSxHRVRfSU5URVJGQUNFX0dVQVJEKSl7XG5jb25zdCBnZXRJbnRlcmZhY2VHdWFyZE1ldGhvZD17XG5bR0VUX0lOVEVSRkFDRV9HVUFSRF0oKXtcbi8vXG5yZXR1cm4gaW50ZXJmYWNlR3VhcmQ7XG4gfX1bXG5HRVRfSU5URVJGQUNFX0dVQVJEXTtcbnByb3RvdHlwZVtHRVRfSU5URVJGQUNFX0dVQVJEXT1iaW5kTWV0aG9kKFxuIGBJbiAke3EoR0VUX0lOVEVSRkFDRV9HVUFSRCl9IG1ldGhvZCBvZiAoJHt0YWd9KWAsXG5jb250ZXh0UHJvdmlkZXIsXG5nZXRJbnRlcmZhY2VHdWFyZE1ldGhvZCxcblBhc3NhYmxlTWV0aG9kR3VhcmQpO1xuXG4gfVxuXG5yZXR1cm4gRmFyKFxudGFnLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnByb3RvdHlwZSk7XG5cblxuIH07JGjNj19vbmNlLmRlZmVuZFByb3RvdHlwZShkZWZlbmRQcm90b3R5cGUpO1xuaGFyZGVuKGRlZmVuZFByb3RvdHlwZSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZlbmRQcm90b3R5cGVLaXQ9KFxudGFnLFxuY29udGV4dFByb3ZpZGVyS2l0LFxuYmVoYXZpb3JNZXRob2RzS2l0LFxudGhpc2Z1bE1ldGhvZHM9ZmFsc2UsXG5pbnRlcmZhY2VHdWFyZEtpdD11bmRlZmluZWQpPT5cbntcbmNvbnN0IGZhY2V0TmFtZXM9b3duS2V5cyhiZWhhdmlvck1ldGhvZHNLaXQpLnNvcnQoKTtcbmZhY2V0TmFtZXMubGVuZ3RoPjF8fEZhaWwgYEEgbXVsdGktZmFjZXQgb2JqZWN0IG11c3QgaGF2ZSBtdWx0aXBsZSBmYWNldHNgO1xuaWYoaW50ZXJmYWNlR3VhcmRLaXQpe1xuY29uc3QgaW50ZXJmYWNlTmFtZXM9b3duS2V5cyhpbnRlcmZhY2VHdWFyZEtpdCk7XG5jb25zdCBleHRyYUludGVyZmFjZU5hbWVzPWxpc3REaWZmZXJlbmNlKGZhY2V0TmFtZXMsaW50ZXJmYWNlTmFtZXMpO1xuZXh0cmFJbnRlcmZhY2VOYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEludGVyZmFjZXMgJHtxKGV4dHJhSW50ZXJmYWNlTmFtZXMpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmNvbnN0IGV4dHJhRmFjZXROYW1lcz1saXN0RGlmZmVyZW5jZShpbnRlcmZhY2VOYW1lcyxmYWNldE5hbWVzKTtcbmV4dHJhRmFjZXROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEZhY2V0cyAke3EoZXh0cmFGYWNldE5hbWVzKX0gb2YgJHtxKHRhZyl9IG5vdCBndWFyZGVkIGJ5IGludGVyZmFjZXNgO1xuIH1cbmNvbnN0IGNvbnRleHRNYXBOYW1lcz1vd25LZXlzKGNvbnRleHRQcm92aWRlcktpdCk7XG5jb25zdCBleHRyYUNvbnRleHROYW1lcz1saXN0RGlmZmVyZW5jZShmYWNldE5hbWVzLGNvbnRleHRNYXBOYW1lcyk7XG5leHRyYUNvbnRleHROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYENvbnRleHRzICR7cShleHRyYUNvbnRleHROYW1lcyl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuY29uc3QgZXh0cmFGYWNldE5hbWVzPWxpc3REaWZmZXJlbmNlKGNvbnRleHRNYXBOYW1lcyxmYWNldE5hbWVzKTtcbmV4dHJhRmFjZXROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEZhY2V0cyAke3EoZXh0cmFGYWNldE5hbWVzKX0gb2YgJHtxKHRhZyl9IG1pc3NpbmcgY29udGV4dHNgO1xuY29uc3QgcHJvdG9LaXQ9b2JqZWN0TWFwKGJlaGF2aW9yTWV0aG9kc0tpdCwoYmVoYXZpb3JNZXRob2RzLGZhY2V0TmFtZSk9PlxuZGVmZW5kUHJvdG90eXBlKFxuIGAke3RhZ30gJHtTdHJpbmcoZmFjZXROYW1lKX1gLFxuY29udGV4dFByb3ZpZGVyS2l0W2ZhY2V0TmFtZV0sXG5iZWhhdmlvck1ldGhvZHMsXG50aGlzZnVsTWV0aG9kcyxcbmludGVyZmFjZUd1YXJkS2l0JiZpbnRlcmZhY2VHdWFyZEtpdFtmYWNldE5hbWVdKSk7XG5cblxucmV0dXJuIHByb3RvS2l0O1xuIH07JGjNj19vbmNlLmRlZmVuZFByb3RvdHlwZUtpdChkZWZlbmRQcm90b3R5cGVLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmZW5kUHJvdG90eXBlIjpbImRlZmVuZFByb3RvdHlwZSJdLCJkZWZlbmRQcm90b3R5cGVLaXQiOlsiZGVmZW5kUHJvdG90eXBlS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEaTPG42AgAANgIAACUAAABAZW5kby9leG8tdjEuNS42L3NyYy9nZXQtaW50ZXJmYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJHRVRfSU5URVJGQUNFX0dVQVJEIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9JTlRFUkZBQ0VfR1VBUkQ9J19fZ2V0SW50ZXJmYWNlR3VhcmRfXyc7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5HRVRfSU5URVJGQUNFX0dVQVJEKEdFVF9JTlRFUkZBQ0VfR1VBUkQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiR0VUX0lOVEVSRkFDRV9HVUFSRCI6WyJHRVRfSU5URVJGQUNFX0dVQVJEIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAAB0AAABAZW5kby9leG8tdjEuNS42L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAC0qYOFYCAABWAgAAHQAAAEBlbmRvL2Zhci12MS4xLjgvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wYXNzLXN0eWxlIl0sImV4cG9ydHMiOlsiZ2V0SW50ZXJmYWNlT2YiLCJnZXRJbnRlcmZhY2VPZiIsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtdXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vZXZlbnR1YWwtc2VuZCI6W1siRSIsIkUiXV0sIkBlbmRvL3Bhc3Mtc3R5bGUiOltbIkZhciIsIkZhciJdLFsiZ2V0SW50ZXJmYWNlT2YiLCJnZXRJbnRlcmZhY2VPZiJdLFsicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuIFp8HQHAAB0BwAAHQAAAEBlbmRvL21hcnNoYWwtdjEuNi4xL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vc3JjL21hcnNoYWwuanMiLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIiwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiLCIuL3NyYy9yYW5rT3JkZXIuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsInBhcnNlIiwicGFyc2UiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc1wiLCBbXV0sW1wiLi9zcmMvZW5jb2RlUGFzc2FibGUuanNcIiwgW11dLFtcIi4vc3JjL3JhbmtPcmRlci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOltbIlFDTEFTUyIsIlFDTEFTUyJdXSwiLi9zcmMvbWFyc2hhbC5qcyI6W1sibWFrZU1hcnNoYWwiLCJtYWtlTWFyc2hhbCJdXSwiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiOltbInN0cmluZ2lmeSIsInN0cmluZ2lmeSJdLFsicGFyc2UiLCJwYXJzZSJdXSwiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanMiOltbImRlY29kZVRvSnVzdGluIiwiZGVjb2RlVG9KdXN0aW4iXV0sIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIjpbWyJtYWtlUGFzc2FibGVLaXQiLCJtYWtlUGFzc2FibGVLaXQiXSxbIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSJdLFsibWFrZURlY29kZVBhc3NhYmxlIiwibWFrZURlY29kZVBhc3NhYmxlIl0sWyJpc0VuY29kZWRSZW1vdGFibGUiLCJpc0VuY29kZWRSZW1vdGFibGUiXSxbInplcm9QYWQiLCJ6ZXJvUGFkIl0sWyJyZWNvcmROYW1lcyIsInJlY29yZE5hbWVzIl0sWyJyZWNvcmRWYWx1ZXMiLCJyZWNvcmRWYWx1ZXMiXV0sIi4vc3JjL3JhbmtPcmRlci5qcyI6W1sidHJpdmlhbENvbXBhcmF0b3IiLCJ0cml2aWFsQ29tcGFyYXRvciJdLFsiYXNzZXJ0UmFua1NvcnRlZCIsImFzc2VydFJhbmtTb3J0ZWQiXSxbImNvbXBhcmVSYW5rIiwiY29tcGFyZVJhbmsiXSxbImlzUmFua1NvcnRlZCIsImlzUmFua1NvcnRlZCJdLFsic29ydEJ5UmFuayIsInNvcnRCeVJhbmsiXSxbImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVBbnRpUmFuayJdLFsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCJdLFsiZ2V0UGFzc1N0eWxlQ292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciJdLFsiaW50ZXJzZWN0UmFua0NvdmVycyIsImludGVyc2VjdFJhbmtDb3ZlcnMiXSxbInVuaW9uUmFua0NvdmVycyIsInVuaW9uUmFua0NvdmVycyJdXSwiQGVuZG8vcGFzcy1zdHlsZSI6W1siZGVlcGx5RnVsZmlsbGVkIiwiZGVlcGx5RnVsZmlsbGVkIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADXbFulWUMAAFlDAAAqAAAAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL2VuY29kZVBhc3NhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJpc0VuY29kZWRSZW1vdGFibGUiLCJtYWtlRGVjb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlUGFzc2FibGVLaXQiLCJwYXNzU3R5bGVQcmVmaXhlcyIsInJlY29yZE5hbWVzIiwicmVjb3JkVmFsdWVzIiwiemVyb1BhZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixhc3NlcnRSZWNvcmQsaXNFcnJvckxpa2UsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxiLHEsRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImFzc2VydFJlY29yZFwiLCBbJGjNj19hID0+IChhc3NlcnRSZWNvcmQgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJiXCIsIFskaM2PX2EgPT4gKGIgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7ZnJvbUVudHJpZXMsaXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8vXG5jb25zdCByQzA9L1tcXHgwMC1cXHgxRl0vO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdldFN1ZmZpeD0oc3RyLGluZGV4KT0+aW5kZXg9PT0wP3N0cjpzdHIuc3Vic3RyaW5nKGluZGV4KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcmVjb3JkTmFtZXM9KHJlY29yZCk9PlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4oLyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlY29yZCkuc29ydCgpLnJldmVyc2UoKSk7JGjNj19vbmNlLnJlY29yZE5hbWVzKHJlY29yZE5hbWVzKTtcbmhhcmRlbihyZWNvcmROYW1lcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZFZhbHVlcz0ocmVjb3JkLG5hbWVzKT0+XG5oYXJkZW4obmFtZXMubWFwKChuYW1lKT0+cmVjb3JkW25hbWVdKSk7JGjNj19vbmNlLnJlY29yZFZhbHVlcyhyZWNvcmRWYWx1ZXMpO1xuaGFyZGVuKHJlY29yZFZhbHVlcyk7XG5cbmNvbnN0IHplcm9lcz1BcnJheSgxNikuXG5maWxsKHVuZGVmaW5lZCkuXG5tYXAoKF8saSk9PicwJy5yZXBlYXQoaSkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgemVyb1BhZD0obixzaXplKT0+e1xuY29uc3QgblN0cj0gYCR7bn1gO1xuY29uc3QgZmlsbExlbj1zaXplLW5TdHIubGVuZ3RoO1xuaWYoZmlsbExlbj09PTApcmV0dXJuIG5TdHI7XG5hc3NlcnQoZmlsbExlbj4wJiZmaWxsTGVuPHplcm9lcy5sZW5ndGgpO1xucmV0dXJuIGAke3plcm9lc1tmaWxsTGVuXX0ke25TdHJ9YDtcbiB9OyRozY9fb25jZS56ZXJvUGFkKHplcm9QYWQpO1xuaGFyZGVuKHplcm9QYWQpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGFzTnVtYmVyPW5ldyBGbG9hdDY0QXJyYXkoMSk7XG5jb25zdCBhc0JpdHM9bmV3IEJpZ1VpbnQ2NEFycmF5KGFzTnVtYmVyLmJ1ZmZlcik7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbmNvbnN0IENhbm9uaWNhbE5hTkJpdHM9J2ZmZjgwMDAwMDAwMDAwMDAnO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmluYXJ5NjQ9KG4pPT57XG4vL1xuaWYoaXMobiwtMCkpe1xubj0wO1xuIH1lbHNlIGlmKGlzKG4sTmFOKSl7XG5yZXR1cm4gYGYke0Nhbm9uaWNhbE5hTkJpdHN9YDtcbiB9XG5hc051bWJlclswXT1uO1xubGV0IGJpdHM9YXNCaXRzWzBdO1xuaWYobjwwKXtcbmJpdHNePTB4ZmZmZmZmZmZmZmZmZmZmZm47XG4gfWVsc2V7XG5iaXRzXj0weDgwMDAwMDAwMDAwMDAwMDBuO1xuIH1cbnJldHVybiBgZiR7emVyb1BhZChiaXRzLnRvU3RyaW5nKDE2KSwxNil9YDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVCaW5hcnk2ND0oZW5jb2RlZCxza2lwPTApPT57XG5lbmNvZGVkLmNoYXJBdChza2lwKT09PSdmJ3x8RmFpbCBgRW5jb2RlZCBudW1iZXIgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IGJpdHM9QmlnSW50KCBgMHgke2dldFN1ZmZpeChlbmNvZGVkLHNraXArMSl9YCk7XG5pZihlbmNvZGVkLmNoYXJBdChza2lwKzEpPCc4Jyl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5hc0JpdHNbMF09Yml0cztcbmNvbnN0IHJlc3VsdD1hc051bWJlclswXTtcbiFpcyhyZXN1bHQsLTApfHxcbkZhaWwgYFVuZXhwZWN0ZWQgbmVnYXRpdmUgemVybzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVCaWdJbnQ9KG4pPT57XG5jb25zdCBhYnM9bjwwbj8tbjpuO1xuY29uc3QgbkRpZ2l0cz1hYnMudG9TdHJpbmcoKS5sZW5ndGg7XG5jb25zdCBsRGlnaXRzPW5EaWdpdHMudG9TdHJpbmcoKS5sZW5ndGg7XG5pZihuPDBuKXtcbnJldHVybiBgbiR7XG4vL1xuLy9cbicjJy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbigxMCoqbERpZ2l0cy1uRGlnaXRzKS50b1N0cmluZygpLnBhZFN0YXJ0KGxEaWdpdHMsJzAnKVxuIH06JHtcbi8vXG4oMTBuKipCaWdJbnQobkRpZ2l0cykrbikudG9TdHJpbmcoKS5wYWRTdGFydChuRGlnaXRzLCcwJylcbiB9YDtcbiB9ZWxzZXtcbnJldHVybiBgcCR7XG4vL1xuLy9cbid+Jy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbm5EaWdpdHNcbiB9OiR7XG4vL1xublxuIH1gO1xuIH1cbiB9O1xuXG5jb25zdCByQmlnSW50UGF5bG9hZD0vKFswLTldKykoOihbMC05XSskfCl8KS9zO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmlnSW50PShlbmNvZGVkKT0+e1xuY29uc3QgdHlwZVByZWZpeD1lbmNvZGVkLmNoYXJBdCgwKTsvL1xudHlwZVByZWZpeD09PSdwJ3x8XG50eXBlUHJlZml4PT09J24nfHxcbkZhaWwgYEVuY29kZWQgYmlnaW50IGV4cGVjdGVkOiAke2VuY29kZWR9YDtcblxuY29uc3R7XG5pbmRleDpsRGlnaXRzLFxuMTpzbkRpZ2l0cyxcbjI6dGFpbCxcbjM6ZGlnaXRzfT1cbmVuY29kZWQubWF0Y2gockJpZ0ludFBheWxvYWQpfHxGYWlsIGBEaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbnNuRGlnaXRzLmxlbmd0aD09PWxEaWdpdHN8fFxuRmFpbCBgVW5hcnktcHJlZml4ZWQgZGVjaW1hbCBkaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5sZXQgbkRpZ2l0cz1wYXJzZUludChzbkRpZ2l0cywxMCk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubkRpZ2l0cz0xMCoqLyogICAgICAgICAgICAgICAgICovbERpZ2l0cy1uRGlnaXRzO1xuIH1cblxudGFpbC5jaGFyQXQoMCk9PT0nOid8fEZhaWwgYFNlcGFyYXRvciBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5kaWdpdHMubGVuZ3RoPT09bkRpZ2l0c3x8XG5GYWlsIGBGaXhlZC1sZW5ndGggZGlnaXQgc2VxdWVuY2UgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG49QmlnSW50KGRpZ2l0cyk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubj0tKDEwbioqQmlnSW50KG5EaWdpdHMpLW4pO1xuIH1cblxucmV0dXJuIG47XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdHJpbmdFc2NhcGVzPUFycmF5KDB4MjIpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGNwKT0+e1xuc3dpdGNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApKXtcbmNhc2UnICc6XG5yZXR1cm4nIV8nO1xuY2FzZSchJzpcbnJldHVybichfCc7XG5kZWZhdWx0OlxucmV0dXJuIGAhJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKzB4MjEpfWA7fVxuXG4gfSk7XG5zdHJpbmdFc2NhcGVzWydeJy5jaGFyQ29kZUF0KDApXT0nX0AnO1xuc3RyaW5nRXNjYXBlc1snXycuY2hhckNvZGVBdCgwKV09J19fJztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeD0oc3RyKT0+XG5zdHIucmVwbGFjZSgvW1xcMC0hXl9dL2csKGNoKT0+c3RyaW5nRXNjYXBlc1tjaC5jaGFyQ29kZUF0KDApXSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT57XG5yZXR1cm4gZW5jb2RlZC5yZXBsYWNlKC8oW1xcMC0hX10pKC58XFxuKT8vZywoZXNjLHByZWZpeCxzdWZmaXgpPT57XG5zd2l0Y2goZXNjKXtcbmNhc2UnIV8nOlxucmV0dXJuJyAnO1xuY2FzZSchfCc6XG5yZXR1cm4nISc7XG5jYXNlJ19AJzpcbnJldHVybideJztcbmNhc2UnX18nOlxucmV0dXJuJ18nO1xuZGVmYXVsdDp7XG5jb25zdCBjaD0vKiAgICAgICAgICAgICAgICAgKi9zdWZmaXg7XG4vL1xuLy9cbnByZWZpeD09PSchJyYmc3VmZml4IT09dW5kZWZpbmVkJiZjaD49JyEnJiZjaDw9J0AnfHxcbkZhaWwgYGludmFsaWQgc3RyaW5nIGVzY2FwZTogJHtxKGVzYyl9YDtcbnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoLmNoYXJDb2RlQXQoMCktMHgyMSk7XG4gfX1cblxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeVN0cmluZ1N1ZmZpeD0oc3RyKT0+c3RyO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT5lbmNvZGVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ14nXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmNoYXJzLnB1c2goZW5jLCcgJyk7XG4gfVxucmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQ29tcGFjdEFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xubGV0IGRlcHRoPTA7XG4vL1xuLy9cbmxldCBuZXh0SW5kZXg9c2tpcCsxO1xubGV0IGN1cnJlbnRFbGVtZW50U3RhcnQ9c2tpcCsxO1xuZm9yKGNvbnN0ezA6Y2gsaW5kZXg6aX1vZiBlbmNvZGVkLm1hdGNoQWxsKC9bXFxeIF0vZykpe1xuY29uc3QgaW5kZXg9LyogICAgICAgICAgICAgICAgICovaTtcbmlmKGluZGV4PD1za2lwKXtcbmlmKGluZGV4PT09c2tpcCl7XG5jaD09PSdeJ3x8RmFpbCBgRW5jb2RlZCBhcnJheSBleHBlY3RlZDogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH1cbiB9ZWxzZSBpZihjaD09PSdeJyl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcHRoKz0xO1xuIH1lbHNle1xuLy9cbmlmKGluZGV4PT09bmV4dEluZGV4KXtcbi8vXG5kZXB0aC09MTtcbmRlcHRoPj0wfHxcbi8vXG5GYWlsIGB1bmV4cGVjdGVkIGFycmF5IGVsZW1lbnQgdGVybWluYXRvcjogJHtlbmNvZGVkLnNsaWNlKHNraXAsaW5kZXgrMil9YDtcbiB9XG5pZihkZXB0aD09PTApe1xuLy9cbmVsZW1lbnRzLnB1c2goXG5kZWNvZGVQYXNzYWJsZShlbmNvZGVkLnNsaWNlKGN1cnJlbnRFbGVtZW50U3RhcnQsaW5kZXgpKSk7XG5cbmN1cnJlbnRFbGVtZW50U3RhcnQ9aW5kZXgrMTtcbiB9XG4gfVxuLy9cbm5leHRJbmRleD1pbmRleCsxO1xuIH1cbmRlcHRoPT09MHx8RmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5uZXh0SW5kZXg9PT1lbmNvZGVkLmxlbmd0aHx8XG5GYWlsIGB1bnRlcm1pbmF0ZWQgYXJyYXkgZWxlbWVudDogJHtnZXRTdWZmaXgoXG5lbmNvZGVkLFxuY3VycmVudEVsZW1lbnRTdGFydClcbiB9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeUFycmF5PShhcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IGNoYXJzPVsnWyddO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpe1xuY29uc3QgZW5jPWVuY29kZVBhc3NhYmxlKGVsZW1lbnQpO1xuZm9yKGNvbnN0IGMgb2YgZW5jKXtcbmlmKGM9PT0nXFx1MDAwMCd8fGM9PT0nXFx1MDAwMScpe1xuY2hhcnMucHVzaCgnXFx1MDAwMScpO1xuIH1cbmNoYXJzLnB1c2goYyk7XG4gfVxuY2hhcnMucHVzaCgnXFx1MDAwMCcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUxlZ2FjeUFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xuY29uc3QgZWxlbUNoYXJzPVtdO1xuLy9cbi8vXG5sZXQgc3RpbGxUb1NraXA9c2tpcCsxO1xubGV0IGluRXNjYXBlPWZhbHNlO1xuZm9yKGNvbnN0IGMgb2YgZW5jb2RlZCl7XG5pZihzdGlsbFRvU2tpcD4wKXtcbnN0aWxsVG9Ta2lwLT0xO1xuaWYoc3RpbGxUb1NraXA9PT0wKXtcbmM9PT0nWyd8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoaW5Fc2NhcGUpe1xuYz09PSdcXHUwMDAwJ3x8XG5jPT09J1xcdTAwMDEnfHxcbkZhaWwgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIHUwMDAxIGVzY2FwZTogJHtjfWA7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDAnKXtcbmNvbnN0IGVuY29kZWRFbGVtZW50PWVsZW1DaGFycy5qb2luKCcnKTtcbmVsZW1DaGFycy5sZW5ndGg9MDtcbmNvbnN0IGVsZW1lbnQ9ZGVjb2RlUGFzc2FibGUoZW5jb2RlZEVsZW1lbnQpO1xuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDEnKXtcbmluRXNjYXBlPXRydWU7XG4vL1xuY29udGludWU7XG4gfWVsc2V7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9XG5pbkVzY2FwZT1mYWxzZTtcbiB9XG4haW5Fc2NhcGV8fEZhaWwgYHVuZXhwZWN0ZWQgZW5kIG9mIGVuY29kaW5nICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmVsZW1DaGFycy5sZW5ndGg9PT0wfHxcbkZhaWwgYGVuY29kaW5nIHRlcm1pbmF0ZWQgZWFybHk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlY29yZD0ocmVjb3JkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgbmFtZXM9cmVjb3JkTmFtZXMocmVjb3JkKTtcbmNvbnN0IHZhbHVlcz1yZWNvcmRWYWx1ZXMocmVjb3JkLG5hbWVzKTtcbnJldHVybiBgKCR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtuYW1lcyx2YWx1ZXNdKSxlbmNvZGVQYXNzYWJsZSl9YDtcbiB9O1xuXG5jb25zdCBkZWNvZGVSZWNvcmQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JygnKTtcbi8vXG4vL1xuY29uc3QgdW56aXBwZWRFbnRyaWVzPWRlY29kZUFycmF5KGVuY29kZWQsZGVjb2RlUGFzc2FibGUsc2tpcCsxKTtcbnVuemlwcGVkRW50cmllcy5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIGtleXMsdmFsdWVzIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W2tleXMsdmFsc109dW56aXBwZWRFbnRyaWVzO1xuXG5wYXNzU3R5bGVPZihrZXlzKT09PSdjb3B5QXJyYXknJiZcbnBhc3NTdHlsZU9mKHZhbHMpPT09J2NvcHlBcnJheScmJlxua2V5cy5sZW5ndGg9PT12YWxzLmxlbmd0aCYmXG5rZXlzLmV2ZXJ5KChrZXkpPT50eXBlb2Yga2V5PT09J3N0cmluZycpfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHJlY29yZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3QgbWFwRW50cmllcz1rZXlzLm1hcCgoa2V5LGkpPT5ba2V5LHZhbHNbaV1dKTtcbmNvbnN0IHJlY29yZD1oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cmllcykpO1xuYXNzZXJ0UmVjb3JkKHJlY29yZCwnZGVjb2RlZCByZWNvcmQnKTtcbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3QgZW5jb2RlVGFnZ2VkPSh0YWdnZWQsZW5jb2RlQXJyYXksZW5jb2RlUGFzc2FibGUpPT5cbiBgOiR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtnZXRUYWcodGFnZ2VkKSx0YWdnZWQucGF5bG9hZF0pLGVuY29kZVBhc3NhYmxlKX1gO1xuXG5jb25zdCBkZWNvZGVUYWdnZWQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JzonKTtcbi8vXG4vL1xuY29uc3QgdGFnZ2VkUGF5bG9hZD1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG50YWdnZWRQYXlsb2FkLmxlbmd0aD09PTJ8fFxuRmFpbCBgZXhwZWN0ZWQgdGFnLHBheWxvYWQgcGFpcjogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3RbdGFnLHBheWxvYWRdPXRhZ2dlZFBheWxvYWQ7XG5wYXNzU3R5bGVPZih0YWcpPT09J3N0cmluZyd8fFxuRmFpbCBgbm90IGEgdmFsaWQgdGFnZ2VkIGVuY29kaW5nOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVJlbW90YWJsZT0odW5zYWZlRW5jb2RlUmVtb3RhYmxlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPShyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUmVtb3RhYmxlKHIsaW5uZXJFbmNvZGUpO1xudHlwZW9mIGVuY29kaW5nPT09J3N0cmluZycmJmVuY29kaW5nLmNoYXJBdCgwKT09PSdyJ3x8XG5GYWlsIGBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiclwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUmVtb3RhYmxlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVSZW1vdGFibGU7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVByb21pc2U9KHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVQcm9taXNlPShwLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUHJvbWlzZShwLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nPyd8fFxuRmFpbCBgUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCI/XCI6ICR7ZW5jb2Rpbmd9YDtcbnZlcmlmeUVuY29kaW5nKGVuY29kaW5nLCdQcm9taXNlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVQcm9taXNlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVFcnJvcj0odW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVFcnJvcj0oZXJyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlRXJyb3IoZXJyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nISd8fFxuRmFpbCBgRXJyb3IgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiIVwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnRXJyb3InKTtcbnJldHVybiBlbmNvZGluZztcbiB9O1xucmV0dXJuIGVuY29kZUVycm9yO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRW5jb2RlPShlbmNvZGVTdHJpbmdTdWZmaXgsZW5jb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlOnVuc2FmZUVuY29kZVJlbW90YWJsZSxcbmVuY29kZVByb21pc2U6dW5zYWZlRW5jb2RlUHJvbWlzZSxcbmVuY29kZUVycm9yOnVuc2FmZUVuY29kZUVycm9yLFxudmVyaWZ5RW5jb2Rpbmc9KCk9PnsgfX09XG5vcHRpb25zO1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPW1ha2VFbmNvZGVSZW1vdGFibGUoXG51bnNhZmVFbmNvZGVSZW1vdGFibGUsXG52ZXJpZnlFbmNvZGluZyk7XG5cbmNvbnN0IGVuY29kZVByb21pc2U9bWFrZUVuY29kZVByb21pc2UodW5zYWZlRW5jb2RlUHJvbWlzZSx2ZXJpZnlFbmNvZGluZyk7XG5jb25zdCBlbmNvZGVFcnJvcj1tYWtlRW5jb2RlRXJyb3IodW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBpbm5lckVuY29kZT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBlbmNvZGVFcnJvcihwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzp7XG5yZXR1cm4ndic7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybid6JztcbiB9XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kZUJpbmFyeTY0KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xucmV0dXJuIGBzJHtlbmNvZGVTdHJpbmdTdWZmaXgocGFzc2FibGUpfWA7XG4gfVxuY2FzZSdib29sZWFuJzp7XG5yZXR1cm4gYGIke3Bhc3NhYmxlfWA7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybiBlbmNvZGVCaWdJbnQocGFzc2FibGUpO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGVuY29kZVByb21pc2UocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG4vL1xuY29uc3QgbmFtZT1uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbnJldHVybiBgeSR7ZW5jb2RlU3RyaW5nU3VmZml4KG5hbWUpfWA7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBlbmNvZGVBcnJheShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5yZXR1cm4gZW5jb2RlUmVjb3JkKHBhc3NhYmxlLGVuY29kZUFycmF5LGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJuIGVuY29kZVRhZ2dlZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBhICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbGxlY3Rpb24gcGFzc2FibGVgO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRW5jb2RlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBsaWJlcmFsRGVjb2RlcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgKi97XG5kZWNvZGVSZW1vdGFibGU6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWQsXG5kZWNvZGVQcm9taXNlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlRXJyb3I6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWR9O1xuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlSW5uZXJEZWNvZGU9KGRlY29kZVN0cmluZ1N1ZmZpeCxkZWNvZGVBcnJheSxvcHRpb25zKT0+e1xuY29uc3R7ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9PW9wdGlvbnM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5uZXJEZWNvZGU9KGVuY29kZWQsc2tpcD0wKT0+e1xuc3dpdGNoKGVuY29kZWQuY2hhckF0KHNraXApKXtcbmNhc2Undic6e1xucmV0dXJuIG51bGw7XG4gfVxuY2FzZSd6Jzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnZic6e1xucmV0dXJuIGRlY29kZUJpbmFyeTY0KGVuY29kZWQsc2tpcCk7XG4gfVxuY2FzZSdzJzp7XG5yZXR1cm4gZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xuIH1cbmNhc2UnYic6e1xuY29uc3Qgc3Vic3RyaW5nPWdldFN1ZmZpeChlbmNvZGVkLHNraXArMSk7XG5pZihzdWJzdHJpbmc9PT0ndHJ1ZScpe1xucmV0dXJuIHRydWU7XG4gfWVsc2UgaWYoc3Vic3RyaW5nPT09J2ZhbHNlJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxudGhyb3cgRmFpbCBgZXhwZWN0ZWQgZW5jb2RlZCBib29sZWFuIHRvIGJlIFwiYnRydWVcIiBvciBcImJmYWxzZVwiOiAke3N1YnN0cmluZ31gO1xuIH1cbmNhc2Unbic6XG5jYXNlJ3AnOntcbnJldHVybiBkZWNvZGVCaWdJbnQoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCkpO1xuIH1cbmNhc2Uncic6e1xucmV0dXJuIGRlY29kZVJlbW90YWJsZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSc/Jzp7XG5yZXR1cm4gZGVjb2RlUHJvbWlzZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSchJzp7XG5yZXR1cm4gZGVjb2RlRXJyb3IoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UneSc6e1xuLy9cbmNvbnN0IG5hbWU9ZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ1snOlxuY2FzZSdeJzp7XG4vL1xucmV0dXJuIGRlY29kZUFycmF5KGVuY29kZWQsaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZScoJzp7XG5yZXR1cm4gZGVjb2RlUmVjb3JkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZSc6Jzp7XG5yZXR1cm4gZGVjb2RlVGFnZ2VkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGRhdGFiYXNlIGtleTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRGVjb2RlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGFzc2FibGVLaXQ9KG9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZT0ocixfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cn1gLFxuZW5jb2RlUHJvbWlzZT0ocCxfKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3B9YCxcbmVuY29kZUVycm9yPShlcnIsXyk9PkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyfWAsXG5mb3JtYXQ9J2xlZ2FjeU9yZGVyZWQnLFxuXG5kZWNvZGVSZW1vdGFibGU9KGVuY29kaW5nLF8pPT5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlUHJvbWlzZT0oZW5jb2RpbmcsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlRXJyb3I9KGVuY29kaW5nLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWB9PVxub3B0aW9ucztcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbmNvZGVQYXNzYWJsZTtcbmNvbnN0IGVuY29kZU9wdGlvbnM9e2VuY29kZVJlbW90YWJsZSxlbmNvZGVQcm9taXNlLGVuY29kZUVycm9yLGZvcm1hdH07XG5pZihmb3JtYXQ9PT0nY29tcGFjdE9yZGVyZWQnKXtcbmNvbnN0IGxpYmVyYWxEZWNvZGU9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmxpYmVyYWxEZWNvZGVycyk7XG5cbi8qXG5cblxuXG4gICAgICovXG5jb25zdCB2ZXJpZnlFbmNvZGluZz0oZW5jb2RpbmcsbGFiZWwpPT57XG4hZW5jb2RpbmcubWF0Y2gockMwKXx8XG5GYWlsIGAke2IoXG5sYWJlbClcbiB9IGVuY29kaW5nIG11c3Qgbm90IGNvbnRhaW4gYSBDMCBjb250cm9sIGNoYXJhY3RlcjogJHtlbmNvZGluZ31gO1xuY29uc3QgZGVjb2RlZD1kZWNvZGVDb21wYWN0QXJyYXkoIGBediAke2VuY29kaW5nfSB2IGAsbGliZXJhbERlY29kZSk7XG5pc0FycmF5KGRlY29kZWQpJiZcbmRlY29kZWQubGVuZ3RoPT09MyYmXG5kZWNvZGVkWzBdPT09bnVsbCYmXG5kZWNvZGVkWzJdPT09bnVsbHx8XG5GYWlsIGAke2IobGFiZWwpfSBlbmNvZGluZyBtdXN0IGJlIGVtYmVkZGFibGU6ICR7ZW5jb2Rpbmd9YDtcbiB9O1xuY29uc3QgZW5jb2RlQ29tcGFjdD1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZW5jb2RlQ29tcGFjdEFycmF5LFxuey4uLmVuY29kZU9wdGlvbnMsdmVyaWZ5RW5jb2Rpbmd9KTtcblxuZW5jb2RlUGFzc2FibGU9KHBhc3NhYmxlKT0+IGB+JHtlbmNvZGVDb21wYWN0KHBhc3NhYmxlKX1gO1xuIH1lbHNlIGlmKGZvcm1hdD09PSdsZWdhY3lPcmRlcmVkJyl7XG5lbmNvZGVQYXNzYWJsZT1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5lbmNvZGVMZWdhY3lBcnJheSxcbmVuY29kZU9wdGlvbnMpO1xuXG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZm9ybWF0OiAke3EoZm9ybWF0KX1gO1xuIH1cblxuY29uc3QgZGVjb2RlT3B0aW9ucz17ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9O1xuY29uc3QgZGVjb2RlQ29tcGFjdD1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZGVjb2RlQ29tcGFjdEFycmF5LFxuZGVjb2RlT3B0aW9ucyk7XG5cbmNvbnN0IGRlY29kZUxlZ2FjeT1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5kZWNvZGVMZWdhY3lBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVQYXNzYWJsZT0oZW5jb2RlZCk9Pntcbi8vXG4vL1xuLy9cbmlmKGVuY29kZWQuY2hhckF0KDApPT09J34nKXtcbnJldHVybiBkZWNvZGVDb21wYWN0KGVuY29kZWQsMSk7XG4gfVxucmV0dXJuIGRlY29kZUxlZ2FjeShlbmNvZGVkKTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtlbmNvZGVQYXNzYWJsZSxkZWNvZGVQYXNzYWJsZX0pO1xuIH07JGjNj19vbmNlLm1ha2VQYXNzYWJsZUtpdChtYWtlUGFzc2FibGVLaXQpO1xuaGFyZGVuKG1ha2VQYXNzYWJsZUtpdCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVBhc3NhYmxlPShlbmNvZGVPcHRpb25zKT0+e1xuY29uc3R7ZW5jb2RlUGFzc2FibGV9PW1ha2VQYXNzYWJsZUtpdChlbmNvZGVPcHRpb25zKTtcbnJldHVybiBlbmNvZGVQYXNzYWJsZTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlUGFzc2FibGUobWFrZUVuY29kZVBhc3NhYmxlKTtcbmhhcmRlbihtYWtlRW5jb2RlUGFzc2FibGUpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVQYXNzYWJsZT0oZGVjb2RlT3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZGVjb2RlT3B0aW9ucyk7XG5yZXR1cm4gZGVjb2RlUGFzc2FibGU7XG4gfTskaM2PX29uY2UubWFrZURlY29kZVBhc3NhYmxlKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZURlY29kZVBhc3NhYmxlKTtcblxuY29uc3QgICAgICAgIGlzRW5jb2RlZFJlbW90YWJsZT0oZW5jb2RlZCk9PmVuY29kZWQuY2hhckF0KDApPT09J3InOyRozY9fb25jZS5pc0VuY29kZWRSZW1vdGFibGUoaXNFbmNvZGVkUmVtb3RhYmxlKTtcbmhhcmRlbihpc0VuY29kZWRSZW1vdGFibGUpO1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFzc1N0eWxlUHJlZml4ZXM9e1xuZXJyb3I6JyEnLFxuY29weVJlY29yZDonKCcsXG50YWdnZWQ6JzonLFxucHJvbWlzZTonPycsXG5jb3B5QXJyYXk6J1teJyxcbmJvb2xlYW46J2InLFxubnVtYmVyOidmJyxcbmJpZ2ludDonbnAnLFxucmVtb3RhYmxlOidyJyxcbnN0cmluZzoncycsXG5udWxsOid2JyxcbnN5bWJvbDoneScsXG4vL1xuLy9cbi8vXG51bmRlZmluZWQ6J3onfTskaM2PX29uY2UucGFzc1N0eWxlUHJlZml4ZXMocGFzc1N0eWxlUHJlZml4ZXMpO1xuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUHJlZml4ZXMsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUHJlZml4ZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVjb3JkTmFtZXMiOlsicmVjb3JkTmFtZXMiXSwicmVjb3JkVmFsdWVzIjpbInJlY29yZFZhbHVlcyJdLCJ6ZXJvUGFkIjpbInplcm9QYWQiXSwibWFrZVBhc3NhYmxlS2l0IjpbIm1ha2VQYXNzYWJsZUtpdCJdLCJtYWtlRW5jb2RlUGFzc2FibGUiOlsibWFrZUVuY29kZVBhc3NhYmxlIl0sIm1ha2VEZWNvZGVQYXNzYWJsZSI6WyJtYWtlRGVjb2RlUGFzc2FibGUiXSwiaXNFbmNvZGVkUmVtb3RhYmxlIjpbImlzRW5jb2RlZFJlbW90YWJsZSJdLCJwYXNzU3R5bGVQcmVmaXhlcyI6WyJwYXNzU3R5bGVQcmVmaXhlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABfnPAyUiIAAFIiAAArAAAAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL2VuY29kZVRvQ2FwRGF0YS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiUUNMQVNTIiwibWFrZURlY29kZUZyb21DYXBEYXRhIiwibWFrZUVuY29kZVRvQ2FwRGF0YSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGlzT2JqZWN0LGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxcbmRlZmluZVByb3BlcnRpZXMsXG5pcyxcbmVudHJpZXMsXG5mcm9tRW50cmllcyxcbmZyZWV6ZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBRQ0xBU1M9J0BxY2xhc3MnOyRozY9fb25jZS5RQ0xBU1MoUUNMQVNTKTtcblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgaGFzUUNsYXNzPShlbmNvZGVkKT0+aGFzT3duUHJvcGVydHlPZihlbmNvZGVkLFFDTEFTUyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHFjbGFzc01hdGNoZXM9KGVuY29kZWQscWNsYXNzKT0+XG5pc09iamVjdChlbmNvZGVkKSYmXG4haXNBcnJheShlbmNvZGVkKSYmXG5oYXNRQ2xhc3MoZW5jb2RlZCkmJlxuZW5jb2RlZFtRQ0xBU1NdPT09cWNsYXNzO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YT0ocmVtKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIpPT5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtlcnJ9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9DYXBEYXRhPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9ZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YSxcbmVuY29kZVByb21pc2VUb0NhcERhdGE9ZG9udEVuY29kZVByb21pc2VUb0NhcERhdGEsXG5lbmNvZGVFcnJvclRvQ2FwRGF0YT1kb250RW5jb2RlRXJyb3JUb0NhcERhdGF9PVxuZW5jb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvQ2FwRGF0YVJlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJue1tRQ0xBU1NdOid1bmRlZmluZWQnfTtcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJue1tRQ0xBU1NdOidOYU4nfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybntbUUNMQVNTXTonSW5maW5pdHknfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106Jy1JbmZpbml0eSd9O1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybntcbltRQ0xBU1NdOidiaWdpbnQnLFxuZGlnaXRzOlN0cmluZyhwYXNzYWJsZSl9O1xuXG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybntcbltRQ0xBU1NdOidzeW1ib2wnLFxubmFtZX07XG5cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmlmKGhhc093blByb3BlcnR5T2YocGFzc2FibGUsUUNMQVNTKSl7XG4vL1xuY29uc3R7W1FDTEFTU106cWNsYXNzVmFsdWUsLi4ucmVzdH09cGFzc2FibGU7XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PXtcbltRQ0xBU1NdOidoaWxiZXJ0Jyxcbm9yaWdpbmFsOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHFjbGFzc1ZhbHVlKX07XG5cbmlmKG93bktleXMocmVzdCkubGVuZ3RoPj0xKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJlc3VsdC5yZXN0PWVuY29kZVRvQ2FwRGF0YVJlY3VyKGZyZWV6ZShyZXN0KSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb0NhcERhdGFSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbltRQ0xBU1NdOid0YWdnZWQnLFxudGFnOmdldFRhZyhwYXNzYWJsZSksXG5wYXlsb2FkOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YShcbnBhc3NhYmxlLFxuZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuXG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ3Nsb3QnKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUylcbiB9ICR7cSgnc2xvdCcpfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVByb21pc2VUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MsXG4nc2xvdCcpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVFcnJvclRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cik7XG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ2Vycm9yJykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ2Vycm9yJylcbiB9OiAke2VuY29kZWR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvQ2FwRGF0YT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpKTtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9DYXBEYXRhKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9DYXBEYXRhKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShzbG90RW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSBvciBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7c2xvdEVuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0oZXJyb3JFbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlcnJvckVuY29kaW5nfWA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21DYXBEYXRhPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT1kb250RGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT1kb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YX09XG5kZWNvZGVPcHRpb25zO1xuXG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT09PWRlY29kZVByb21pc2VGcm9tQ2FwRGF0YXx8XG5GYWlsIGBBbiBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbiBmb3Igbm93OiBJZiBlaXRoZXIgZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEgb3IgZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhIGlzIHByb3ZpZGVkLCBib3RoIG11c3QgYmUgcHJvdmlkZWQgYW5kIHRoZXkgbXVzdCBiZSB0aGUgc2FtZTogJHtxKFxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEpXG4gfSB2cyAke3EoZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhKX1gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tQ2FwRGF0YT0oanNvbkVuY29kZWQpPT57XG5pZighaXNPYmplY3QoanNvbkVuY29kZWQpKXtcbi8vXG5yZXR1cm4ganNvbkVuY29kZWQ7XG4gfVxuaWYoaXNBcnJheShqc29uRW5jb2RlZCkpe1xucmV0dXJuIGpzb25FbmNvZGVkLm1hcCgoZW5jb2RlZFZhbCk9PmRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpKTtcbiB9ZWxzZSBpZihoYXNRQ2xhc3MoanNvbkVuY29kZWQpKXtcbmNvbnN0IHFjbGFzcz1qc29uRW5jb2RlZFtRQ0xBU1NdO1xudHlwZW9mIHFjbGFzcz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgJHtxKFFDTEFTUyl9IHR5cGVvZiAke3EodHlwZW9mIHFjbGFzcyl9YDtcbnN3aXRjaChxY2xhc3Mpe1xuLy9cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PWpzb25FbmNvZGVkO1xudHlwZW9mIGRpZ2l0cz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZGlnaXRzIHR5cGVvZiAke3EodHlwZW9mIGRpZ2l0cyl9YDtcbnJldHVybiBCaWdJbnQoZGlnaXRzKTtcbiB9XG5jYXNlJ0BAYXN5bmNJdGVyYXRvcic6e1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvcjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09anNvbkVuY29kZWQ7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09anNvbkVuY29kZWQ7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcsZGVjb2RlRnJvbUNhcERhdGEocGF5bG9hZCkpO1xuIH1cbmNhc2Unc2xvdCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlZD1kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGRlY29kZWQ7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZGVjb2RlZD1kZWNvZGVFcnJvckZyb21DYXBEYXRhKFxuanNvbkVuY29kZWQsXG5kZWNvZGVGcm9tQ2FwRGF0YSk7XG5cbmlmKHBhc3NTdHlsZU9mKGRlY29kZWQpPT09J2Vycm9yJyl7XG5yZXR1cm4gZGVjb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YSBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7ZGVjb2RlZH1gO1xuIH1cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09anNvbkVuY29kZWQ7XG5oYXNPd25Qcm9wZXJ0eU9mKGpzb25FbmNvZGVkLCdvcmlnaW5hbCcpfHxcbkZhaWwgYEludmFsaWQgSGlsYmVydCBIb3RlbCBlbmNvZGluZyAke2pzb25FbmNvZGVkfWA7XG4vL1xuY29uc3QgcmVzdWx0PXtbUUNMQVNTXTpkZWNvZGVGcm9tQ2FwRGF0YShvcmlnaW5hbCl9O1xuaWYoaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwncmVzdCcpKXtcbmNvbnN0IGlzTm9uRW1wdHlPYmplY3Q9XG50eXBlb2YgcmVzdD09PSdvYmplY3QnJiZcbnJlc3QhPT1udWxsJiZcbm93bktleXMocmVzdCkubGVuZ3RoPj0xO1xuaWYoIWlzTm9uRW1wdHlPYmplY3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyBtdXN0IGJlIGEgbm9uLWVtcHR5IG9iamVjdDogJHtyZXN0fWA7XG4gfVxuY29uc3QgcmVzdE9iaj1kZWNvZGVGcm9tQ2FwRGF0YShyZXN0KTtcbi8vXG4vL1xuLy9cbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RPYmosUUNMQVNTKXx8XG5GYWlsIGBSZXN0IG11c3Qgbm90IGNvbnRhaW4gaXRzIG93biBkZWZpbml0aW9uIG9mICR7cShRQ0xBU1MpfWA7XG5kZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHJlc3RPYmopKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG5jYXNlJ2liaWQnOntcbnRocm93IEZhaWwgYFRoZSBjYXBEYXRhIHByb3RvY29sIG5vIGxvbmdlciBzdXBwb3J0cyAke3EoUUNMQVNTKX0gJHtxKFxucWNsYXNzKVxuIH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1lbHNle1xuYXNzZXJ0KHR5cGVvZiBqc29uRW5jb2RlZD09PSdvYmplY3QnJiZqc29uRW5jb2RlZCE9PW51bGwpO1xuY29uc3QgZGVjb2RlRW50cnk9KFtuYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSAke3EobmFtZSl9IG9mICR7anNvbkVuY29kZWR9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbUNhcERhdGEoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGpzb25FbmNvZGVkKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbUNhcERhdGEpO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVGcm9tQ2FwRGF0YShtYWtlRGVjb2RlRnJvbUNhcERhdGEpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUUNMQVNTIjpbIlFDTEFTUyJdLCJtYWtlRW5jb2RlVG9DYXBEYXRhIjpbIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwibWFrZURlY29kZUZyb21DYXBEYXRhIjpbIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAPShurLiIAAC4iAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyIsIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtpcyxlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbmNvbnN0IEJBTkc9JyEnLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBEQVNIPSctJy5jaGFyQ29kZUF0KDApO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdGFydHNTcGVjaWFsPShlbmNvZGVkU3RyKT0+e1xuaWYoZW5jb2RlZFN0cj09PScnKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuY29uc3QgY29kZT1lbmNvZGVkU3RyLmNoYXJDb2RlQXQoMCk7XG4vL1xucmV0dXJuIEJBTkc8PWNvZGUmJmNvZGU8PURBU0g7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnRFbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtyZW19YDtcblxuY29uc3QgZG9udEVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbSk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwcm9tfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVFcnJvclRvU21hbGxjYXBzPShlcnIpPT5cbkZhaWwgYGVycm9yIG9iamVjdCB1bmV4cGVjdGVkOiAke3EoZXJyKX1gO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVUb1NtYWxsY2Fwcz0oZW5jb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHM9ZG9udEVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPWRvbnRFbmNvZGVQcm9taXNlVG9TbWFsbGNhcHMsXG5lbmNvZGVFcnJvclRvU21hbGxjYXBzPWRvbnRFbmNvZGVFcnJvclRvU21hbGxjYXBzfT1cbmVuY29kZU9wdGlvbnM7XG5cbmNvbnN0IGFzc2VydEVuY29kZWRFcnJvcj0oZW5jb2RpbmcpPT57XG50eXBlb2YgZW5jb2Rpbmc9PT0nb2JqZWN0JyYmaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI2Vycm9yJyl8fFxuRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgaGF2ZSBcIiNlcnJvclwiIHByb3BlcnR5OiAke3EoXG5lbmNvZGluZylcbiB9YDtcbi8vXG5jb25zdCBtZXNzYWdlPWVuY29kaW5nWycjZXJyb3InXTtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZycmJihcbiFzdGFydHNTcGVjaWFsKG1lc3NhZ2UpfHxtZXNzYWdlLmNoYXJBdCgwKT09PSchJyl8fFxuRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgaGF2ZSBzdHJpbmcgbWVzc2FnZTogJHtxKG1lc3NhZ2UpfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzUmVjdXI9KHBhc3NhYmxlKT0+e1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocGFzc2FibGUpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzp7XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZihzdGFydHNTcGVjaWFsKHBhc3NhYmxlKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBgISR7cGFzc2FibGV9YDtcbiB9XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4nI3VuZGVmaW5lZCc7XG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4ocGFzc2FibGUpKXtcbnJldHVybicjTmFOJztcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybicjSW5maW5pdHknO1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09LUluZmluaXR5KXtcbnJldHVybicjLUluZmluaXR5JztcbiB9XG4vL1xucmV0dXJuIGlzKHBhc3NhYmxlLC0wKT8wOnBhc3NhYmxlO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdCBzdHI9U3RyaW5nKHBhc3NhYmxlKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICovcGFzc2FibGU8MG4/c3RyOmArJHtzdHJ9YCk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybiBgJSR7bmFtZX1gO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgbmFtZXM9b3duS2V5cyhwYXNzYWJsZSkuc29ydCgpO1xucmV0dXJuIGZyb21FbnRyaWVzKFxubmFtZXMubWFwKChuYW1lKT0+W1xuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihuYW1lKSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGVbbmFtZV0pXSkpO1xuXG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJue1xuJyN0YWcnOmVuY29kZVRvU21hbGxjYXBzUmVjdXIoZ2V0VGFnKHBhc3NhYmxlKSksXG5wYXlsb2FkOmVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGUucGF5bG9hZCl9O1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyhcbnBhc3NhYmxlLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5cbmlmKHR5cGVvZiByZXN1bHQ9PT0nc3RyaW5nJyYmcmVzdWx0LmNoYXJBdCgwKT09PSckJyl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiRcIjogJHtyZXN1bHR9YDtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVQcm9taXNlVG9TbWFsbGNhcHMoXG5wYXNzYWJsZSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuXG5pZih0eXBlb2YgcmVzdWx0PT09J3N0cmluZycmJnJlc3VsdC5jaGFyQXQoMCk9PT0nJicpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCImXCI6ICR7cmVzdWx0fWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgcmVzdWx0PWVuY29kZUVycm9yVG9TbWFsbGNhcHMocGFzc2FibGUsZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5hc3NlcnRFbmNvZGVkRXJyb3IocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiBVbnJlY29nbml6ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5jb25zdCBlbmNvZGVUb1NtYWxsY2Fwcz0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHJlc3VsdD1oYXJkZW4oXG5lbmNvZGVFcnJvclRvU21hbGxjYXBzKHBhc3NhYmxlLGVuY29kZVRvU21hbGxjYXBzUmVjdXIpKTtcblxuYXNzZXJ0RW5jb2RlZEVycm9yKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnJldHVybiBoYXJkZW4oZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZSkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvU21hbGxjYXBzKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9TbWFsbGNhcHMobWFrZUVuY29kZVRvU21hbGxjYXBzKTtcbmhhcmRlbihtYWtlRW5jb2RlVG9TbWFsbGNhcHMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtxKGVuY29kaW5nKX1gO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9ZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9PVxuZGVjb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVjb2RlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT57XG5zd2l0Y2godHlwZW9mIGVuY29kaW5nKXtcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZighc3RhcnRzU3BlY2lhbChlbmNvZGluZykpe1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNvbnN0IGM9ZW5jb2RpbmcuY2hhckF0KDApO1xuc3dpdGNoKGMpe1xuY2FzZSchJzp7XG4vL1xucmV0dXJuIGVuY29kaW5nLnNsaWNlKDEpO1xuIH1cbmNhc2UnJSc6e1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShlbmNvZGluZy5zbGljZSgxKSk7XG4gfVxuY2FzZScjJzp7XG5zd2l0Y2goZW5jb2Rpbmcpe1xuY2FzZScjdW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnI05hTic6e1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJyNJbmZpbml0eSc6e1xucmV0dXJuIEluZmluaXR5O1xuIH1cbmNhc2UnIy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bmtub3duIGNvbnN0YW50IFwiJHtxKGVuY29kaW5nKX1cImAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1cbmNhc2UnKyc6XG5jYXNlJy0nOntcbnJldHVybiBCaWdJbnQoZW5jb2RpbmcpO1xuIH1cbmNhc2UnJCc6e1xuY29uc3QgcmVzdWx0PWRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG4vL1xuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdyZW1vdGFibGUnKXtcbkZhaWwgYGludGVybmFsOiBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhIHJlbW90YWJsZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNhc2UnJic6e1xuY29uc3QgcmVzdWx0PWRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdwcm9taXNlJyl7XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGEgcHJvbWlzZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgU3BlY2lhbCBjaGFyICR7cShcbmMpXG4gfSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTogJHtlbmNvZGluZ31gO1xuIH19XG5cbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoZW5jb2Rpbmc9PT1udWxsKXtcbnJldHVybiBlbmNvZGluZztcbiB9XG5cbmlmKGlzQXJyYXkoZW5jb2RpbmcpKXtcbnJldHVybiBlbmNvZGluZy5tYXAoKHZhbCk9PmRlY29kZUZyb21TbWFsbGNhcHModmFsKSk7XG4gfVxuXG5pZihoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjdGFnJykpe1xuY29uc3R7JyN0YWcnOnRhZyxwYXlsb2FkLC4uLnJlc3R9PWVuY29kaW5nO1xudHlwZW9mIHRhZz09PSdzdHJpbmcnfHxcbkZhaWwgYFZhbHVlIG9mIFwiI3RhZ1wiLCB0aGUgdGFnLCBtdXN0IGJlIGEgc3RyaW5nOiAke2VuY29kaW5nfWA7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgI3RhZyByZWNvcmQgdW5leHBlY3RlZCBwcm9wZXJ0aWVzOiAke3Eob3duS2V5cyhyZXN0KSl9YDtcbnJldHVybiBtYWtlVGFnZ2VkKFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyh0YWcpLFxuZGVjb2RlRnJvbVNtYWxsY2FwcyhwYXlsb2FkKSk7XG5cbiB9XG5cbmlmKGhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpKXtcbmNvbnN0IHJlc3VsdD1kZWNvZGVFcnJvckZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG5wYXNzU3R5bGVPZihyZXN1bHQpPT09J2Vycm9yJ3x8XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhbiBlcnJvcjogJHtyZXN1bHR9YDtcbnJldHVybiByZXN1bHQ7XG4gfVxuXG5jb25zdCBkZWNvZGVFbnRyeT0oW2VuY29kZWROYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIGVuY29kZWROYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke3EoXG5lbmNvZGVkTmFtZSlcbiB9IG9mICR7ZW5jb2Rpbmd9IG11c3QgYmUgYSBzdHJpbmdgO1xuZW5jb2RlZE5hbWUuY2hhckF0KDApIT09JyMnfHxcbkZhaWwgYFVucmVjb2duaXplZCByZWNvcmQgdHlwZSAke3EoZW5jb2RlZE5hbWUpfTogJHtlbmNvZGluZ31gO1xuY29uc3QgbmFtZT1kZWNvZGVGcm9tU21hbGxjYXBzKGVuY29kZWROYW1lKTtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRGVjb2RlZCBwcm9wZXJ0eSBuYW1lICR7bmFtZX0gZnJvbSAke2VuY29kaW5nfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnJldHVybltuYW1lLGRlY29kZUZyb21TbWFsbGNhcHMoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGVuY29kaW5nKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IHVucmVjb2duaXplZCBKU09OIHR5cGVvZiAke3EoXG50eXBlb2YgZW5jb2RpbmcpXG4gfTogJHtlbmNvZGluZ31gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xucmV0dXJuIGhhcmRlbihkZWNvZGVGcm9tU21hbGxjYXBzKTtcbiB9OyRozY9fb25jZS5tYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyhtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiOlsibWFrZUVuY29kZVRvU21hbGxjYXBzIl0sIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIjpbIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEULMv0QIwAAECMAACoAAABAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvbWFyc2hhbC1qdXN0aW4uanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0IiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIl0sImV4cG9ydHMiOlsiZGVjb2RlVG9KdXN0aW4iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTmF0LGdldEVycm9yQ29uc3RydWN0b3IsaXNPYmplY3QscGFzc2FibGVTeW1ib2xGb3JOYW1lLHEsWCxGYWlsLFFDTEFTUzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtbXCJRQ0xBU1NcIiwgWyRozY9fYSA9PiAoUUNMQVNTID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtzdHJpbmdpZnk6cXVvdGV9PUpTT047XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVllc0luZGVudGVyPSgpPT57XG5jb25zdCBzdHJpbmdzPVtdO1xubGV0IGxldmVsPTA7XG5sZXQgbmVlZFNwYWNlPWZhbHNlO1xuY29uc3QgbGluZT0oKT0+e1xubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaCgnXFxuJywnICAnLnJlcGVhdChsZXZlbCkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHtcbm9wZW46KG9wZW5CcmFja2V0KT0+e1xubGV2ZWwrPTE7XG5pZihuZWVkU3BhY2Upe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaChvcGVuQnJhY2tldCk7XG4gfSxcbmxpbmUsXG5uZXh0Oih0b2tlbik9PntcbmlmKG5lZWRTcGFjZSYmdG9rZW4hPT0nLCcpe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPXRydWU7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKHRva2VuKTtcbiB9LFxuY2xvc2U6KGNsb3NlQnJhY2tldCk9PntcbmFzc2VydChsZXZlbD49MSk7XG5sZXZlbC09MTtcbmxpbmUoKTtcbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+e1xuYXNzZXJ0LmVxdWFsKGxldmVsLDApO1xucmV0dXJuIHN0cmluZ3Muam9pbignJyk7XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZFBhaXJQYXR0ZXJuPS9eKD86XFx3XFx3fDw8fD4+fFxcK1xcK3wtLXw8IXwtPikkLztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZU5vSW5kZW50ZXI9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdzPVtdO1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PnN0cmluZ3MucHVzaChvcGVuQnJhY2tldCksXG5saW5lOigpPT5zdHJpbmdzLmxlbmd0aCxcbm5leHQ6KHRva2VuKT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEpe1xuY29uc3QgbGFzdD1zdHJpbmdzW3N0cmluZ3MubGVuZ3RoLTFdO1xuLy9cbmlmKGxhc3QubGVuZ3RoPj0xJiZ0b2tlbi5sZW5ndGg+PTEpe1xuY29uc3QgcGFpcj0gYCR7bGFzdFtsYXN0Lmxlbmd0aC0xXX0ke3Rva2VuWzBdfWA7XG5pZihiYWRQYWlyUGF0dGVybi50ZXN0KHBhaXIpKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbiB9XG4gfVxucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5pZihzdHJpbmdzLmxlbmd0aD49MSYmc3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXT09PScsJyl7XG5zdHJpbmdzLnBvcCgpO1xuIH1cbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+c3RyaW5ncy5qb2luKCcnKX0pO1xuXG4gfTtcblxuY29uc3QgaWRlbnRQYXR0ZXJuPS9eW2EtekEtWl1cXHcqJC87XG5oYXJkZW4oaWRlbnRQYXR0ZXJuKTtcbmNvbnN0IEF0QXRQcmVmaXhQYXR0ZXJuPS9eQEAoLiopJC87XG5oYXJkZW4oQXRBdFByZWZpeFBhdHRlcm4pO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZVRvSnVzdGluPShlbmNvZGluZyxzaG91bGRJbmRlbnQ9ZmFsc2Usc2xvdHM9W10pPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZT0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG5yZXR1cm47XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIHFjbGFzcyB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5hc3NlcnQoIWlzQXJyYXkocmF3VHJlZSkpO1xuc3dpdGNoKHJhd1RyZWVbJ0BxY2xhc3MnXSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG5yZXR1cm47XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm47XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbnJldHVybjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5jb25zdCBzeW09cGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuYXNzZXJ0LnR5cGVvZihzeW0sJ3N5bWJvbCcpO1xucmV0dXJuO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YodGFnLCdzdHJpbmcnKTtcbnByZXBhcmUocGF5bG9hZCk7XG5yZXR1cm47XG4gfVxuY2FzZSdzbG90Jzp7XG5jb25zdHtpbmRleCxpZmFjZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoaW5kZXgsJ251bWJlcicpO1xuTmF0KGluZGV4KTtcbmlmKGlmYWNlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoaWZhY2UsJ3N0cmluZycpO1xuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG4nb3JpZ2luYWwnaW4gcmF3VHJlZXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtyYXdUcmVlfWA7XG5wcmVwYXJlKG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuaWYodHlwZW9mIHJlc3QhPT0nb2JqZWN0Jyl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3RgO1xuIH1cbmlmKHJlc3Q9PT1udWxsKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBudWxsYDtcbiB9XG5pZihpc0FycmF5KHJlc3QpKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBhbiBhcnJheWA7XG4gfVxuaWYoUUNMQVNTIGluIHJlc3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyAke3Jlc3R9IG11c3Qgbm90IGNvbnRhaW4gJHtxKFFDTEFTUyl9YDtcbiB9XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnByZXBhcmUocmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdHtuYW1lLG1lc3NhZ2V9PXJhd1RyZWU7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBuYW1lKX1gO1xuIH1cbmdldEVycm9yQ29uc3RydWN0b3IobmFtZSkhPT11bmRlZmluZWR8fFxuRmFpbCBgTXVzdCBiZSB0aGUgbmFtZSBvZiBhbiBFcnJvciBjb25zdHJ1Y3RvciAke25hbWV9YDtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBlcnJvciBtZXNzYWdlIHR5cGVvZiAke3EodHlwZW9mIG1lc3NhZ2UpfWA7XG5yZXR1cm47XG4gfVxuXG5kZWZhdWx0OntcbmFzc2VydC5mYWlsKFggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xucHJlcGFyZShyYXdUcmVlW2ldKTtcbiB9XG4gfWVsc2V7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJhd1RyZWUpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbiB9XG5wcmVwYXJlKHJhd1RyZWVbbmFtZV0pO1xuIH1cbiB9XG4gfTtcblxuY29uc3QgbWFrZUluZGVudGVyPXNob3VsZEluZGVudD9tYWtlWWVzSW5kZW50ZXI6bWFrZU5vSW5kZW50ZXI7XG5sZXQgb3V0PW1ha2VJbmRlbnRlcigpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlY29kZT0ocmF3VHJlZSk9Pntcbi8vXG5yZXR1cm4gcmVjdXIocmF3VHJlZSk7XG4gfTtcblxuY29uc3QgZGVjb2RlUHJvcGVydHk9KG5hbWUsdmFsdWUpPT57XG5vdXQubGluZSgpO1xuaWYobmFtZT09PSdfX3Byb3RvX18nKXtcbi8vXG4vL1xuLy9cbi8vXG5vdXQubmV4dCggYFtcIl9fcHJvdG9fX1wiXTpgKTtcbiB9ZWxzZSBpZihpZGVudFBhdHRlcm4udGVzdChuYW1lKSl7XG5vdXQubmV4dCggYCR7bmFtZX06YCk7XG4gfWVsc2V7XG5vdXQubmV4dCggYCR7cXVvdGUobmFtZSl9OmApO1xuIH1cbmRlY29kZSh2YWx1ZSk7XG5vdXQubmV4dCgnLCcpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCByZWN1cj0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG4vL1xucmV0dXJuIG91dC5uZXh0KHF1b3RlKHJhd1RyZWUpKTtcbiB9XG4vL1xuYXNzZXJ0LnR5cGVvZihyYXdUcmVlLCdvYmplY3QnKTtcbmFzc2VydChyYXdUcmVlIT09bnVsbCk7XG5pZihRQ0xBU1MgaW4gcmF3VHJlZSl7XG5jb25zdCBxY2xhc3M9cmF3VHJlZVtRQ0xBU1NdO1xuYXNzZXJ0LnR5cGVvZihxY2xhc3MsJ3N0cmluZycpO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbi8vXG4vL1xuLy9cbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuLy9cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnTmFOJzpcbmNhc2UnSW5maW5pdHknOlxuY2FzZSctSW5maW5pdHknOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQocWNsYXNzKTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihkaWdpdHMsJ3N0cmluZycpO1xucmV0dXJuIG91dC5uZXh0KCBgJHtCaWdJbnQoZGlnaXRzKX1uYCk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQoJ1N5bWJvbC5hc3luY0l0ZXJhdG9yJyk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbmNvbnN0IHJlZ2lzdGVyZWROYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKHJlZ2lzdGVyZWROYW1lPT09dW5kZWZpbmVkKXtcbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5hc3NlcnQobWF0Y2ghPT1udWxsKTtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmFzc2VydChTeW1ib2xbc3VmZml4XT09PXN5bSk7XG5hc3NlcnQoaWRlbnRQYXR0ZXJuLnRlc3Qoc3VmZml4KSk7XG5yZXR1cm4gb3V0Lm5leHQoIGBTeW1ib2wuJHtzdWZmaXh9YCk7XG4gfVxucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLmZvcigke3F1b3RlKHJlZ2lzdGVyZWROYW1lKX0pYCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0e3RhZyxwYXlsb2FkfT1yYXdUcmVlO1xub3V0Lm5leHQoIGBtYWtlVGFnZ2VkKCR7cXVvdGUodGFnKX0sYCk7XG5kZWNvZGUocGF5bG9hZCk7XG5yZXR1cm4gb3V0Lm5leHQoJyknKTtcbiB9XG5cbmNhc2Unc2xvdCc6e1xubGV0e2lmYWNlfT1yYXdUcmVlO1xuY29uc3QgaW5kZXg9TnVtYmVyKE5hdChyYXdUcmVlLmluZGV4KSk7XG5jb25zdCBuZXN0ZWRSZW5kZXI9KGFyZyk9PntcbmNvbnN0IG9sZE91dD1vdXQ7XG50cnl7XG5vdXQ9bWFrZU5vSW5kZW50ZXIoKTtcbmRlY29kZShhcmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfWZpbmFsbHl7XG5vdXQ9b2xkT3V0O1xuIH1cbiB9O1xuaWYoaW5kZXg8c2xvdHMubGVuZ3RoKXtcbmNvbnN0IHNsb3Q9bmVzdGVkUmVuZGVyKHNsb3RzW2luZGV4XSk7XG5pZihpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gb3V0Lm5leHQoIGBzbG90VG9WYWwoJHtzbG90fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0sJHtpZmFjZX0pYCk7XG4gfWVsc2UgaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSwke2lmYWNlfSlgKTtcbiB9XG5cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09cmF3VHJlZTtcbm91dC5vcGVuKCd7Jyk7XG5kZWNvZGVQcm9wZXJ0eShRQ0xBU1Msb3JpZ2luYWwpO1xuaWYoJ3Jlc3QnaW4gcmF3VHJlZSl7XG5hc3NlcnQudHlwZW9mKHJlc3QsJ29iamVjdCcpO1xuYXNzZXJ0KHJlc3QhPT1udWxsKTtcbmNvbnN0IG5hbWVzPW93bktleXMocmVzdCk7XG5mb3IoY29uc3QgbmFtZSBvZiBuYW1lcyl7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYFByb3BlcnR5IG5hbWUgJHtxKFxubmFtZSlcbiB9IG9mICR7cmVzdH0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxuZGVjb2RlUHJvcGVydHkobmFtZSxyZXN0W25hbWVdKTtcbiB9XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cblxuY2FzZSdlcnJvcic6e1xuY29uc3R7XG5uYW1lLFxubWVzc2FnZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWR9PVxucmF3VHJlZTtcbmNhdXNlPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGNhdXNlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xubmFtZSE9PSBgQWdncmVnYXRlRXJyb3JgfHxcbkZhaWwgYEFnZ3JlZ2F0ZUVycm9yIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xuZXJyb3JzPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGVycm9ycyBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbnJldHVybiBvdXQubmV4dCggYCR7bmFtZX0oJHtxdW90ZShtZXNzYWdlKX0pYCk7XG4gfVxuXG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmlmKGxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCdbXScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ1snKTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xub3V0LmxpbmUoKTtcbmRlY29kZShyYXdUcmVlW2ldKTtcbm91dC5uZXh0KCcsJyk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnXScpO1xuIH1cbiB9ZWxzZXtcbi8vXG4vL1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJhd1RyZWUpO1xuaWYobmFtZXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gb3V0Lm5leHQoJ3t9Jyk7XG4gfWVsc2V7XG5vdXQub3BlbigneycpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuZGVjb2RlUHJvcGVydHkobmFtZSxyYXdUcmVlW25hbWVdKTtcbiB9XG5yZXR1cm4gb3V0LmNsb3NlKCd9Jyk7XG4gfVxuIH1cbiB9O1xucHJlcGFyZShlbmNvZGluZyk7XG5kZWNvZGUoZW5jb2RpbmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfTskaM2PX29uY2UuZGVjb2RlVG9KdXN0aW4oZGVjb2RlVG9KdXN0aW4pO1xuaGFyZGVuKGRlY29kZVRvSnVzdGluKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlY29kZVRvSnVzdGluIjpbImRlY29kZVRvSnVzdGluIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEQSpudcBgAAXAYAAC0AAABAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9tYXJzaGFsLmpzIl0sImV4cG9ydHMiOlsicGFyc2UiLCJzdHJpbmdpZnkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlTWFyc2hhbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkb05vdENvbnZlcnRWYWxUb1Nsb3Q9KHZhbCk9PlxuRmFpbCBgTWFyc2hhbCdzIHN0cmluZ2lmeSByZWplY3RzIHByZXNlbmNlcyBhbmQgcHJvbWlzZXMgJHt2YWx9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkb05vdENvbnZlcnRTbG90VG9WYWw9KHNsb3QsX2lmYWNlKT0+XG5GYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90cyAke3Nsb3R9YDtcblxuY29uc3QgYmFkQXJyYXlIYW5kbGVyPWhhcmRlbih7XG5nZXQ6KF90YXJnZXQsbmFtZSxfcmVjZWl2ZXIpPT57XG5pZihuYW1lPT09J2xlbmd0aCcpe1xucmV0dXJuIDA7XG4gfVxuLy9cbnRocm93IEZhaWwgYE1hcnNoYWwncyBwYXJzZSBtdXN0IG5vdCBlbmNvZGUgYW55IHNsb3QgcG9zaXRpb25zICR7bmFtZX1gO1xuIH19KTtcblxuXG5jb25zdCBiYWRBcnJheT1oYXJkZW4obmV3IFByb3h5KGhhcmRlbihbXSksYmFkQXJyYXlIYW5kbGVyKSk7XG5cbmNvbnN0e3NlcmlhbGl6ZSx1bnNlcmlhbGl6ZX09bWFrZU1hcnNoYWwoXG5kb05vdENvbnZlcnRWYWxUb1Nsb3QsXG5kb05vdENvbnZlcnRTbG90VG9WYWwsXG57XG5lcnJvclRhZ2dpbmc6J29mZicsXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdDonY2FwZGF0YSd9KTtcblxuXG5cbi8qXG5cblxuICovXG5jb25zdCBzdHJpbmdpZnk9KHZhbCk9PnNlcmlhbGl6ZSh2YWwpLmJvZHk7JGjNj19vbmNlLnN0cmluZ2lmeShzdHJpbmdpZnkpO1xuaGFyZGVuKHN0cmluZ2lmeSk7XG5cbi8qXG5cblxuICovXG5jb25zdCBwYXJzZT0oc3RyKT0+XG51bnNlcmlhbGl6ZShcbmhhcmRlbih7XG5ib2R5OnN0cixcbnNsb3RzOmJhZEFycmF5fSkpOyRozY9fb25jZS5wYXJzZShwYXJzZSk7XG5cblxuaGFyZGVuKHBhcnNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN0cmluZ2lmeSI6WyJzdHJpbmdpZnkiXSwicGFyc2UiOlsicGFyc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKcNSTionAAAqJwAAIwAAAEBlbmRvL21hcnNoYWwtdjEuNi4xL3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIiwiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXJzaGFsIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxhc3NlcnRQYXNzYWJsZSxnZXRJbnRlcmZhY2VPZixnZXRFcnJvckNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5T2YsdG9QYXNzYWJsZUVycm9yLFgsRmFpbCxxLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLG9iamVjdE1hcCxRQ0xBU1MsbWFrZUVuY29kZVRvQ2FwRGF0YSxtYWtlRGVjb2RlRnJvbUNhcERhdGEsbWFrZURlY29kZUZyb21TbWFsbGNhcHMsbWFrZUVuY29kZVRvU21hbGxjYXBzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJ0b1Bhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAodG9QYXNzYWJsZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiLi9lbmNvZGVUb0NhcERhdGEuanNcIiwgW1tcIlFDTEFTU1wiLCBbJGjNj19hID0+IChRQ0xBU1MgPSAkaM2PX2EpXV0sW1wibWFrZUVuY29kZVRvQ2FwRGF0YVwiLCBbJGjNj19hID0+IChtYWtlRW5jb2RlVG9DYXBEYXRhID0gJGjNj19hKV1dLFtcIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YVwiLCBbJGjNj19hID0+IChtYWtlRGVjb2RlRnJvbUNhcERhdGEgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVRvU21hbGxjYXBzLmpzXCIsIFtbXCJtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwc1wiLCBbJGjNj19hID0+IChtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyA9ICRozY9fYSldXSxbXCJtYWtlRW5jb2RlVG9TbWFsbGNhcHNcIiwgWyRozY9fYSA9PiAobWFrZUVuY29kZVRvU21hbGxjYXBzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e2RlZmluZVByb3BlcnRpZXN9PU9iamVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0VmFsVG9TbG90Rm49KHgpPT54O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0U2xvdFRvVmFsRm49KHgsXyk9Png7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXJzaGFsPShcbmNvbnZlcnRWYWxUb1Nsb3Q9ZGVmYXVsdFZhbFRvU2xvdEZuLFxuY29udmVydFNsb3RUb1ZhbD1kZWZhdWx0U2xvdFRvVmFsRm4sXG57XG5lcnJvclRhZ2dpbmc9J29uJyxcbm1hcnNoYWxOYW1lPSdhbm9uLW1hcnNoYWwnLFxuLy9cbi8vXG5lcnJvcklkTnVtPTEwMDAwLFxuLy9cbi8vXG5tYXJzaGFsU2F2ZUVycm9yPShlcnIpPT5cbmNvbnNvbGUubG9nKCdUZW1wb3JhcnkgbG9nZ2luZyBvZiBzZW50IGVycm9yJyxlcnIpLFxuLy9cbi8vXG5zZXJpYWxpemVCb2R5Rm9ybWF0PSdjYXBkYXRhJ309XG57fSk9Plxue1xuYXNzZXJ0LnR5cGVvZihtYXJzaGFsTmFtZSwnc3RyaW5nJyk7XG5lcnJvclRhZ2dpbmc9PT0nb24nfHxcbmVycm9yVGFnZ2luZz09PSdvZmYnfHxcbkZhaWwgYFRoZSBlcnJvclRhZ2dpbmcgb3B0aW9uIGNhbiBvbmx5IGJlIFwib25cIiBvciBcIm9mZlwiICR7ZXJyb3JUYWdnaW5nfWA7XG5jb25zdCBuZXh0RXJyb3JJZD0oKT0+e1xuZXJyb3JJZE51bSs9MTtcbnJldHVybiBgZXJyb3I6JHttYXJzaGFsTmFtZX0jJHtlcnJvcklkTnVtfWA7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IHRvQ2FwRGF0YT0ocm9vdCk9PntcbmNvbnN0IHNsb3RzPVtdO1xuLy9cbmNvbnN0IHNsb3RNYXA9bmV3IE1hcCgpO1xuXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RDb21tb249KHBhc3NhYmxlKT0+e1xubGV0IGluZGV4PXNsb3RNYXAuZ2V0KHBhc3NhYmxlKTtcbmlmKGluZGV4IT09dW5kZWZpbmVkKXtcbi8vXG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDp0cnVlfSk7XG4gfVxuXG5pbmRleD1zbG90cy5sZW5ndGg7XG5jb25zdCBzbG90PWNvbnZlcnRWYWxUb1Nsb3QocGFzc2FibGUpO1xuc2xvdHMucHVzaChzbG90KTtcbnNsb3RNYXAuc2V0KHBhc3NhYmxlLGluZGV4KTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDpmYWxzZX0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAqL1xuY29uc3QgZW5jb2RlRXJyb3JDb21tb249KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IG1lc3NhZ2U9ZW5jb2RlUmVjdXIoIGAke2Vyci5tZXNzYWdlfWApO1xuYXNzZXJ0LnR5cGVvZihtZXNzYWdlLCdzdHJpbmcnKTtcbmNvbnN0IG5hbWU9ZW5jb2RlUmVjdXIoIGAke2Vyci5uYW1lfWApO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbi8vXG4vL1xuLy9cbmlmKGVycm9yVGFnZ2luZz09PSdvbicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGVycm9ySWQ9ZW5jb2RlUmVjdXIobmV4dEVycm9ySWQoKSk7XG5hc3NlcnQudHlwZW9mKGVycm9ySWQsJ3N0cmluZycpO1xuYW5ub3RhdGVFcnJvcihlcnIsWCBgU2VudCBhcyAke2Vycm9ySWR9YCk7XG5tYXJzaGFsU2F2ZUVycm9yKGVycik7XG5yZXR1cm4gaGFyZGVuKHtlcnJvcklkLG1lc3NhZ2UsbmFtZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7bWVzc2FnZSxuYW1lfSk7XG4gfVxuIH07XG5cbmlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nY2FwZGF0YScpe1xuLypcblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvQ2FwRGF0YT0ocGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuaWYocmVwZWF0PT09dHJ1ZXx8aWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGluZGV4fSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonc2xvdCcsaWZhY2UsaW5kZXh9KTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9KHZhbCxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEodmFsLGdldEludGVyZmFjZU9mKHZhbCkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvQ2FwRGF0YShwcm9taXNlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBlcnJEYXRhPWVuY29kZUVycm9yQ29tbW9uKGVycixlbmNvZGVSZWN1cik7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonZXJyb3InLC4uLmVyckRhdGF9KTtcbiB9O1xuXG5jb25zdCBlbmNvZGVUb0NhcERhdGE9bWFrZUVuY29kZVRvQ2FwRGF0YSh7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGEsXG5lbmNvZGVQcm9taXNlVG9DYXBEYXRhLFxuZW5jb2RlRXJyb3JUb0NhcERhdGF9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvQ2FwRGF0YShyb290KTtcbmNvbnN0IGJvZHk9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5yZXR1cm4gaGFyZGVuKHtcbmJvZHksXG5zbG90c30pO1xuXG4gfWVsc2UgaWYoc2VyaWFsaXplQm9keUZvcm1hdD09PSdzbWFsbGNhcHMnKXtcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvU21hbGxjYXBzPShwcmVmaXgscGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuLy9cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH1gO1xuIH1cbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH0uJHtpZmFjZX1gO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPShyZW1vdGFibGUsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9TbWFsbGNhcHMoJyQnLHJlbW90YWJsZSxnZXRJbnRlcmZhY2VPZihyZW1vdGFibGUpKTtcblxuY29uc3QgZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCcmJyxwcm9taXNlKTtcblxuY29uc3QgZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xuY29uc3R7bWVzc2FnZSwuLi5yZXN0fT1lcnJEYXRhO1xucmV0dXJuIGhhcmRlbih7JyNlcnJvcic6bWVzc2FnZSwuLi5yZXN0fSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9bWFrZUVuY29kZVRvU21hbGxjYXBzKHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwc30pO1xuXG5cbmNvbnN0IGVuY29kZWQ9ZW5jb2RlVG9TbWFsbGNhcHMocm9vdCk7XG5jb25zdCBzbWFsbGNhcHNCb2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG4vL1xuLy9cbmJvZHk6IGAjJHtzbWFsbGNhcHNCb2R5fWAsXG5zbG90c30pO1xuXG4gfWVsc2V7XG4vL1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZUJvZHlGb3JtYXQ6ICR7cShzZXJpYWxpemVCb2R5Rm9ybWF0KX1gO1xuIH1cbiB9O1xuXG5jb25zdCBtYWtlRnVsbFJldml2ZT0oc2xvdHMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsTWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVTbG90Q29tbW9uPShzbG90RGF0YSk9PntcbmNvbnN0e2lmYWNlPXVuZGVmaW5lZCxpbmRleCwuLi5yZXN0fT1zbG90RGF0YTtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgc2xvdCBwcm9wZXJ0aWVzICR7cShvd25LZXlzKHJlc3QpKX1gO1xuY29uc3QgZXh0YW50PXZhbE1hcC5nZXQoaW5kZXgpO1xuaWYoZXh0YW50KXtcbnJldHVybiBleHRhbnQ7XG4gfVxuLy9cbi8vXG5jb25zdCBzbG90PXNsb3RzW051bWJlcihOYXQoaW5kZXgpKV07XG5jb25zdCB2YWw9Y29udmVydFNsb3RUb1ZhbChzbG90LGlmYWNlKTtcbnZhbE1hcC5zZXQoaW5kZXgsdmFsKTtcbnJldHVybiB2YWw7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGRlY29kZUVycm9yQ29tbW9uPShlcnJEYXRhLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7XG5lcnJvcklkPXVuZGVmaW5lZCxcbm1lc3NhZ2UsXG5uYW1lLFxuY2F1c2U9dW5kZWZpbmVkLFxuZXJyb3JzPXVuZGVmaW5lZCxcbi4uLnJlc3R9PVxuZXJyRGF0YTtcbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBkTmFtZT1kZWNvZGVSZWN1cihuYW1lKTtcbmNvbnN0IGRNZXNzYWdlPWRlY29kZVJlY3VyKG1lc3NhZ2UpO1xuLy9cbmNvbnN0IGRFcnJvcklkPS8qICAgICAgICAgICAgICAgICAqL2Vycm9ySWQmJmRlY29kZVJlY3VyKGVycm9ySWQpO1xuaWYodHlwZW9mIGROYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgaW52YWxpZCBlcnJvciBuYW1lIHR5cGVvZiAke3EodHlwZW9mIGROYW1lKX1gO1xuIH1cbmlmKHR5cGVvZiBkTWVzc2FnZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBkTWVzc2FnZSl9YDtcbiB9XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKGROYW1lKXx8RXJyb3I7XG5jb25zdCBlcnJvck5hbWU9XG5kRXJyb3JJZD09PXVuZGVmaW5lZD9cbiBgUmVtb3RlJHtlcnJDb25zdHJ1Y3Rvci5uYW1lfWA6XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX0oJHtkRXJyb3JJZH0pYDtcbmNvbnN0IG9wdGlvbnM9e1xuZXJyb3JOYW1lLFxuc2FuaXRpemU6ZmFsc2V9O1xuXG5pZihjYXVzZSl7XG5vcHRpb25zLmNhdXNlPWRlY29kZVJlY3VyKGNhdXNlKTtcbiB9XG5pZihlcnJvcnMpe1xub3B0aW9ucy5lcnJvcnM9ZGVjb2RlUmVjdXIoZXJyb3JzKTtcbiB9XG5jb25zdCByYXdFcnJvcj1tYWtlRXJyb3IoZE1lc3NhZ2UsZXJyQ29uc3RydWN0b3Isb3B0aW9ucyk7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVzY3M9b2JqZWN0TWFwKHJlc3QsKGRhdGEpPT4oe1xudmFsdWU6ZGVjb2RlUmVjdXIoZGF0YSksXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KSk7XG5cbmRlZmluZVByb3BlcnRpZXMocmF3RXJyb3IsZGVzY3MpO1xuaGFyZGVuKHJhd0Vycm9yKTtcbnJldHVybiB0b1Bhc3NhYmxlRXJyb3IocmF3RXJyb3IpO1xuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGE9KHJhd1RyZWUsX2RlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5zbG90RGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHNsb3REYXRhKTtcbiB9O1xuXG5jb25zdCBkZWNvZGVFcnJvckZyb21DYXBEYXRhPShyYXdUcmVlLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5lcnJEYXRhfT1yYXdUcmVlO1xucmV0dXJuIGRlY29kZUVycm9yQ29tbW9uKGVyckRhdGEsZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21DYXBEYXRhPW1ha2VEZWNvZGVGcm9tQ2FwRGF0YSh7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZVByb21pc2VGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGF9KTtcblxuXG5jb25zdCBtYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHM9KHByZWZpeCk9Pntcbi8qXG5cblxuXG4gICAgICAgKi9cbnJldHVybihzdHJpbmdFbmNvZGluZyxfZGVjb2RlUmVjdXIpPT57XG5hc3NlcnQoc3RyaW5nRW5jb2RpbmcuY2hhckF0KDApPT09cHJlZml4KTtcbi8vXG5jb25zdCBpPXN0cmluZ0VuY29kaW5nLmluZGV4T2YoJy4nKTtcbmNvbnN0IGluZGV4PU51bWJlcihzdHJpbmdFbmNvZGluZy5zbGljZSgxLGk8MD91bmRlZmluZWQ6aSkpO1xuLy9cbmNvbnN0IGlmYWNlPWk8MD91bmRlZmluZWQ6c3RyaW5nRW5jb2Rpbmcuc2xpY2UoaSsxKTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHtpZmFjZSxpbmRleH0pO1xuIH07XG4gfTtcbmNvbnN0IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCckJyk7XG5jb25zdCBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1tYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHMoJyYnKTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyxkZWNvZGVSZWN1cik9PntcbmNvbnN0eycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdEVyckRhdGF9PWVuY29kaW5nO1xuIWhhc093blByb3BlcnR5T2YocmVzdEVyckRhdGEsJ21lc3NhZ2UnKXx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgZXJyb3IgcHJvcGVydHkgJHtxKCdtZXNzYWdlJyl9YDtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbih7bWVzc2FnZSwuLi5yZXN0RXJyRGF0YX0sZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZUZyb21TbWFsbGNhcHMoe1xuLy9cbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG4vL1xuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtyZXZpdmVGcm9tQ2FwRGF0YSxyZXZpdmVGcm9tU21hbGxjYXBzfSk7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPShkYXRhKT0+e1xuY29uc3R7Ym9keSxzbG90c309ZGF0YTtcbnR5cGVvZiBib2R5PT09J3N0cmluZyd8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLmJvZHkgaXMgJHtib2R5fSwgbm90IHN0cmluZylgO1xuaXNBcnJheShkYXRhLnNsb3RzKXx8XG5GYWlsIGB1bnNlcmlhbGl6ZSgpIGdpdmVuIG5vbi1jYXBkYXRhICguc2xvdHMgYXJlIG5vdCBBcnJheSlgO1xuY29uc3R7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc309bWFrZUZ1bGxSZXZpdmUoc2xvdHMpO1xubGV0IHJlc3VsdDtcbi8vXG5pZihib2R5LmNoYXJBdCgwKT09PScjJyl7XG5jb25zdCBzbWFsbGNhcHNCb2R5PWJvZHkuc2xpY2UoMSk7XG5jb25zdCBlbmNvZGluZz1oYXJkZW4oSlNPTi5wYXJzZShzbWFsbGNhcHNCb2R5KSk7XG5yZXN1bHQ9aGFyZGVuKHJldml2ZUZyb21TbWFsbGNhcHMoZW5jb2RpbmcpKTtcbiB9ZWxzZXtcbmNvbnN0IHJhd1RyZWU9aGFyZGVuKEpTT04ucGFyc2UoYm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tQ2FwRGF0YShyYXdUcmVlKSk7XG4gfVxuLy9cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUocmVzdWx0KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9yZXN1bHQpO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xudG9DYXBEYXRhLFxuZnJvbUNhcERhdGEsXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuc2VyaWFsaXplOnRvQ2FwRGF0YSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVuc2VyaWFsaXplOmZyb21DYXBEYXRhfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTWFyc2hhbChtYWtlTWFyc2hhbCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFyc2hhbCI6WyJtYWtlTWFyc2hhbCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC7402JnCcAAJwnAAAlAAAAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL3JhbmtPcmRlci5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiLi9lbmNvZGVQYXNzYWJsZS5qcyJdLCJleHBvcnRzIjpbIkZ1bGxSYW5rQ292ZXIiLCJhc3NlcnRSYW5rU29ydGVkIiwiY29tcGFyYXRvck1pcnJvckltYWdlIiwiY29tcGFyZUFudGlSYW5rIiwiY29tcGFyZVJhbmsiLCJjb3ZlcmVkRW50cmllcyIsImdldEluZGV4Q292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciIsImludGVyc2VjdFJhbmtDb3ZlcnMiLCJpc1JhbmtTb3J0ZWQiLCJtYWtlQ29tcGFyYXRvcktpdCIsIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Iiwic29ydEJ5UmFuayIsInRyaXZpYWxDb21wYXJhdG9yIiwidW5pb25SYW5rQ292ZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldFRhZyxwYXNzU3R5bGVPZixuYW1lRm9yUGFzc2FibGVTeW1ib2wsRmFpbCxxLHBhc3NTdHlsZVByZWZpeGVzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlUGFzc2FibGUuanNcIiwgW1tcInBhc3NTdHlsZVByZWZpeGVzXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZVByZWZpeGVzID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzLHNldFByb3RvdHlwZU9mLGlzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNhbWVWYWx1ZVplcm89KHgseSk9Png9PT15fHxpcyh4LHkpO1xuXG5jb25zdCAgICAgICAgdHJpdmlhbENvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT5cbi8vXG5sZWZ0PHJpZ2h0Py0xOmxlZnQ9PT1yaWdodD8wOjE7XG5cbi8qXG5cbiAqLyRozY9fb25jZS50cml2aWFsQ29tcGFyYXRvcih0cml2aWFsQ29tcGFyYXRvcik7XG5cbmNvbnN0IHBhc3NTdHlsZVJhbmtzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mcm9tRW50cmllcyhcbmVudHJpZXMocGFzc1N0eWxlUHJlZml4ZXMpXG4vL1xuLnNvcnQoKFtfbGVmdFN0eWxlLGxlZnRQcmVmaXhlc10sW19yaWdodFN0eWxlLHJpZ2h0UHJlZml4ZXNdKT0+e1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKGxlZnRQcmVmaXhlcyxyaWdodFByZWZpeGVzKTtcbiB9KS5cbm1hcCgoW3Bhc3NTdHlsZSxwcmVmaXhlc10saW5kZXgpPT57XG4vL1xuLy9cbi8vXG5wcmVmaXhlcz09PVsuLi5wcmVmaXhlc10uc29ydCgpLmpvaW4oJycpfHxcbkZhaWwgYHVuc29ydGVkIHByZWZpeGVzIGZvciBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3EocHJlZml4ZXMpfWA7XG5jb25zdCBjb3Zlcj1bXG5wcmVmaXhlcy5jaGFyQXQoMCksXG5TdHJpbmcuZnJvbUNoYXJDb2RlKHByZWZpeGVzLmNoYXJDb2RlQXQocHJlZml4ZXMubGVuZ3RoLTEpKzEpXTtcblxucmV0dXJuW3Bhc3NTdHlsZSx7aW5kZXgsY292ZXJ9XTtcbiB9KSk7XG5cblxuc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUmFua3MsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUmFua3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0UGFzc1N0eWxlQ292ZXI9KHBhc3NTdHlsZSk9PnBhc3NTdHlsZVJhbmtzW3Bhc3NTdHlsZV0uY292ZXI7JGjNj19vbmNlLmdldFBhc3NTdHlsZUNvdmVyKGdldFBhc3NTdHlsZUNvdmVyKTtcbmhhcmRlbihnZXRQYXNzU3R5bGVDb3Zlcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWVtb09mU29ydGVkPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAqL1xuY29uc3QgY29tcGFyYXRvck1pcnJvckltYWdlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29tcGFyYXRvcktpdD0oY29tcGFyZVJlbW90YWJsZXM9KF94LF95KT0+TmFOKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT57XG5pZihzYW1lVmFsdWVaZXJvKGxlZnQscmlnaHQpKXtcbnJldHVybiAwO1xuIH1cbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG5yZXR1cm4gdHJpdmlhbENvbXBhcmF0b3IoXG5wYXNzU3R5bGVSYW5rc1tsZWZ0U3R5bGVdLmluZGV4LFxucGFzc1N0eWxlUmFua3NbcmlnaHRTdHlsZV0uaW5kZXgpO1xuXG4gfVxuLypcblxuICAgICAqL1xuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGNvbXBhcmVSZW1vdGFibGVzKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xuLy9cbi8vXG5yZXR1cm4gMDtcbiB9XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOntcbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ3N5bWJvbCc6e1xucmV0dXJuIGNvbXBhcmF0b3IoXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wobGVmdCksXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wocmlnaHQpKTtcblxuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKGxlZnQpKXtcbmFzc2VydCghTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihOdW1iZXIuaXNOYU4ocmlnaHQpKXtcbnJldHVybi0xO1xuIH1cbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlZnROYW1lcz1yZWNvcmROYW1lcyhsZWZ0KTtcbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG5jb25zdCByZXN1bHQ9Y29tcGFyYXRvcihsZWZ0TmFtZXMscmlnaHROYW1lcyk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuY29uc3QgbGVmdFZhbHVlcz1yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpO1xuY29uc3QgcmlnaHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHJpZ2h0LHJpZ2h0TmFtZXMpO1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdFZhbHVlcyxyaWdodFZhbHVlcyk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxhYmVsQ29tcD1jb21wYXJhdG9yKGdldFRhZyhsZWZ0KSxnZXRUYWcocmlnaHQpKTtcbmlmKGxhYmVsQ29tcCE9PTApe1xucmV0dXJuIGxhYmVsQ29tcDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihsZWZ0LnBheWxvYWQscmlnaHQucGF5bG9hZCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgcGFzc1N0eWxlOiAke3EobGVmdFN0eWxlKX1gO1xuIH19XG5cbi8qICAgICAgICAgICAgICAgKi9cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3V0ZXJDb21wYXJhdG9yPSh4LHkpPT5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NvbXBhcmF0b3IoeCx5KXx8MDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFudGlDb21wYXJhdG9yPSh4LHkpPT5vdXRlckNvbXBhcmF0b3IoeSx4KTtcblxubWVtb09mU29ydGVkLnNldChvdXRlckNvbXBhcmF0b3IsbmV3IFdlYWtTZXQoKSk7XG5tZW1vT2ZTb3J0ZWQuc2V0KGFudGlDb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xuY29tcGFyYXRvck1pcnJvckltYWdlcy5zZXQob3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KGFudGlDb21wYXJhdG9yLG91dGVyQ29tcGFyYXRvcik7XG5cbnJldHVybiBoYXJkZW4oe2NvbXBhcmF0b3I6b3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yfSk7XG4gfTtcbi8qXG5cblxuICovJGjNj19vbmNlLm1ha2VDb21wYXJhdG9yS2l0KG1ha2VDb21wYXJhdG9yS2l0KTtcbmNvbnN0ICAgICAgICBjb21wYXJhdG9yTWlycm9ySW1hZ2U9KGNvbXBhcmF0b3IpPT5cbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuZ2V0KGNvbXBhcmF0b3IpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmNvbXBhcmF0b3JNaXJyb3JJbWFnZShjb21wYXJhdG9yTWlycm9ySW1hZ2UpO1xuY29uc3QgICAgICAgIGlzUmFua1NvcnRlZD0ocGFzc2FibGVzLGNvbXBhcmUpPT57XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuaWYoc3ViTWVtb09mU29ydGVkLmhhcyhwYXNzYWJsZXMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmFzc2VydChwYXNzU3R5bGVPZihwYXNzYWJsZXMpPT09J2NvcHlBcnJheScpO1xuZm9yKGxldCBpPTE7aTxwYXNzYWJsZXMubGVuZ3RoO2krPTEpe1xuaWYoY29tcGFyZShwYXNzYWJsZXNbaS0xXSxwYXNzYWJsZXNbaV0pPj0xKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuc3ViTWVtb09mU29ydGVkLmFkZChwYXNzYWJsZXMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuaXNSYW5rU29ydGVkKGlzUmFua1NvcnRlZCk7XG5oYXJkZW4oaXNSYW5rU29ydGVkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRSYW5rU29ydGVkPShzb3J0ZWQsY29tcGFyZSk9PlxuaXNSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKXx8XG4vL1xuLy9cbkZhaWwgYE11c3QgYmUgcmFuayBzb3J0ZWQ6ICR7c29ydGVkfSB2cyAke3NvcnRCeVJhbmsoc29ydGVkLGNvbXBhcmUpfWA7JGjNj19vbmNlLmFzc2VydFJhbmtTb3J0ZWQoYXNzZXJ0UmFua1NvcnRlZCk7XG5oYXJkZW4oYXNzZXJ0UmFua1NvcnRlZCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNvcnRCeVJhbms9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuaWYoQXJyYXkuaXNBcnJheShwYXNzYWJsZXMpKXtcbmhhcmRlbihwYXNzYWJsZXMpO1xuLy9cbi8vXG4vL1xuaWYoaXNSYW5rU29ydGVkKHBhc3NhYmxlcyxjb21wYXJlKSl7XG5yZXR1cm4gcGFzc2FibGVzO1xuIH1cbiB9XG5jb25zdCB1bnNvcnRlZD1bLi4ucGFzc2FibGVzXTtcbnVuc29ydGVkLmZvckVhY2goaGFyZGVuKTtcbmNvbnN0IHNvcnRlZD11bnNvcnRlZC5zb3J0KGNvbXBhcmUpO1xuLy9cbi8vXG4vL1xuaWYoY29tcGFyZSh0cnVlLHVuZGVmaW5lZCk+MCl7XG5sZXQgaT1zb3J0ZWQubGVuZ3RoLTE7XG53aGlsZShpPj0wJiZzb3J0ZWRbaV09PT11bmRlZmluZWQpaS09MTtcbmNvbnN0IG49c29ydGVkLmxlbmd0aC1pLTE7XG5pZihuPjAmJm48c29ydGVkLmxlbmd0aCl7XG5zb3J0ZWQuY29weVdpdGhpbihuLDApO1xuc29ydGVkLmZpbGwoLyogICAgICAgICAgICAqL3VuZGVmaW5lZCwwLG4pO1xuIH1cbiB9XG5oYXJkZW4oc29ydGVkKTtcbmNvbnN0IHN1Yk1lbW9PZlNvcnRlZD1tZW1vT2ZTb3J0ZWQuZ2V0KGNvbXBhcmUpO1xuYXNzZXJ0KHN1Yk1lbW9PZlNvcnRlZCE9PXVuZGVmaW5lZCk7XG5zdWJNZW1vT2ZTb3J0ZWQuYWRkKHNvcnRlZCk7XG5yZXR1cm4gc29ydGVkO1xuIH07JGjNj19vbmNlLnNvcnRCeVJhbmsoc29ydEJ5UmFuayk7XG5oYXJkZW4oc29ydEJ5UmFuayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCByYW5rU2VhcmNoPShzb3J0ZWQsY29tcGFyZSxrZXksYmlhcz0nbGVmdE1vc3QnKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5sZXQgbGVmdD0wO1xubGV0IHJpZ2h0PXNvcnRlZC5sZW5ndGg7XG53aGlsZShsZWZ0PHJpZ2h0KXtcbmNvbnN0IG09TWF0aC5mbG9vcigobGVmdCtyaWdodCkvMik7XG5jb25zdCBjb21wPWNvbXBhcmUoc29ydGVkW21dLGtleSk7XG5pZihjb21wPD0tMXx8Y29tcD09PTAmJmJpYXM9PT0ncmlnaHRNb3N0Jyl7XG5sZWZ0PW0rMTtcbiB9ZWxzZXtcbmFzc2VydChjb21wPj0xfHxjb21wPT09MCYmYmlhcz09PSdsZWZ0TW9zdCcpO1xucmlnaHQ9bTtcbiB9XG4gfVxucmV0dXJuIGJpYXM9PT0nbGVmdE1vc3QnP2xlZnQ6cmlnaHQtMTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbmRleENvdmVyPShzb3J0ZWQsY29tcGFyZSxbbGVmdEtleSxyaWdodEtleV0pPT57XG5hc3NlcnRSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKTtcbmNvbnN0IGxlZnRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLGxlZnRLZXksJ2xlZnRNb3N0Jyk7XG5jb25zdCByaWdodEluZGV4PXJhbmtTZWFyY2goc29ydGVkLGNvbXBhcmUscmlnaHRLZXksJ3JpZ2h0TW9zdCcpO1xucmV0dXJuW2xlZnRJbmRleCxyaWdodEluZGV4XTtcbiB9OyRozY9fb25jZS5nZXRJbmRleENvdmVyKGdldEluZGV4Q292ZXIpO1xuaGFyZGVuKGdldEluZGV4Q292ZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBGdWxsUmFua0NvdmVyPWhhcmRlbihbJycsJ3snXSk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuRnVsbFJhbmtDb3ZlcihGdWxsUmFua0NvdmVyKTtcbmNvbnN0ICAgICAgICBjb3ZlcmVkRW50cmllcz0oc29ydGVkLFtsZWZ0SW5kZXgscmlnaHRJbmRleF0pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpdGVyYWJsZT1oYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPWxlZnRJbmRleDtcbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuaWYoaTw9cmlnaHRJbmRleCl7XG5jb25zdCBlbGVtZW50PXNvcnRlZFtpXTtcbmkrPTE7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTpbaSxlbGVtZW50XSxkb25lOmZhbHNlfSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTp1bmRlZmluZWQsZG9uZTp0cnVlfSk7XG4gfVxuIH19KTtcblxuIH19KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLmNvdmVyZWRFbnRyaWVzKGNvdmVyZWRFbnRyaWVzKTtcbmhhcmRlbihjb3ZlcmVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYXhSYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKT49MD9hOmI7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtaW5SYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKTw9MD9hOmI7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bmlvblJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCB1bmlvblJhbmtDb3ZlclBhaXI9KFtsZWZ0QSxyaWdodEFdLFtsZWZ0QixyaWdodEJdKT0+W1xubWluUmFuayhjb21wYXJlLGxlZnRBLGxlZnRCKSxcbm1heFJhbmsoY29tcGFyZSxyaWdodEEscmlnaHRCKV07XG5cbnJldHVybiBjb3ZlcnMucmVkdWNlKHVuaW9uUmFua0NvdmVyUGFpcixbJ3snLCcnXSk7XG4gfTskaM2PX29uY2UudW5pb25SYW5rQ292ZXJzKHVuaW9uUmFua0NvdmVycyk7XG5oYXJkZW4odW5pb25SYW5rQ292ZXJzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGludGVyc2VjdFJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBpbnRlcnNlY3RSYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1heFJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5taW5SYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZShpbnRlcnNlY3RSYW5rQ292ZXJQYWlyLFsnJywneyddKTtcbiB9OyRozY9fb25jZS5pbnRlcnNlY3RSYW5rQ292ZXJzKGludGVyc2VjdFJhbmtDb3ZlcnMpO1xuXG5jb25zdCAgICAgICB7Y29tcGFyYXRvcjpjb21wYXJlUmFuayxhbnRpQ29tcGFyYXRvcjpjb21wYXJlQW50aVJhbmt9PVxubWFrZUNvbXBhcmF0b3JLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5jb21wYXJlUmFuayhjb21wYXJlUmFuayk7JGjNj19vbmNlLmNvbXBhcmVBbnRpUmFuayhjb21wYXJlQW50aVJhbmspO1xuY29uc3QgICAgICAgIG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0PShsb25nTGl2ZWQ9ZmFsc2UpPT57XG5sZXQgbnVtU2Vlbj0wO1xuLy9cbi8vXG4vL1xuY29uc3QgTWFwQ29uc3RydWN0b3I9bG9uZ0xpdmVkP1dlYWtNYXA6TWFwO1xuY29uc3Qgc2Vlbj1uZXcgTWFwQ29uc3RydWN0b3IoKTtcbmNvbnN0IHRhZz0ocik9PntcbmlmKHNlZW4uaGFzKHIpKXtcbnJldHVybiBzZWVuLmdldChyKTtcbiB9XG5udW1TZWVuKz0xO1xuc2Vlbi5zZXQocixudW1TZWVuKTtcbnJldHVybiBudW1TZWVuO1xuIH07XG5jb25zdCBjb21wYXJlUmVtb3RhYmxlcz0oeCx5KT0+Y29tcGFyZVJhbmsodGFnKHgpLHRhZyh5KSk7XG5yZXR1cm4gbWFrZUNvbXBhcmF0b3JLaXQoY29tcGFyZVJlbW90YWJsZXMpO1xuIH07JGjNj19vbmNlLm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KTtcbmhhcmRlbihtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0cml2aWFsQ29tcGFyYXRvciI6WyJ0cml2aWFsQ29tcGFyYXRvciJdLCJnZXRQYXNzU3R5bGVDb3ZlciI6WyJnZXRQYXNzU3R5bGVDb3ZlciJdLCJtYWtlQ29tcGFyYXRvcktpdCI6WyJtYWtlQ29tcGFyYXRvcktpdCJdLCJjb21wYXJhdG9yTWlycm9ySW1hZ2UiOlsiY29tcGFyYXRvck1pcnJvckltYWdlIl0sImlzUmFua1NvcnRlZCI6WyJpc1JhbmtTb3J0ZWQiXSwiYXNzZXJ0UmFua1NvcnRlZCI6WyJhc3NlcnRSYW5rU29ydGVkIl0sInNvcnRCeVJhbmsiOlsic29ydEJ5UmFuayJdLCJnZXRJbmRleENvdmVyIjpbImdldEluZGV4Q292ZXIiXSwiRnVsbFJhbmtDb3ZlciI6WyJGdWxsUmFua0NvdmVyIl0sImNvdmVyZWRFbnRyaWVzIjpbImNvdmVyZWRFbnRyaWVzIl0sInVuaW9uUmFua0NvdmVycyI6WyJ1bmlvblJhbmtDb3ZlcnMiXSwiaW50ZXJzZWN0UmFua0NvdmVycyI6WyJpbnRlcnNlY3RSYW5rQ292ZXJzIl0sImNvbXBhcmVSYW5rIjpbImNvbXBhcmVSYW5rIl0sImNvbXBhcmVBbnRpUmFuayI6WyJjb21wYXJlQW50aVJhbmsiXSwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiOlsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAIQAAAEBlbmRvL21hcnNoYWwtdjEuNi4xL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX+pOglkFAABZBQAAHgAAAEBlbmRvL25hdC12NS4wLjEyL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiTmF0IiwiaXNOYXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc05hdCwgJ25hbWUnLCB7dmFsdWU6IFwiaXNOYXRcIn0pOyRozY9fb25jZS5pc05hdChpc05hdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdCwgJ25hbWUnLCB7dmFsdWU6IFwiTmF0XCJ9KTskaM2PX29uY2UuTmF0KE5hdCk7ICAgLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGlzTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5yZXR1cm4gYWxsZWdlZE51bT49MDtcbiB9XG5pZih0eXBlb2YgYWxsZWdlZE51bSE9PSdudW1iZXInKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbnJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcihhbGxlZ2VkTnVtKSYmYWxsZWdlZE51bT49MDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBOYXQoYWxsZWdlZE51bSl7XG5pZih0eXBlb2YgYWxsZWdlZE51bT09PSdiaWdpbnQnKXtcbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBhbGxlZ2VkTnVtO1xuIH1cblxuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nbnVtYmVyJyl7XG5pZighTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkpe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYCk7XG4gfVxuaWYoYWxsZWdlZE51bTwwKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5lZ2F0aXZlYCk7XG4gfVxucmV0dXJuIEJpZ0ludChhbGxlZ2VkTnVtKTtcbiB9XG5cbnRocm93IFR5cGVFcnJvcihcbiBgJHthbGxlZ2VkTnVtfSBpcyBhICR7dHlwZW9mIGFsbGVnZWROdW19IGJ1dCBtdXN0IGJlIGEgYmlnaW50IG9yIGEgbnVtYmVyYCk7XG5cbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc05hdCI6WyJpc05hdCJdLCJOYXQiOlsiTmF0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKEpqrw/CgAAPwoAACAAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiLCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vc3JjL2Vycm9yLmpzIiwiLi9zcmMvcmVtb3RhYmxlLmpzIiwiLi9zcmMvc3ltYm9sLmpzIiwiLi9zcmMvc3RyaW5nLmpzIiwiLi9zcmMvcGFzc1N0eWxlT2YuanMiLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIiwiLi9zcmMvbWFrZS1mYXIuanMiLCIuL3NyYy90eXBlR3VhcmRzLmpzIiwiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJGYXIiLCJGYXIiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiLCJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIiwiaXNPYmplY3QiLCJpc09iamVjdCIsImlzUGFzc2FibGUiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvaXRlci1oZWxwZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvZXJyb3IuanNcIiwgW11dLFtcIi4vc3JjL3JlbW90YWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvc3ltYm9sLmpzXCIsIFtdXSxbXCIuL3NyYy9zdHJpbmcuanNcIiwgW11dLFtcIi4vc3JjL3Bhc3NTdHlsZU9mLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlVGFnZ2VkLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlLWZhci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2l0ZXItaGVscGVycy5qcyI6W1sibWFwSXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLFsiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSJdXSwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOltbIlBBU1NfU1RZTEUiLCJQQVNTX1NUWUxFIl0sWyJpc09iamVjdCIsImlzT2JqZWN0Il0sWyJhc3NlcnRDaGVja2VyIiwiYXNzZXJ0Q2hlY2tlciJdLFsiZ2V0VGFnIiwiZ2V0VGFnIl0sWyJoYXNPd25Qcm9wZXJ0eU9mIiwiaGFzT3duUHJvcGVydHlPZiJdXSwiLi9zcmMvZXJyb3IuanMiOltbImdldEVycm9yQ29uc3RydWN0b3IiLCJnZXRFcnJvckNvbnN0cnVjdG9yIl0sWyJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIl1dLCIuL3NyYy9yZW1vdGFibGUuanMiOltbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXV0sIi4vc3JjL3N5bWJvbC5qcyI6W1siYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLFsiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiXSxbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCIsIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLFsicGFzc2FibGVTeW1ib2xGb3JOYW1lIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl1dLCIuL3NyYy9zdHJpbmcuanMiOltbImlzV2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLFsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0UGFzc2FibGVTdHJpbmciXV0sIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjpbWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl0sWyJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSJdLFsiYXNzZXJ0UGFzc2FibGUiLCJhc3NlcnRQYXNzYWJsZSJdLFsidG9QYXNzYWJsZUVycm9yIiwidG9QYXNzYWJsZUVycm9yIl0sWyJ0b1Rocm93YWJsZSIsInRvVGhyb3dhYmxlIl1dLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIjpbWyJtYWtlVGFnZ2VkIiwibWFrZVRhZ2dlZCJdXSwiLi9zcmMvbWFrZS1mYXIuanMiOltbIlJlbW90YWJsZSIsIlJlbW90YWJsZSJdLFsiRmFyIiwiRmFyIl0sWyJUb0ZhckZ1bmN0aW9uIiwiVG9GYXJGdW5jdGlvbiJdLFsiR0VUX01FVEhPRF9OQU1FUyIsIkdFVF9NRVRIT0RfTkFNRVMiXV0sIi4vc3JjL3R5cGVHdWFyZHMuanMiOltbImFzc2VydFJlY29yZCIsImFzc2VydFJlY29yZCJdLFsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5Il0sWyJhc3NlcnRSZW1vdGFibGUiLCJhc3NlcnRSZW1vdGFibGUiXSxbImlzUmVtb3RhYmxlIiwiaXNSZW1vdGFibGUiXSxbImlzUmVjb3JkIiwiaXNSZWNvcmQiXSxbImlzQ29weUFycmF5IiwiaXNDb3B5QXJyYXkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJeovyVUBgAAVAYAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvY29weUFycmF5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5QXJyYXlIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxhc3NlcnRDaGVja2VyLGdldE93bkRhdGFEZXNjcmlwdG9yOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHtnZXRQcm90b3R5cGVPZn09T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXkscHJvdG90eXBlOmFycmF5UHJvdG90eXBlfT1BcnJheTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2FuQmVWYWxpZD0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PlxuaXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJmNoZWNrKGZhbHNlLFggYEFycmF5IGV4cGVjdGVkOiAke2NhbmRpZGF0ZX1gKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5QXJyYXlIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonY29weUFycmF5JyxcblxuY2FuQmVWYWxpZCxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09YXJyYXlQcm90b3R5cGV8fFxuYXNzZXJ0LmZhaWwoWCBgTWFsZm9ybWVkIGFycmF5OiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4vL1xuLy9cbmNvbnN0IGxlbj0vKiAgICAgICAgICAgICAgICAgKi9cbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwnbGVuZ3RoJyxmYWxzZSxhc3NlcnRDaGVja2VyKS52YWx1ZTtcblxuLy9cbi8vXG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbnBhc3NTdHlsZU9mUmVjdXIoXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsaSx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH1cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkubGVuZ3RoPT09bGVuKzF8fFxuYXNzZXJ0LmZhaWwoWCBgQXJyYXlzIG11c3Qgbm90IGhhdmUgbm9uLWluZGV4ZXM6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbiB9fSk7JGjNj19vbmNlLkNvcHlBcnJheUhlbHBlcihDb3B5QXJyYXlIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ29weUFycmF5SGVscGVyIjpbIkNvcHlBcnJheUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAyz0q1KQgAACkIAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2NvcHlSZWNvcmQuanN7ImltcG9ydHMiOlsiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkNvcHlSZWNvcmRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixjYW5CZU1ldGhvZCxnZXRPd25EYXRhRGVzY3JpcHRvcixDWDskaM2PX2ltcG9ydHMoW1tcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRQcm90b3R5cGVPZixwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBjaGVja09iamVjdFByb3RvdHlwZT0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk9PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlY29yZHMgbXVzdCBpbmhlcml0IGZyb20gT2JqZWN0LnByb3RvdHlwZTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJvcGVydHlDYW5CZVZhbGlkPShjYW5kaWRhdGUsa2V5LHZhbHVlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbih0eXBlb2Yga2V5PT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbiBvbmx5IGhhdmUgc3RyaW5nLW5hbWVkIHByb3BlcnRpZXM6ICR7Y2FuZGlkYXRlfWApJiYoXG4hY2FuQmVNZXRob2QodmFsdWUpfHxcbiEhY2hlY2smJlxuLy9cbkNYKFxuY2hlY2spXG4gYFJlY29yZHMgY2Fubm90IGNvbnRhaW4gbm9uLWZhciBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IG1heSBiZSBtZXRob2RzIG9mIGFuIGltcGxpY2l0IFJlbW90YWJsZTogJHtjYW5kaWRhdGV9YCkpO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5UmVjb3JkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2NvcHlSZWNvcmQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xucmV0dXJuKFxuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGNoZWNrKSYmXG4vL1xuLy9cbm93bktleXMoY2FuZGlkYXRlKS5ldmVyeSgoa2V5KT0+XG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsa2V5LGNhbmRpZGF0ZVtrZXldLGNoZWNrKSkpO1xuXG5cbiB9LFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja09iamVjdFByb3RvdHlwZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG4vL1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duS2V5cyhjYW5kaWRhdGUpKXtcbmNvbnN0e3ZhbHVlfT1nZXRPd25EYXRhRGVzY3JpcHRvcihcbmNhbmRpZGF0ZSxcbm5hbWUsXG50cnVlLFxuYXNzZXJ0Q2hlY2tlcik7XG5cbmNoZWNrUHJvcGVydHlDYW5CZVZhbGlkKGNhbmRpZGF0ZSxuYW1lLHZhbHVlLGFzc2VydENoZWNrZXIpO1xucGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSk7XG4gfVxuIH19KTskaM2PX29uY2UuQ29weVJlY29yZEhlbHBlcihDb3B5UmVjb3JkSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlSZWNvcmRIZWxwZXIiOlsiQ29weVJlY29yZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABwIuV6VgoAAFYKAAAuAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyIsIi4vbWFrZVRhZ2dlZC5qcyJdLCJleHBvcnRzIjpbImRlZXBseUZ1bGZpbGxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRSxpc1Byb21pc2UsZ2V0VGFnLGlzT2JqZWN0LHBhc3NTdHlsZU9mLG1ha2VUYWdnZWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIi4vbWFrZVRhZ2dlZC5qc1wiLCBbW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkPWFzeW5jKHZhbCk9Pntcbi8vXG4vL1xuLy9cblxuaWYoIWlzT2JqZWN0KHZhbCkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsKTtcbiB9XG5pZihpc1Byb21pc2UodmFsKSl7XG5yZXR1cm4gRS53aGVuKHZhbCwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCBuYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMocmVjKTtcbmNvbnN0IHZhbFBzPW5hbWVzLm1hcCgobmFtZSk9PmRlZXBseUZ1bGZpbGxlZChyZWNbbmFtZV0pKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PlxuaGFyZGVuKGZyb21FbnRyaWVzKHZhbHMubWFwKChjLGkpPT5bbmFtZXNbaV0sY10pKSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGFycj0vKiAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB2YWxQcz1hcnIubWFwKChwKT0+ZGVlcGx5RnVsZmlsbGVkKHApKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PmhhcmRlbih2YWxzKSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnZD0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdGFnPWdldFRhZyh0Z2QpO1xuLy9cbnJldHVybiBFLndoZW4oZGVlcGx5RnVsZmlsbGVkKHRnZC5wYXlsb2FkKSwocGF5bG9hZCk9PlxubWFrZVRhZ2dlZCh0YWcscGF5bG9hZCkpO1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlbT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIHJlbTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlcnI9LyogICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIGVycjtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHByb209LyogICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdmFsO1xucmV0dXJuIEUud2hlbihwcm9tLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTskaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkKGRlZXBseUZ1bGZpbGxlZCk7XG5oYXJkZW4oZGVlcGx5RnVsZmlsbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZCI6WyJkZWVwbHlGdWxmaWxsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiRXJyb3JIZWxwZXIiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciIsImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciIsImlzRXJyb3JMaWtlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsYXNzZXJ0Q2hlY2tlcixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGhhc093bixlbnRyaWVzfT1PYmplY3Q7XG5cbi8vXG4vL1xuY29uc3QgZXJyb3JDb25zdHJ1Y3RvcnM9bmV3IE1hcChcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bXG5bJ0Vycm9yJyxFcnJvcl0sXG5bJ0V2YWxFcnJvcicsRXZhbEVycm9yXSxcblsnUmFuZ2VFcnJvcicsUmFuZ2VFcnJvcl0sXG5bJ1JlZmVyZW5jZUVycm9yJyxSZWZlcmVuY2VFcnJvcl0sXG5bJ1N5bnRheEVycm9yJyxTeW50YXhFcnJvcl0sXG5bJ1R5cGVFcnJvcicsVHlwZUVycm9yXSxcblsnVVJJRXJyb3InLFVSSUVycm9yXVxuXG4vL1xuLy9cbi8vXG4vL1xuXSk7XG5cblxuaWYodHlwZW9mIEFnZ3JlZ2F0ZUVycm9yIT09J3VuZGVmaW5lZCcpe1xuLy9cbmVycm9yQ29uc3RydWN0b3JzLnNldCgnQWdncmVnYXRlRXJyb3InLEFnZ3JlZ2F0ZUVycm9yKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0RXJyb3JDb25zdHJ1Y3Rvcj0obmFtZSk9PmVycm9yQ29uc3RydWN0b3JzLmdldChuYW1lKTskaM2PX29uY2UuZ2V0RXJyb3JDb25zdHJ1Y3RvcihnZXRFcnJvckNvbnN0cnVjdG9yKTtcbmhhcmRlbihnZXRFcnJvckNvbnN0cnVjdG9yKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tFcnJvckxpa2U9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuKFxuY2FuZGlkYXRlIGluc3RhbmNlb2YgRXJyb3J8fFxuISFjaGVjayYmQ1goY2hlY2spIGBFcnJvciBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrRXJyb3JMaWtlKTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzRXJyb3JMaWtlPShjYW5kaWRhdGUpPT5jaGVja0Vycm9yTGlrZShjYW5kaWRhdGUpOyRozY9fb25jZS5pc0Vycm9yTGlrZShpc0Vycm9yTGlrZSk7XG5oYXJkZW4oaXNFcnJvckxpa2UpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjPShcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaz11bmRlZmluZWQpPT5cbntcbmlmKGRlc2MuZW51bWVyYWJsZSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtkZXNjfWApO1xuXG4gfVxuaWYoIWhhc093bihkZXNjLCd2YWx1ZScpKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eTogJHtkZXNjfWApO1xuXG4gfVxuY29uc3R7dmFsdWV9PWRlc2M7XG5zd2l0Y2gocHJvcE5hbWUpe1xuY2FzZSdtZXNzYWdlJzpcbmNhc2Unc3RhY2snOntcbnJldHVybihcbnR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nOiAke3ZhbHVlfWApO1xuXG4gfVxuY2FzZSdjYXVzZSc6e1xuLy9cbnJldHVybiBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcih2YWx1ZSxwYXNzU3R5bGVPZlJlY3VyLGNoZWNrKTtcbiB9XG5jYXNlJ2Vycm9ycyc6e1xuaWYoIUFycmF5LmlzQXJyYXkodmFsdWUpfHxwYXNzU3R5bGVPZlJlY3VyKHZhbHVlKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgY29weUFycmF5OiAke3ZhbHVlfWApO1xuXG4gfVxucmV0dXJuIHZhbHVlLmV2ZXJ5KChlcnIpPT5cbi8vXG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2ZSZWN1cixjaGVjaykpO1xuXG4gfVxuZGVmYXVsdDp7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgaGFzIGV4dHJhIHVucGFzc2VkIHByb3BlcnR5ICR7cShwcm9wTmFtZSl9YCk7XG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcj0oXG5jYW5kaWRhdGUsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZighY2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKTtcbmNvbnN0e25hbWV9PXByb3RvO1xuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihuYW1lKTtcbmlmKGVyckNvbnN0cnVjdG9yPT09dW5kZWZpbmVkfHxlcnJDb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1wcm90byl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaW5oZXJpdCBmcm9tIGFuIGVycm9yIGNsYXNzIC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYoISgnbWVzc2FnZSdpbiBkZXNjcykpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGhhdmUgYW4gb3duIFwibWVzc2FnZVwiIHN0cmluZyBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5cbnJldHVybiBlbnRyaWVzKGRlc2NzKS5ldmVyeSgoW3Byb3BOYW1lLGRlc2NdKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaykpO1xuXG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcik7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBFcnJvckhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidlcnJvcicsXG5cbmNhbkJlVmFsaWQ6Y2hlY2tFcnJvckxpa2UsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIsYXNzZXJ0Q2hlY2tlcil9KTskaM2PX29uY2UuRXJyb3JIZWxwZXIoRXJyb3JIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0RXJyb3JDb25zdHJ1Y3RvciI6WyJnZXRFcnJvckNvbnN0cnVjdG9yIl0sImlzRXJyb3JMaWtlIjpbImlzRXJyb3JMaWtlIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIl0sIkVycm9ySGVscGVyIjpbIkVycm9ySGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvaXRlci1oZWxwZXJzLmpzeyJpbXBvcnRzIjpbIi4vbWFrZS1mYXIuanMiXSwiZXhwb3J0cyI6WyJmaWx0ZXJJdGVyYWJsZSIsIm1hcEl0ZXJhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaM2PX2ltcG9ydHMoW1tcIi4vbWFrZS1mYXIuanNcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFwSXRlcmFibGU9KGJhc2VJdGVyYWJsZSxmdW5jKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdtYXBwZWQgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBiYXNlSXRlcmF0b3I9YmFzZUl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBGYXIoJ21hcHBlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuY29uc3R7dmFsdWU6YmFzZVZhbHVlLGRvbmV9PWJhc2VJdGVyYXRvci5uZXh0KCk7XG5jb25zdCB2YWx1ZT1kb25lP2Jhc2VWYWx1ZTpmdW5jKGJhc2VWYWx1ZSk7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSxkb25lfSk7XG4gfX0pO1xuXG4gfX0pOyRozY9fb25jZS5tYXBJdGVyYWJsZShtYXBJdGVyYWJsZSk7XG5cbmhhcmRlbihtYXBJdGVyYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmaWx0ZXJJdGVyYWJsZT0oYmFzZUl0ZXJhYmxlLHByZWQpPT5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5GYXIoJ2ZpbHRlcmVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdmaWx0ZXJlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuZm9yKDs7KXtcbmNvbnN0IHJlc3VsdD1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3R7dmFsdWUsZG9uZX09cmVzdWx0O1xuaWYoZG9uZXx8cHJlZCh2YWx1ZSkpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuIH19KTtcblxuIH19KTskaM2PX29uY2UuZmlsdGVySXRlcmFibGUoZmlsdGVySXRlcmFibGUpO1xuXG5oYXJkZW4oZmlsdGVySXRlcmFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFwSXRlcmFibGUiOlsibWFwSXRlcmFibGUiXSwiZmlsdGVySXRlcmFibGUiOlsiZmlsdGVySXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9tYWtlLWZhci5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcmVtb3RhYmxlLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiR0VUX01FVEhPRF9OQU1FUyIsIlJlbW90YWJsZSIsIlRvRmFyRnVuY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMscSxGYWlsLGFzc2VydENoZWNrZXIsUEFTU19TVFlMRSxhc3NlcnRJZmFjZSxnZXRJbnRlcmZhY2VPZixSZW1vdGFibGVIZWxwZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3JlbW90YWJsZS5qc1wiLCBbW1wiYXNzZXJ0SWZhY2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0SWZhY2UgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaM2PX2EgPT4gKFJlbW90YWJsZUhlbHBlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbnNldFByb3RvdHlwZU9mLFxuY3JlYXRlLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlUmVtb3RhYmxlUHJvdG89KHJlbW90YWJsZSxpZmFjZSk9PntcbmxldCBvbGRQcm90bz1nZXRQcm90b3R5cGVPZihyZW1vdGFibGUpO1xuaWYodHlwZW9mIHJlbW90YWJsZT09PSdvYmplY3QnKXtcbmlmKG9sZFByb3RvPT09bnVsbCl7XG5vbGRQcm90bz1vYmplY3RQcm90b3R5cGU7XG4gfVxub2xkUHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuRmFpbCBgRm9yIG5vdywgcmVtb3RhYmxlcyBjYW5ub3QgaW5oZXJpdCBmcm9tIGFueXRoaW5nIHVudXN1YWwsIGluICR7cmVtb3RhYmxlfWA7XG4gfWVsc2UgaWYodHlwZW9mIHJlbW90YWJsZT09PSdmdW5jdGlvbicpe1xub2xkUHJvdG8hPT1udWxsfHxcbkZhaWwgYE9yaWdpbmFsIGZ1bmN0aW9uIG11c3Qgbm90IGluaGVyaXQgZnJvbSBudWxsOiAke3JlbW90YWJsZX1gO1xub2xkUHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5nZXRQcm90b3R5cGVPZihvbGRQcm90byk9PT1mdW5jdGlvblByb3RvdHlwZXx8XG5GYWlsIGBGYXIgZnVuY3Rpb25zIG11c3Qgb3JpZ2luYWxseSBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNle1xuRmFpbCBgdW5yZWNvZ25pemVkIHR5cGVvZiAke3JlbW90YWJsZX1gO1xuIH1cbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2xkUHJvdG8se1xuW1BBU1NfU1RZTEVdOnt2YWx1ZToncmVtb3RhYmxlJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6aWZhY2V9fSkpO1xuXG5cbiB9O1xuXG5jb25zdCBhc3NlcnRDYW5CZVJlbW90YWJsZT0oY2FuZGlkYXRlKT0+XG5SZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBSZW1vdGFibGU9KFxuLy9cbmlmYWNlPSdSZW1vdGFibGUnLFxucHJvcHM9dW5kZWZpbmVkLFxucmVtb3RhYmxlPS8qICAgICAgICAgICAgKi97fSk9Plxue1xuYXNzZXJ0SWZhY2UoaWZhY2UpO1xuYXNzZXJ0KGlmYWNlKTtcbi8vXG4vL1xucHJvcHM9PT11bmRlZmluZWR8fEZhaWwgYFJlbW90YWJsZSBwcm9wcyBub3QgeWV0IGltcGxlbWVudGVkICR7cHJvcHN9YDtcblxuLy9cbmFzc2VydENhbkJlUmVtb3RhYmxlKHJlbW90YWJsZSk7XG5cbi8vXG4hKFBBU1NfU1RZTEUgaW4gcmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgbWFya2VkIGFzIGEgJHtxKFxucmVtb3RhYmxlW1BBU1NfU1RZTEVdKVxuIH1gO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4uaXNGYWtlfHxcbi8vXG4haXNGcm96ZW4ocmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgZnJvemVuYDtcbmNvbnN0IHJlbW90YWJsZVByb3RvPW1ha2VSZW1vdGFibGVQcm90byhyZW1vdGFibGUsaWZhY2UpO1xuXG4vL1xuLy9cbmNvbnN0IG11dGF0ZUhhcmRlbkFuZENoZWNrPSh0YXJnZXQpPT57XG4vL1xuc2V0UHJvdG90eXBlT2YodGFyZ2V0LHJlbW90YWJsZVByb3RvKTtcbmhhcmRlbih0YXJnZXQpO1xuYXNzZXJ0Q2FuQmVSZW1vdGFibGUodGFyZ2V0KTtcbiB9O1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2soe30pO1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2socmVtb3RhYmxlKTtcblxuLy9cbi8vXG5hc3NlcnQoaWZhY2UhPT11bmRlZmluZWQpOy8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAqL3JlbW90YWJsZSk7XG4gfTskaM2PX29uY2UuUmVtb3RhYmxlKFJlbW90YWJsZSk7XG5oYXJkZW4oUmVtb3RhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9NRVRIT0RfTkFNRVM9J19fZ2V0TWV0aG9kTmFtZXNfXyc7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5HRVRfTUVUSE9EX05BTUVTKEdFVF9NRVRIT0RfTkFNRVMpO1xuY29uc3QgZ2V0TWV0aG9kTmFtZXNNZXRob2Q9aGFyZGVuKHtcbltHRVRfTUVUSE9EX05BTUVTXSgpe1xucmV0dXJuIGdldE1ldGhvZE5hbWVzKHRoaXMpO1xuIH19KVtcbkdFVF9NRVRIT0RfTkFNRVNdO1xuXG5jb25zdCBnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3I9aGFyZGVuKHtcbnZhbHVlOmdldE1ldGhvZE5hbWVzTWV0aG9kLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZSxcbndyaXRhYmxlOmZhbHNlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEZhcj0oZmFyTmFtZSxyZW1vdGFibGU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgcj1yZW1vdGFibGU9PT11bmRlZmluZWQ/LyogICAgICAgICAgICAqL3t9OnJlbW90YWJsZTtcbmlmKHR5cGVvZiByPT09J29iamVjdCcmJiEoR0VUX01FVEhPRF9OQU1FUyBpbiByKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsR0VUX01FVEhPRF9OQU1FUyxnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3IpO1xuIH1cbnJldHVybiBSZW1vdGFibGUoIGBBbGxlZ2VkOiAke2Zhck5hbWV9YCx1bmRlZmluZWQscik7XG4gfTskaM2PX29uY2UuRmFyKEZhcik7XG5oYXJkZW4oRmFyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRvRmFyRnVuY3Rpb249KGZhck5hbWUsZnVuYyk9PntcbmlmKGdldEludGVyZmFjZU9mKGZ1bmMpIT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gZnVuYztcbiB9XG4vL1xucmV0dXJuIEZhcihmYXJOYW1lLCguLi5hcmdzKT0+ZnVuYyguLi5hcmdzKSk7XG4gfTskaM2PX29uY2UuVG9GYXJGdW5jdGlvbihUb0ZhckZ1bmN0aW9uKTtcbmhhcmRlbihUb0ZhckZ1bmN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlJlbW90YWJsZSI6WyJSZW1vdGFibGUiXSwiR0VUX01FVEhPRF9OQU1FUyI6WyJHRVRfTUVUSE9EX05BTUVTIl0sIkZhciI6WyJGYXIiXSwiVG9GYXJGdW5jdGlvbiI6WyJUb0ZhckZ1bmN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvbWFrZVRhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbIm1ha2VUYWdnZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxQQVNTX1NUWUxFLGFzc2VydFBhc3NhYmxlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuY29uc3R7Y3JlYXRlLHByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVGFnZ2VkPSh0YWcscGF5bG9hZCk9PntcbnR5cGVvZiB0YWc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBUaGUgdGFnIG9mIGEgdGFnZ2VkIHJlY29yZCBtdXN0IGJlIGEgc3RyaW5nOiAke3RhZ31gO1xuYXNzZXJ0UGFzc2FibGUoaGFyZGVuKHBheWxvYWQpKTtcbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2JqZWN0UHJvdG90eXBlLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3RhZ2dlZCd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOnRhZ30sXG5wYXlsb2FkOnt2YWx1ZTpwYXlsb2FkLGVudW1lcmFibGU6dHJ1ZX19KSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VUYWdnZWQobWFrZVRhZ2dlZCk7XG5oYXJkZW4obWFrZVRhZ2dlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlVGFnZ2VkIjpbIm1ha2VUYWdnZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAADSKSdxQVAAAUFQAAMAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJDWCIsIlBBU1NfU1RZTEUiLCJhc3NlcnRDaGVja2VyIiwiY2FuQmVNZXRob2QiLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIiwiY2hlY2tQYXNzU3R5bGUiLCJjaGVja1RhZ1JlY29yZCIsImdldE93bkRhdGFEZXNjcmlwdG9yIiwiZ2V0VGFnIiwiaGFzT3duUHJvcGVydHlPZiIsImlzT2JqZWN0IiwiaXNUeXBlZEFycmF5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e3Byb3RvdHlwZTpmdW5jdGlvblByb3RvdHlwZX09RnVuY3Rpb247XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbmdldFByb3RvdHlwZU9mLFxuaGFzT3duUHJvcGVydHk6b2JqZWN0SGFzT3duUHJvcGVydHksXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PVxuT2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZzp0b1N0cmluZ1RhZ1N5bWJvbH09U3ltYm9sO1xuXG5jb25zdCB0eXBlZEFycmF5UHJvdG90eXBlPWdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkucHJvdG90eXBlKTtcbmNvbnN0IHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxudHlwZWRBcnJheVByb3RvdHlwZSxcbnRvU3RyaW5nVGFnU3ltYm9sKTtcblxuYXNzZXJ0KHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MpO1xuY29uc3QgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPXR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MuZ2V0O1xuYXNzZXJ0KHR5cGVvZiBnZXRUeXBlZEFycmF5VG9TdHJpbmdUYWc9PT0nZnVuY3Rpb24nKTtcblxuY29uc3QgICAgICAgIGhhc093blByb3BlcnR5T2Y9KG9iaixwcm9wKT0+XG5hcHBseShvYmplY3RIYXNPd25Qcm9wZXJ0eSxvYmosW3Byb3BdKTskaM2PX29uY2UuaGFzT3duUHJvcGVydHlPZihoYXNPd25Qcm9wZXJ0eU9mKTtcbmhhcmRlbihoYXNPd25Qcm9wZXJ0eU9mKTtcblxuLy9cbmNvbnN0ICAgICAgICBpc09iamVjdD0odmFsKT0+T2JqZWN0KHZhbCk9PT12YWw7JGjNj19vbmNlLmlzT2JqZWN0KGlzT2JqZWN0KTtcbmhhcmRlbihpc09iamVjdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1R5cGVkQXJyYXk9KG9iamVjdCk9Pntcbi8vXG5jb25zdCB0YWc9YXBwbHkoZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLG9iamVjdCxbXSk7XG5yZXR1cm4gdGFnIT09dW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmlzVHlwZWRBcnJheShpc1R5cGVkQXJyYXkpO1xuaGFyZGVuKGlzVHlwZWRBcnJheSk7XG5cbmNvbnN0ICAgICAgICBQQVNTX1NUWUxFPVN5bWJvbC5mb3IoJ3Bhc3NTdHlsZScpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5QQVNTX1NUWUxFKFBBU1NfU1RZTEUpO1xuY29uc3QgICAgICAgIGNhbkJlTWV0aG9kPShmdW5jKT0+XG50eXBlb2YgZnVuYz09PSdmdW5jdGlvbicmJiEoUEFTU19TVFlMRSBpbiBmdW5jKTskaM2PX29uY2UuY2FuQmVNZXRob2QoY2FuQmVNZXRob2QpO1xuaGFyZGVuKGNhbkJlTWV0aG9kKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydENoZWNrZXI9KGNvbmQsZGV0YWlscyk9PntcbmFzc2VydChjb25kLGRldGFpbHMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q2hlY2tlcihhc3NlcnRDaGVja2VyKTtcbmhhcmRlbihhc3NlcnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQ1g9KGNoZWNrKT0+e1xuY29uc3QgcmVqZWN0PShULC4uLnN1YnMpPT5jaGVjayhmYWxzZSxYKFQsLi4uc3VicykpO1xucmV0dXJuIHJlamVjdDtcbiB9OyRozY9fb25jZS5DWChDWCk7XG5oYXJkZW4oQ1gpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE93bkRhdGFEZXNjcmlwdG9yPShcbmNhbmRpZGF0ZSxcbnByb3BOYW1lLFxuc2hvdWxkQmVFbnVtZXJhYmxlLFxuY2hlY2spPT5cbntcbmNvbnN0IGRlc2M9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY2FuZGlkYXRlLHByb3BOYW1lKTtcblxucmV0dXJuKGRlc2MhPT11bmRlZmluZWR8fFxuISFjaGVjayYmQ1goY2hlY2spIGAke3EocHJvcE5hbWUpfSBwcm9wZXJ0eSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCkmJihcbmhhc093blByb3BlcnR5T2YoZGVzYywndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGFjY2Vzc29yIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKSYmKFxuc2hvdWxkQmVFbnVtZXJhYmxlP1xuZGVzYy5lbnVtZXJhYmxlfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgJHtxKHByb3BOYW1lKX0gbXVzdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gOlxuIWRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGVudW1lcmFibGUgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApP1xuZGVzYzpcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmdldE93bkRhdGFEZXNjcmlwdG9yKGdldE93bkRhdGFEZXNjcmlwdG9yKTtcbmhhcmRlbihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRUYWc9KHRhZ1JlY29yZCk9PnRhZ1JlY29yZFtTeW1ib2wudG9TdHJpbmdUYWddOyRozY9fb25jZS5nZXRUYWcoZ2V0VGFnKTtcbmhhcmRlbihnZXRUYWcpO1xuXG5jb25zdCAgICAgICAgY2hlY2tQYXNzU3R5bGU9KG9iaixwYXNzU3R5bGUsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG5wYXNzU3R5bGU9PT1leHBlY3RlZFBhc3NTdHlsZXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRXhwZWN0ZWQgJHtxKGV4cGVjdGVkUGFzc1N0eWxlKX0sIG5vdCAke3EocGFzc1N0eWxlKX06ICR7b2JqfWApO1xuXG4gfTskaM2PX29uY2UuY2hlY2tQYXNzU3R5bGUoY2hlY2tQYXNzU3R5bGUpO1xuaGFyZGVuKGNoZWNrUGFzc1N0eWxlKTtcblxuY29uc3QgbWFrZUNoZWNrVGFnUmVjb3JkPShjaGVja1Byb3RvKT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnUmVjb3JkPSh0YWdSZWNvcmQsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNPYmplY3QodGFnUmVjb3JkKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgQSBub24tb2JqZWN0IGNhbm5vdCBiZSBhIHRhZ1JlY29yZDogJHt0YWdSZWNvcmR9YCkmJihcbmlzRnJvemVuKHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBIHRhZ1JlY29yZCBtdXN0IGJlIGZyb3plbjogJHt0YWdSZWNvcmR9YCkmJihcbiFpc0FycmF5KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBbiBhcnJheSBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUGFzc1N0eWxlKFxudGFnUmVjb3JkLFxuZ2V0T3duRGF0YURlc2NyaXB0b3IodGFnUmVjb3JkLFBBU1NfU1RZTEUsZmFsc2UsY2hlY2spLnZhbHVlLFxuZXhwZWN0ZWRQYXNzU3R5bGUsXG5jaGVjaykmJihcblxudHlwZW9mIGdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxTeW1ib2wudG9TdHJpbmdUYWcsZmFsc2UsY2hlY2spLlxudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEEgW1N5bWJvbC50b1N0cmluZ1RhZ10tbmFtZWQgcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt0YWdSZWNvcmR9YCkmJlxuY2hlY2tQcm90byh0YWdSZWNvcmQsZ2V0UHJvdG90eXBlT2YodGFnUmVjb3JkKSxjaGVjaykpO1xuXG4gfTtcbnJldHVybiBoYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuIH07XG5cbmNvbnN0ICAgICAgICBjaGVja1RhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG4hIWNoZWNrJiZcbmNoZWNrKGZhbHNlLFggYEEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7dmFsfWApKTskaM2PX29uY2UuY2hlY2tUYWdSZWNvcmQoY2hlY2tUYWdSZWNvcmQpO1xuXG5oYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuXG5jb25zdCAgICAgICAgY2hlY2tGdW5jdGlvblRhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbnByb3RvIT09bnVsbCYmZ2V0UHJvdG90eXBlT2YocHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhcbmZhbHNlLFxuWCBgRm9yIGZ1bmN0aW9ucywgYSB0YWdSZWNvcmQgbXVzdCBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrRnVuY3Rpb25UYWdSZWNvcmQoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCk7XG5cblxuaGFyZGVuKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaGFzT3duUHJvcGVydHlPZiI6WyJoYXNPd25Qcm9wZXJ0eU9mIl0sImlzT2JqZWN0IjpbImlzT2JqZWN0Il0sImlzVHlwZWRBcnJheSI6WyJpc1R5cGVkQXJyYXkiXSwiUEFTU19TVFlMRSI6WyJQQVNTX1NUWUxFIl0sImNhbkJlTWV0aG9kIjpbImNhbkJlTWV0aG9kIl0sImFzc2VydENoZWNrZXIiOlsiYXNzZXJ0Q2hlY2tlciJdLCJDWCI6WyJDWCJdLCJnZXRPd25EYXRhRGVzY3JpcHRvciI6WyJnZXRPd25EYXRhRGVzY3JpcHRvciJdLCJnZXRUYWciOlsiZ2V0VGFnIl0sImNoZWNrUGFzc1N0eWxlIjpbImNoZWNrUGFzc1N0eWxlIl0sImNoZWNrVGFnUmVjb3JkIjpbImNoZWNrVGFnUmVjb3JkIl0sImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiOlsiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3Bhc3NTdHlsZU9mLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vY29weUFycmF5LmpzIiwiLi9jb3B5UmVjb3JkLmpzIiwiLi90YWdnZWQuanMiLCIuL2Vycm9yLmpzIiwiLi9yZW1vdGFibGUuanMiLCIuL3N5bWJvbC5qcyIsIi4vc2FmZS1wcm9taXNlLmpzIiwiLi9zdHJpbmcuanMiXSwiZXhwb3J0cyI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCIsImFzc2VydFBhc3NhYmxlIiwiaXNQYXNzYWJsZSIsInBhc3NTdHlsZU9mIiwidG9QYXNzYWJsZUVycm9yIiwidG9UaHJvd2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLFgsRmFpbCxxLGFubm90YXRlRXJyb3IsbWFrZUVycm9yLGlzT2JqZWN0LGlzVHlwZWRBcnJheSxQQVNTX1NUWUxFLENvcHlBcnJheUhlbHBlcixDb3B5UmVjb3JkSGVscGVyLFRhZ2dlZEhlbHBlcixFcnJvckhlbHBlcixjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyxjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcixnZXRFcnJvckNvbnN0cnVjdG9yLGlzRXJyb3JMaWtlLFJlbW90YWJsZUhlbHBlcixhc3NlcnRQYXNzYWJsZVN5bWJvbCxhc3NlcnRTYWZlUHJvbWlzZSxhc3NlcnRQYXNzYWJsZVN0cmluZzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzVHlwZWRBcnJheVwiLCBbJGjNj19hID0+IChpc1R5cGVkQXJyYXkgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5QXJyYXkuanNcIiwgW1tcIkNvcHlBcnJheUhlbHBlclwiLCBbJGjNj19hID0+IChDb3B5QXJyYXlIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlSZWNvcmQuanNcIiwgW1tcIkNvcHlSZWNvcmRIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weVJlY29yZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vdGFnZ2VkLmpzXCIsIFtbXCJUYWdnZWRIZWxwZXJcIiwgWyRozY9fYSA9PiAoVGFnZ2VkSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9lcnJvci5qc1wiLCBbW1wiRXJyb3JIZWxwZXJcIiwgWyRozY9fYSA9PiAoRXJyb3JIZWxwZXIgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2NcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N5bWJvbC5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCIuL3NhZmUtcHJvbWlzZS5qc1wiLCBbW1wiYXNzZXJ0U2FmZVByb21pc2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2FmZVByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3N0cmluZy5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTdHJpbmdcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTdHJpbmcgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0Zyb3plbixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLHZhbHVlc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBtYWtlSGVscGVyVGFibGU9KHBhc3NTdHlsZUhlbHBlcnMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEhlbHBlclRhYmxlPXtcbl9fcHJvdG9fXzpudWxsLFxuY29weUFycmF5OnVuZGVmaW5lZCxcbmNvcHlSZWNvcmQ6dW5kZWZpbmVkLFxudGFnZ2VkOnVuZGVmaW5lZCxcbmVycm9yOnVuZGVmaW5lZCxcbnJlbW90YWJsZTp1bmRlZmluZWR9O1xuXG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuY29uc3R7c3R5bGVOYW1lfT1oZWxwZXI7XG5zdHlsZU5hbWUgaW4gSGVscGVyVGFibGV8fEZhaWwgYFVucmVjb2duaXplZCBoZWxwZXI6ICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPT09dW5kZWZpbmVkfHxcbkZhaWwgYGNvbmZsaWN0aW5nIGhlbHBlcnMgZm9yICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPWhlbHBlcjtcbiB9XG5mb3IoY29uc3Qgc3R5bGVOYW1lIG9mIG93bktleXMoSGVscGVyVGFibGUpKXtcbkhlbHBlclRhYmxlW3N0eWxlTmFtZV0hPT11bmRlZmluZWR8fFxuRmFpbCBgbWlzc2luZyBoZWxwZXIgZm9yICR7cShzdHlsZU5hbWUpfWA7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKEhlbHBlclRhYmxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVBhc3NTdHlsZU9mPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuY29uc3QgSGVscGVyVGFibGU9bWFrZUhlbHBlclRhYmxlKHBhc3NTdHlsZUhlbHBlcnMpO1xuY29uc3QgcmVtb3RhYmxlSGVscGVyPUhlbHBlclRhYmxlLnJlbW90YWJsZTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcGFzc1N0eWxlTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gICAqL1xuLy9cbmNvbnN0IHBhc3NTdHlsZU9mPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGluUHJvZ3Jlc3M9bmV3IFNldCgpO1xuXG5jb25zdCBwYXNzU3R5bGVPZlJlY3VyPShpbm5lcik9PntcbmNvbnN0IGlubmVySXNPYmplY3Q9aXNPYmplY3QoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5jb25zdCBpbm5lclN0eWxlPXBhc3NTdHlsZU1lbW8uZ2V0KGlubmVyKTtcbmlmKGlubmVyU3R5bGUpe1xucmV0dXJuIGlubmVyU3R5bGU7XG4gfVxuIWluUHJvZ3Jlc3MuaGFzKGlubmVyKXx8XG5GYWlsIGBQYXNzLWJ5LWNvcHkgZGF0YSBjYW5ub3QgYmUgY3ljbGljICR7aW5uZXJ9YDtcbmluUHJvZ3Jlc3MuYWRkKGlubmVyKTtcbiB9XG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mSW50ZXJuYWwoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5wYXNzU3R5bGVNZW1vLnNldChpbm5lcixwYXNzU3R5bGUpO1xuaW5Qcm9ncmVzcy5kZWxldGUoaW5uZXIpO1xuIH1cbnJldHVybiBwYXNzU3R5bGU7XG4gfTtcblxuY29uc3QgcGFzc1N0eWxlT2ZJbnRlcm5hbD0oaW5uZXIpPT57XG5jb25zdCB0eXBlc3RyPXR5cGVvZiBpbm5lcjtcbnN3aXRjaCh0eXBlc3RyKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6e1xucmV0dXJuIHR5cGVzdHI7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmFzc2VydFBhc3NhYmxlU3RyaW5nKGlubmVyKTtcbnJldHVybidzdHJpbmcnO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChpbm5lcik7XG5yZXR1cm4nc3ltYm9sJztcbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoaW5uZXI9PT1udWxsKXtcbnJldHVybidudWxsJztcbiB9XG5pZighaXNGcm96ZW4oaW5uZXIpKXtcbmFzc2VydC5mYWlsKFxuLy9cbi8vXG5pc1R5cGVkQXJyYXkoaW5uZXIpP1xuWCBgQ2Fubm90IHBhc3MgbXV0YWJsZSB0eXBlZCBhcnJheXMgbGlrZSAke2lubmVyfS5gOlxuWCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWApO1xuXG4gfVxuaWYoaXNQcm9taXNlKGlubmVyKSl7XG5hc3NlcnRTYWZlUHJvbWlzZShpbm5lcik7XG5yZXR1cm4ncHJvbWlzZSc7XG4gfVxudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5jb25zdCBwYXNzU3R5bGVUYWc9aW5uZXJbUEFTU19TVFlMRV07XG5pZihwYXNzU3R5bGVUYWchPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihwYXNzU3R5bGVUYWcsJ3N0cmluZycpO1xuY29uc3QgaGVscGVyPUhlbHBlclRhYmxlW3Bhc3NTdHlsZVRhZ107XG5oZWxwZXIhPT11bmRlZmluZWR8fFxuRmFpbCBgVW5yZWNvZ25pemVkIFBhc3NTdHlsZTogJHtxKHBhc3NTdHlsZVRhZyl9YDtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICovcGFzc1N0eWxlVGFnKTtcbiB9XG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuaWYoaGVscGVyLmNhbkJlVmFsaWQoaW5uZXIpKXtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiBoZWxwZXIuc3R5bGVOYW1lO1xuIH1cbiB9XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5jYXNlJ2Z1bmN0aW9uJzp7XG5pc0Zyb3plbihpbm5lcil8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWA7XG50eXBlb2YgaW5uZXIudGhlbiE9PSdmdW5jdGlvbid8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLXByb21pc2UgdGhlbmFibGVzYDtcbnJlbW90YWJsZUhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybidyZW1vdGFibGUnO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoWCBgVW5yZWNvZ25pemVkIHR5cGVvZiAke3EodHlwZXN0cil9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9O1xuXG5yZXR1cm4gcGFzc1N0eWxlT2ZSZWN1cihwYXNzYWJsZSk7XG4gfTtcbnJldHVybiBoYXJkZW4ocGFzc1N0eWxlT2YpO1xuIH07XG5cbmNvbnN0ICAgICAgICBQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbD1TeW1ib2wuZm9yKCdAZW5kbyBwYXNzU3R5bGVPZicpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2woUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wpO1xuY29uc3QgICAgICAgIHBhc3NTdHlsZU9mPVxuZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpc1tQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbF18fFxubWFrZVBhc3NTdHlsZU9mKFtcbkNvcHlBcnJheUhlbHBlcixcbkNvcHlSZWNvcmRIZWxwZXIsXG5UYWdnZWRIZWxwZXIsXG5FcnJvckhlbHBlcixcblJlbW90YWJsZUhlbHBlcl0pOyRozY9fb25jZS5wYXNzU3R5bGVPZihwYXNzU3R5bGVPZik7XG5cblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlPSh2YWwpPT57XG5wYXNzU3R5bGVPZih2YWwpOy8vXG4gfTskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGUoYXNzZXJ0UGFzc2FibGUpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlPShzcGVjaW1lbik9PntcbnRyeXtcbi8vXG4vL1xucmV0dXJuIHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PXVuZGVmaW5lZDtcbiB9Y2F0Y2goXyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH07JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG5oYXJkZW4oaXNQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0obmFtZSxkZXNjKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhuYW1lLGRlc2MscGFzc1N0eWxlT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvUGFzc2FibGVFcnJvcj0oZXJyKT0+e1xuaGFyZGVuKGVycik7XG5pZihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2YpKXtcbnJldHVybiBlcnI7XG4gfVxuY29uc3R7bmFtZSxtZXNzYWdlfT1lcnI7XG5jb25zdHtjYXVzZTpjYXVzZURlc2MsZXJyb3JzOmVycm9yc0Rlc2N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlcnIpO1xubGV0IGNhdXNlO1xubGV0IGVycm9ycztcbmlmKGNhdXNlRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdjYXVzZScsY2F1c2VEZXNjKSl7XG5jYXVzZT1jYXVzZURlc2MudmFsdWU7XG4gfVxuaWYoZXJyb3JzRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdlcnJvcnMnLGVycm9yc0Rlc2MpKXtcbmVycm9ycz1lcnJvcnNEZXNjLnZhbHVlO1xuIH1cblxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvciggYCR7bmFtZX1gKXx8RXJyb3I7XG5jb25zdCBuZXdFcnJvcj1tYWtlRXJyb3IoIGAke21lc3NhZ2V9YCxlcnJDb25zdHJ1Y3Rvcix7XG4vL1xuY2F1c2UsXG5lcnJvcnN9KTtcblxuLy9cbmhhcmRlbihuZXdFcnJvcik7XG4vL1xuLy9cbi8vXG5hbm5vdGF0ZUVycm9yKG5ld0Vycm9yLFggYGNvcGllZCBmcm9tIGVycm9yICR7ZXJyfWApO1xucGFzc1N0eWxlT2YobmV3RXJyb3IpPT09J2Vycm9yJ3x8XG5GYWlsIGBFeHBlY3RlZCAke25ld0Vycm9yfSB0byBiZSBhIHBhc3NhYmxlIGVycm9yYDtcbnJldHVybiBuZXdFcnJvcjtcbiB9OyRozY9fb25jZS50b1Bhc3NhYmxlRXJyb3IodG9QYXNzYWJsZUVycm9yKTtcbmhhcmRlbih0b1Bhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9UaHJvd2FibGU9KHNwZWNpbWVuKT0+e1xuaGFyZGVuKHNwZWNpbWVuKTtcbmlmKGlzRXJyb3JMaWtlKHNwZWNpbWVuKSl7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKC8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihpc09iamVjdChzcGVjaW1lbikpe1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgZWxlbWVudHM9LyogICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyl7XG5lbGVtZW50PT09dG9UaHJvd2FibGUoZWxlbWVudCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7ZWxlbWVudH1gO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmZvcihjb25zdCB2YWwgb2YgdmFsdWVzKHJlYykpe1xudmFsPT09dG9UaHJvd2FibGUodmFsKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHt2YWx9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGc9LyogICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuY29uc3R7cGF5bG9hZH09dGc7XG5wYXlsb2FkPT09dG9UaHJvd2FibGUocGF5bG9hZCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7cGF5bG9hZH1gO1xuYnJlYWs7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXI9LyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmVyPT09dG9UaHJvd2FibGUoZXIpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VyfWA7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYEEgJHtxKHBhc3NTdHlsZSl9IGlzIG5vdCB0aHJvd2FibGU6ICR7c3BlY2ltZW59YDtcbiB9fVxuXG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbik7XG4gfTskaM2PX29uY2UudG9UaHJvd2FibGUodG9UaHJvd2FibGUpO1xuaGFyZGVuKHRvVGhyb3dhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIjpbIlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIl0sInBhc3NTdHlsZU9mIjpbInBhc3NTdHlsZU9mIl0sImFzc2VydFBhc3NhYmxlIjpbImFzc2VydFBhc3NhYmxlIl0sImlzUGFzc2FibGUiOlsiaXNQYXNzYWJsZSJdLCJ0b1Bhc3NhYmxlRXJyb3IiOlsidG9QYXNzYWJsZUVycm9yIl0sInRvVGhyb3dhYmxlIjpbInRvVGhyb3dhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFKEe3qmFwAAphcAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvcmVtb3RhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJSZW1vdGFibGVIZWxwZXIiLCJhc3NlcnRJZmFjZSIsImdldEludGVyZmFjZU9mIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxhc3NlcnRDaGVja2VyLGNhbkJlTWV0aG9kLGhhc093blByb3BlcnR5T2YsUEFTU19TVFlMRSxjaGVja1RhZ1JlY29yZCxjaGVja0Z1bmN0aW9uVGFnUmVjb3JkLGlzT2JqZWN0LGdldFRhZyxDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcImNoZWNrRnVuY3Rpb25UYWdSZWNvcmRcIiwgWyRozY9fYSA9PiAoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZSxcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tJZmFjZT0oaWZhY2UsY2hlY2spPT57XG5yZXR1cm4oXG4vL1xuKHR5cGVvZiBpZmFjZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRm9yIG5vdywgaW50ZXJmYWNlICR7aWZhY2V9IG11c3QgYmUgYSBzdHJpbmc7IHVuaW1wbGVtZW50ZWRgKSYmKFxuaWZhY2U9PT0nUmVtb3RhYmxlJ3x8XG5pZmFjZS5zdGFydHNXaXRoKCdBbGxlZ2VkOiAnKXx8XG5pZmFjZS5zdGFydHNXaXRoKCdEZWJ1Z05hbWU6ICcpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBGb3Igbm93LCBpZmFjZSAke3EoXG5pZmFjZSlcbiB9IG11c3QgYmUgXCJSZW1vdGFibGVcIiBvciBiZWdpbiB3aXRoIFwiQWxsZWdlZDogXCIgb3IgXCJEZWJ1Z05hbWU6IFwiOyB1bmltcGxlbWVudGVkYCkpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRJZmFjZT0oaWZhY2UpPT5jaGVja0lmYWNlKGlmYWNlLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRJZmFjZShhc3NlcnRJZmFjZSk7XG5oYXJkZW4oYXNzZXJ0SWZhY2UpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZVByb3RvT2Y9KG9yaWdpbmFsLGNoZWNrKT0+e1xuaXNPYmplY3Qob3JpZ2luYWwpfHxcbkZhaWwgYFJlbW90YWJsZXMgbXVzdCBiZSBvYmplY3RzIG9yIGZ1bmN0aW9uczogJHtvcmlnaW5hbH1gO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKG9yaWdpbmFsKTtcbmlmKFxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxucHJvdG89PT1udWxsfHxcbnByb3RvPT09RnVuY3Rpb24ucHJvdG90eXBlKVxue1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlbW90YWJsZXMgbXVzdCBiZSBleHBsaWNpdGx5IGRlY2xhcmVkOiAke3Eob3JpZ2luYWwpfWApO1xuXG4gfVxuXG5pZih0eXBlb2Ygb3JpZ2luYWw9PT0nb2JqZWN0Jyl7XG5jb25zdCBwcm90b1Byb3RvPWdldFByb3RvdHlwZU9mKHByb3RvKTtcbmlmKHByb3RvUHJvdG8hPT1vYmplY3RQcm90b3R5cGUmJnByb3RvUHJvdG8hPT1udWxsKXtcbi8vXG5yZXR1cm4gY2hlY2tSZW1vdGFibGUocHJvdG8sY2hlY2spO1xuIH1cbmlmKCFjaGVja1RhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9ZWxzZSBpZih0eXBlb2Ygb3JpZ2luYWw9PT0nZnVuY3Rpb24nKXtcbmlmKCFjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cblxuLy9cbmNvbnN0IHBhc3NTdHlsZUtleT0vKiAgICAgICAgICAgICAgICAgICovUEFTU19TVFlMRTtcbmNvbnN0IHRhZ0tleT0vKiAgICAgICAgICAgICAgICAgICovU3ltYm9sLnRvU3RyaW5nVGFnO1xuY29uc3R7XG4vL1xuWy8qICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZUtleV06X3Bhc3NTdHlsZURlc2MsXG5bLyogICAgICAgICAgICAgICAgICovdGFnS2V5XTp7dmFsdWU6aWZhY2V9LFxuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pO1xuXG5yZXR1cm4oXG4ob3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIHByb3BlcnRpZXMgb24gUmVtb3RhYmxlIFByb3RvICR7b3duS2V5cyhyZXN0RGVzY3MpfWApJiZcbmNoZWNrSWZhY2UoaWZhY2UsY2hlY2spKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29uZmlybWVkUmVtb3RhYmxlcz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZT0odmFsLGNoZWNrKT0+e1xuaWYoY29uZmlybWVkUmVtb3RhYmxlcy5oYXModmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighaXNGcm96ZW4odmFsKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZDWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHt2YWx9YCk7XG5cbiB9XG4vL1xuaWYoIVJlbW90YWJsZUhlbHBlci5jYW5CZVZhbGlkKHZhbCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHJlc3VsdD1jaGVja1JlbW90YWJsZVByb3RvT2YodmFsLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb25maXJtZWRSZW1vdGFibGVzLmFkZCh2YWwpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlT2Y9KHZhbCk9PntcbmlmKFxuIWlzT2JqZWN0KHZhbCl8fFxudmFsW1BBU1NfU1RZTEVdIT09J3JlbW90YWJsZSd8fFxuIWNoZWNrUmVtb3RhYmxlKHZhbCkpXG57XG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xucmV0dXJuIGdldFRhZyh2YWwpO1xuIH07JGjNj19vbmNlLmdldEludGVyZmFjZU9mKGdldEludGVyZmFjZU9mKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VPZik7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3JlbW90YWJsZScsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5jb25zdCB2YWxpZFR5cGU9XG4oaXNPYmplY3QoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tb2JqZWN0cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCkmJihcbiFpc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgYXJyYXlzIGFzIFJlbW90YWJsZSAke2NhbmRpZGF0ZX1gKTtcbmlmKCF2YWxpZFR5cGUpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYodHlwZW9mIGNhbmRpZGF0ZT09PSdvYmplY3QnKXtcbi8vXG4vL1xucmV0dXJuIG93bktleXMoZGVzY3MpLmV2ZXJ5KChrZXkpPT57XG5yZXR1cm4oXG4vL1xuKGhhc093blByb3BlcnR5T2YoZGVzY3NbLyogICAgICAgICAgICAgICAgICova2V5XSwndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggYWNjZXNzb3JzIGxpa2UgJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpbiAke2NhbmRpZGF0ZX1gKSYmKFxua2V5PT09U3ltYm9sLnRvU3RyaW5nVGFnJiZjaGVja0lmYWNlKGNhbmRpZGF0ZVtrZXldLGNoZWNrKXx8XG4oY2FuQmVNZXRob2QoY2FuZGlkYXRlW2tleV0pfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIFJlbW90YWJsZXMgd2l0aCBub24tbWV0aG9kcyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleSE9PVBBU1NfU1RZTEV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgcGFzcy1ieS1yZW1vdGUgY2Fubm90IHNoYWRvdyAke3EoUEFTU19TVFlMRSl9YCkpKTtcblxuIH0pO1xuIH1lbHNlIGlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nZnVuY3Rpb24nKXtcbi8vXG4vL1xuY29uc3R7XG5uYW1lOm5hbWVEZXNjLFxubGVuZ3RoOmxlbmd0aERlc2MsXG4vL1xuW1N5bWJvbC50b1N0cmluZ1RhZ106dG9TdHJpbmdUYWdEZXNjLFxuLi4ucmVzdERlc2NzfT1cbmRlc2NzO1xuY29uc3QgcmVzdEtleXM9b3duS2V5cyhyZXN0RGVzY3MpO1xucmV0dXJuKFxuKG5hbWVEZXNjJiZ0eXBlb2YgbmFtZURlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRmFyIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgaW4gJHtjYW5kaWRhdGV9YCkmJihcbmxlbmd0aERlc2MmJnR5cGVvZiBsZW5ndGhEZXNjLnZhbHVlPT09J251bWJlcid8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gbGVuZ3RoIG11c3QgYmUgYSBudW1iZXIsIGluICR7Y2FuZGlkYXRlfWApJiYoXG50b1N0cmluZ1RhZ0Rlc2M9PT11bmRlZmluZWR8fFxuKHR5cGVvZiB0b1N0cmluZ1RhZ0Rlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbiBAQHRvU3RyaW5nVGFnIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiZcbmNoZWNrSWZhY2UodG9TdHJpbmdUYWdEZXNjLnZhbHVlLGNoZWNrKSkmJihcbnJlc3RLZXlzLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb25zIHVuZXhwZWN0ZWQgcHJvcGVydGllcyBiZXNpZGVzIC5uYW1lIGFuZCAubGVuZ3RoICR7cmVzdEtleXN9YCkpO1xuXG4gfVxucmV0dXJuISFjaGVjayYmQ1goY2hlY2spIGB1bnJlY29nbml6ZWQgdHlwZW9mICR7Y2FuZGlkYXRlfWA7XG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSk9PmNoZWNrUmVtb3RhYmxlKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKSxcblxuZXZlcnk6KF9wYXNzYWJsZSxfZm4pPT50cnVlfSk7JGjNj19vbmNlLlJlbW90YWJsZUhlbHBlcihSZW1vdGFibGVIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0SWZhY2UiOlsiYXNzZXJ0SWZhY2UiXSwiZ2V0SW50ZXJmYWNlT2YiOlsiZ2V0SW50ZXJmYWNlT2YiXSwiUmVtb3RhYmxlSGVscGVyIjpbIlJlbW90YWJsZUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3NhZmUtcHJvbWlzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRTYWZlUHJvbWlzZSIsImlzU2FmZVByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLHEsYXNzZXJ0Q2hlY2tlcixoYXNPd25Qcm9wZXJ0eU9mLENYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtpc0Zyb3plbixnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZ309U3ltYm9sO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb21pc2VPd25LZXlzPShwcixjaGVjayk9PntcbmNvbnN0IGtleXM9b3duS2V5cyhwcik7XG5cbmlmKGtleXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB1bmtub3duS2V5cz1rZXlzLmZpbHRlcihcbihrZXkpPT50eXBlb2Yga2V5IT09J3N5bWJvbCd8fCFoYXNPd25Qcm9wZXJ0eU9mKFByb21pc2UucHJvdG90eXBlLGtleSkpO1xuXG5cbmlmKHVua25vd25LZXlzLmxlbmd0aCE9PTApe1xucmV0dXJuIENYKFxuY2hlY2spXG4gYCR7cHJ9IC0gTXVzdCBub3QgaGF2ZSBhbnkgb3duIHByb3BlcnRpZXM6ICR7cSh1bmtub3duS2V5cyl9YDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1NhZmVPd25LZXk9KGtleSk9PntcbmlmKGtleT09PXRvU3RyaW5nVGFnKXtcbi8vXG4vL1xuY29uc3QgdGFnRGVzYz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHIsdG9TdHJpbmdUYWcpO1xuYXNzZXJ0KHRhZ0Rlc2MhPT11bmRlZmluZWQpO1xucmV0dXJuKFxuKGhhc093blByb3BlcnR5T2YodGFnRGVzYywndmFsdWUnKXx8XG5DWChcbmNoZWNrKVxuIGBPd24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eSwgbm90IGFuIGFjY2Vzc29yOiAke3EodGFnRGVzYyl9YCkmJihcbnR5cGVvZiB0YWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJHtxKHRhZ0Rlc2MudmFsdWUpfWApJiYoXG4hdGFnRGVzYy5lbnVtZXJhYmxlfHxcbkNYKGNoZWNrKSBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtxKHRhZ0Rlc2MpfWApKTtcblxuIH1cbmNvbnN0IHZhbD1wcltrZXldO1xuaWYodmFsPT09dW5kZWZpbmVkfHx0eXBlb2YgdmFsPT09J251bWJlcicpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoXG50eXBlb2YgdmFsPT09J29iamVjdCcmJlxudmFsIT09bnVsbCYmXG5pc0Zyb3plbih2YWwpJiZcbmdldFByb3RvdHlwZU9mKHZhbCk9PT1PYmplY3QucHJvdG90eXBlKVxue1xuY29uc3Qgc3ViS2V5cz1vd25LZXlzKHZhbCk7XG5pZihzdWJLZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG5pZihcbnN1YktleXMubGVuZ3RoPT09MSYmXG5zdWJLZXlzWzBdPT09J2Rlc3Ryb3llZCcmJlxudmFsLmRlc3Ryb3llZD09PWZhbHNlKVxue1xucmV0dXJuIHRydWU7XG4gfVxuIH1cbnJldHVybiBDWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIE5vZGUgYXN5bmNfaG9va3MgYWRkaXRpb25zIHRvIHByb21pc2U6ICR7cHJ9LiR7cShcblN0cmluZyhrZXkpKVxuIH0gaXMgJHt2YWx9YDtcbiB9O1xuXG5yZXR1cm4ga2V5cy5ldmVyeShjaGVja1NhZmVPd25LZXkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja1NhZmVQcm9taXNlPShwcixjaGVjayk9PntcbnJldHVybihcbihpc0Zyb3plbihwcil8fENYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGJlIGZyb3plbmApJiYoXG5pc1Byb21pc2UocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBhIHByb21pc2VgKSYmKFxuZ2V0UHJvdG90eXBlT2YocHIpPT09UHJvbWlzZS5wcm90b3R5cGV8fFxuQ1goY2hlY2spIGAke3ByfSAtIE11c3QgaW5oZXJpdCBmcm9tIFByb21pc2UucHJvdG90eXBlOiAke3EoXG5nZXRQcm90b3R5cGVPZihwcikpXG4gfWApJiZcbmNoZWNrUHJvbWlzZU93bktleXMoLyogICAgICAgICAgICAgICAgICAqL3ByLGNoZWNrKSk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrU2FmZVByb21pc2UpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1NhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsKHgpPT54KTskaM2PX29uY2UuaXNTYWZlUHJvbWlzZShpc1NhZmVQcm9taXNlKTtcbmhhcmRlbihpc1NhZmVQcm9taXNlKTtcblxuY29uc3QgICAgICAgIGFzc2VydFNhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsYXNzZXJ0Q2hlY2tlcik7JGjNj19vbmNlLmFzc2VydFNhZmVQcm9taXNlKGFzc2VydFNhZmVQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzU2FmZVByb21pc2UiOlsiaXNTYWZlUHJvbWlzZSJdLCJhc3NlcnRTYWZlUHJvbWlzZSI6WyJhc3NlcnRTYWZlUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACYl18ssgcAALIHAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3N0cmluZy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8vXG5jb25zdCBoYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kPSEhU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXZWxsRm9ybWVkU3RyaW5nPWhhc1dlbGxGb3JtZWRTdHJpbmdNZXRob2Q/XG4oc3RyKT0+dHlwZW9mIHN0cj09PSdzdHJpbmcnJiZzdHIuaXNXZWxsRm9ybWVkKCk6XG4oc3RyKT0+e1xuaWYodHlwZW9mIHN0ciE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IoY29uc3QgY2ggb2Ygc3RyKXtcbi8vXG4vL1xuLy9cbmNvbnN0IGNwPS8qICAgICAgICAgICAgICAgICAqL2NoLmNvZGVQb2ludEF0KDApO1xuaWYoY3A+PTB4ZDgwMCYmY3A8PTB4ZGZmZil7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzV2VsbEZvcm1lZFN0cmluZyhpc1dlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGlzV2VsbEZvcm1lZFN0cmluZyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0V2VsbEZvcm1lZFN0cmluZz0oc3RyKT0+e1xuaXNXZWxsRm9ybWVkU3RyaW5nKHN0cil8fEZhaWwgYEV4cGVjdGVkIHdlbGwtZm9ybWVkIHVuaWNvZGUgc3RyaW5nOiAke3N0cn1gO1xuIH07JGjNj19vbmNlLmFzc2VydFdlbGxGb3JtZWRTdHJpbmcoYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5cbmNvbnN0IE9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRT1cbmdldEVudmlyb25tZW50T3B0aW9uKCdPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEUnLCdkaXNhYmxlZCcsW1xuJ2VuYWJsZWQnXSk9PT1cbidlbmFibGVkJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3RyaW5nPShzdHIpPT57XG50eXBlb2Ygc3RyPT09J3N0cmluZyd8fEZhaWwgYEV4cGVjdGVkIHN0cmluZyAke3N0cn1gO1xuIU9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRXx8YXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhzdHIpO1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlU3RyaW5nKGFzc2VydFBhc3NhYmxlU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1dlbGxGb3JtZWRTdHJpbmciOlsiaXNXZWxsRm9ybWVkU3RyaW5nIl0sImFzc2VydFdlbGxGb3JtZWRTdHJpbmciOlsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRQYXNzYWJsZVN0cmluZyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABmP1mV/AkAAPwJAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3N5bWJvbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCB3ZWxsS25vd25TeW1ib2xOYW1lcz1uZXcgTWFwKFxub3duS2V5cyhTeW1ib2wpLlxuZmlsdGVyKFxuKG5hbWUpPT50eXBlb2YgbmFtZT09PSdzdHJpbmcnJiZ0eXBlb2YgU3ltYm9sW25hbWVdPT09J3N5bWJvbCcpLlxuXG5maWx0ZXIoKG5hbWUpPT57XG4vL1xuIW5hbWUuc3RhcnRzV2l0aCgnQEAnKXx8XG5GYWlsIGBEaWQgbm90IGV4cGVjdCBTeW1ib2wgdG8gaGF2ZSBhIHN5bWJvbC12YWx1ZWQgcHJvcGVydHkgbmFtZSBzdGFydGluZyB3aXRoIFwiQEBcIiAke3EoXG5uYW1lKVxuIH1gO1xucmV0dXJuIHRydWU7XG4gfSlcbi8vXG4ubWFwKChuYW1lKT0+W1N5bWJvbFtuYW1lXSwgYEBAJHtuYW1lfWBdKSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGVTeW1ib2w9KHN5bSk9PlxudHlwZW9mIHN5bT09PSdzeW1ib2wnJiYoXG50eXBlb2YgU3ltYm9sLmtleUZvcihzeW0pPT09J3N0cmluZyd8fHdlbGxLbm93blN5bWJvbE5hbWVzLmhhcyhzeW0pKTskaM2PX29uY2UuaXNQYXNzYWJsZVN5bWJvbChpc1Bhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihpc1Bhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3ltYm9sPShzeW0pPT5cbmlzUGFzc2FibGVTeW1ib2woc3ltKXx8XG5GYWlsIGBPbmx5IHJlZ2lzdGVyZWQgc3ltYm9scyBvciB3ZWxsLWtub3duIHN5bWJvbHMgYXJlIHBhc3NhYmxlOiAke3Eoc3ltKX1gOyRozY9fb25jZS5hc3NlcnRQYXNzYWJsZVN5bWJvbChhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBuYW1lRm9yUGFzc2FibGVTeW1ib2w9KHN5bSk9PntcbmNvbnN0IG5hbWU9U3ltYm9sLmtleUZvcihzeW0pO1xuaWYobmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gd2VsbEtub3duU3ltYm9sTmFtZXMuZ2V0KHN5bSk7XG4gfVxuaWYobmFtZS5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBgQEAke25hbWV9YDtcbiB9XG5yZXR1cm4gbmFtZTtcbiB9OyRozY9fb25jZS5uYW1lRm9yUGFzc2FibGVTeW1ib2wobmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihuYW1lRm9yUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXNzYWJsZVN5bWJvbEZvck5hbWU9KG5hbWUpPT57XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY29uc3QgbWF0Y2g9QXRBdFByZWZpeFBhdHRlcm4uZXhlYyhuYW1lKTtcbmlmKG1hdGNoKXtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmlmKHN1ZmZpeC5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBTeW1ib2wuZm9yKHN1ZmZpeCk7XG4gfWVsc2V7XG5jb25zdCBzeW09U3ltYm9sW3N1ZmZpeF07XG5pZih0eXBlb2Ygc3ltPT09J3N5bWJvbCcpe1xucmV0dXJuIHN5bTtcbiB9XG5GYWlsIGBSZXNlcnZlZCBmb3Igd2VsbCBrbm93biBzeW1ib2wgJHtxKHN1ZmZpeCl9OiAke3EobmFtZSl9YDtcbiB9XG4gfVxucmV0dXJuIFN5bWJvbC5mb3IobmFtZSk7XG4gfTskaM2PX29uY2UucGFzc2FibGVTeW1ib2xGb3JOYW1lKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG5oYXJkZW4ocGFzc2FibGVTeW1ib2xGb3JOYW1lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUGFzc2FibGVTeW1ib2wiOlsiaXNQYXNzYWJsZVN5bWJvbCJdLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiOlsibmFtZUZvclBhc3NhYmxlU3ltYm9sIl0sInBhc3NhYmxlU3ltYm9sRm9yTmFtZSI6WyJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAYNVjnhQHAAAUBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy90YWdnZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIlRhZ2dlZEhlbHBlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLGFzc2VydENoZWNrZXIsY2hlY2tUYWdSZWNvcmQsUEFTU19TVFlMRSxnZXRPd25EYXRhRGVzY3JpcHRvcixjaGVja1Bhc3NTdHlsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJjaGVja1Bhc3NTdHlsZVwiLCBbJGjNj19hID0+IChjaGVja1Bhc3NTdHlsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgVGFnZ2VkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3RhZ2dlZCcsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmNoZWNrUGFzc1N0eWxlKGNhbmRpZGF0ZSxjYW5kaWRhdGVbUEFTU19TVFlMRV0sJ3RhZ2dlZCcsY2hlY2spLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja1RhZ1JlY29yZChjYW5kaWRhdGUsJ3RhZ2dlZCcsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06X2xhYmVsRGVzYyxcbnBheWxvYWQ6X3BheWxvYWREZXNjLC8vXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xub3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuRmFpbCBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIHRhZ2dlZCByZWNvcmQgJHtvd25LZXlzKHJlc3REZXNjcyl9YDtcblxuLy9cbi8vXG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdwYXlsb2FkJyx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH19KTskaM2PX29uY2UuVGFnZ2VkSGVscGVyKFRhZ2dlZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUYWdnZWRIZWxwZXIiOlsiVGFnZ2VkSGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZU9mLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0UmVjb3JkIiwiYXNzZXJ0UmVtb3RhYmxlIiwiaXNDb3B5QXJyYXkiLCJpc1JlY29yZCIsImlzUmVtb3RhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxwYXNzU3R5bGVPZjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNDb3B5QXJyYXk9KGFycik9PnBhc3NTdHlsZU9mKGFycik9PT0nY29weUFycmF5JzskaM2PX29uY2UuaXNDb3B5QXJyYXkoaXNDb3B5QXJyYXkpO1xuaGFyZGVuKGlzQ29weUFycmF5KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVjb3JkPShyZWNvcmQpPT5wYXNzU3R5bGVPZihyZWNvcmQpPT09J2NvcHlSZWNvcmQnOyRozY9fb25jZS5pc1JlY29yZChpc1JlY29yZCk7XG5oYXJkZW4oaXNSZWNvcmQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVtb3RhYmxlPShyZW1vdGFibGUpPT5wYXNzU3R5bGVPZihyZW1vdGFibGUpPT09J3JlbW90YWJsZSc7JGjNj19vbmNlLmlzUmVtb3RhYmxlKGlzUmVtb3RhYmxlKTtcbmhhcmRlbihpc1JlbW90YWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvcHlBcnJheT0oYXJyYXksb3B0TmFtZU9mQXJyYXk9J0FsbGVnZWQgYXJyYXknKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKGFycmF5KTtcbnBhc3NTdHlsZT09PSdjb3B5QXJyYXknfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZBcnJheSl9ICR7YXJyYXl9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weUFycmF5KGFzc2VydENvcHlBcnJheSk7XG5oYXJkZW4oYXNzZXJ0Q29weUFycmF5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UmVjb3JkPShyZWNvcmQsb3B0TmFtZU9mUmVjb3JkPSdBbGxlZ2VkIHJlY29yZCcpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmVjb3JkKTtcbnBhc3NTdHlsZT09PSdjb3B5UmVjb3JkJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVjb3JkKX0gJHtyZWNvcmR9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgcmVjb3JkLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlY29yZChhc3NlcnRSZWNvcmQpO1xuaGFyZGVuKGFzc2VydFJlY29yZCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlbW90YWJsZT0oXG5yZW1vdGFibGUsXG5vcHROYW1lT2ZSZW1vdGFibGU9J0FsbGVnZWQgcmVtb3RhYmxlJyk9Plxue1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlbW90YWJsZSk7XG5wYXNzU3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVtb3RhYmxlKX0gJHtyZW1vdGFibGV9IG11c3QgYmUgYSByZW1vdGFibGUsIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UmVtb3RhYmxlKGFzc2VydFJlbW90YWJsZSk7XG5oYXJkZW4oYXNzZXJ0UmVtb3RhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weUFycmF5IjpbImlzQ29weUFycmF5Il0sImlzUmVjb3JkIjpbImlzUmVjb3JkIl0sImlzUmVtb3RhYmxlIjpbImlzUmVtb3RhYmxlIl0sImFzc2VydENvcHlBcnJheSI6WyJhc3NlcnRDb3B5QXJyYXkiXSwiYXNzZXJ0UmVjb3JkIjpbImFzc2VydFJlY29yZCJdLCJhc3NlcnRSZW1vdGFibGUiOlsiYXNzZXJ0UmVtb3RhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMWHV+m3DgAAtw4AAB4AAABAZW5kby9wYXR0ZXJucy12MS40LjYvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMva2V5cy9jaGVja0tleS5qcyIsIi4vc3JjL2tleXMvY29weVNldC5qcyIsIi4vc3JjL2tleXMvY29weUJhZy5qcyIsIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiLCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiLCIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIiwiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiLCJiYWdVbmlvbiIsImJhZ1VuaW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIiwiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIiwic2V0Q29tcGFyZSIsInNldENvbXBhcmUiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2tleXMvY2hlY2tLZXkuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29weVNldC5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb3B5QmFnLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIjpbWyJpc0tleSIsImlzS2V5Il0sWyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiXSxbImFzc2VydFNjYWxhcktleSIsImFzc2VydFNjYWxhcktleSJdLFsiaXNDb3B5U2V0IiwiaXNDb3B5U2V0Il0sWyJhc3NlcnRDb3B5U2V0IiwiYXNzZXJ0Q29weVNldCJdLFsibWFrZUNvcHlTZXQiLCJtYWtlQ29weVNldCJdLFsiZ2V0Q29weVNldEtleXMiLCJnZXRDb3B5U2V0S2V5cyJdLFsiaXNDb3B5QmFnIiwiaXNDb3B5QmFnIl0sWyJhc3NlcnRDb3B5QmFnIiwiYXNzZXJ0Q29weUJhZyJdLFsibWFrZUNvcHlCYWciLCJtYWtlQ29weUJhZyJdLFsibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLFsiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5QmFnRW50cmllcyJdLFsiaXNDb3B5TWFwIiwiaXNDb3B5TWFwIl0sWyJhc3NlcnRDb3B5TWFwIiwiYXNzZXJ0Q29weU1hcCJdLFsibWFrZUNvcHlNYXAiLCJtYWtlQ29weU1hcCJdLFsiZ2V0Q29weU1hcEVudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyJdXSwiLi9zcmMva2V5cy9jb3B5U2V0LmpzIjpbWyJjb2VyY2VUb0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyJdXSwiLi9zcmMva2V5cy9jb3B5QmFnLmpzIjpbWyJjb2VyY2VUb0JhZ0VudHJpZXMiLCJjb2VyY2VUb0JhZ0VudHJpZXMiXV0sIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiOltbImJhZ0NvbXBhcmUiLCJiYWdDb21wYXJlIl0sWyJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSJdLFsiY29tcGFyZUtleXMiLCJjb21wYXJlS2V5cyJdLFsia2V5TFQiLCJrZXlMVCJdLFsia2V5TFRFIiwia2V5TFRFIl0sWyJrZXlFUSIsImtleUVRIl0sWyJrZXlHVEUiLCJrZXlHVEUiXSxbImtleUdUIiwia2V5R1QiXV0sIi4vc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyI6W1siZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNJc1N1cGVyc2V0Il0sWyJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiXSxbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzQ29tcGFyZSJdLFsiZWxlbWVudHNVbmlvbiIsImVsZW1lbnRzVW5pb24iXSxbImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLFsiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0ludGVyc2VjdGlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sWyJzZXRJc1N1cGVyc2V0Iiwic2V0SXNTdXBlcnNldCJdLFsic2V0SXNEaXNqb2ludCIsInNldElzRGlzam9pbnQiXSxbInNldFVuaW9uIiwic2V0VW5pb24iXSxbInNldERpc2pvaW50VW5pb24iLCJzZXREaXNqb2ludFVuaW9uIl0sWyJzZXRJbnRlcnNlY3Rpb24iLCJzZXRJbnRlcnNlY3Rpb24iXSxbInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFN1YnRyYWN0Il1dLCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiOltbImJhZ0lzU3VwZXJiYWciLCJiYWdJc1N1cGVyYmFnIl0sWyJiYWdVbmlvbiIsImJhZ1VuaW9uIl0sWyJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJbnRlcnNlY3Rpb24iXSxbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdEaXNqb2ludFN1YnRyYWN0Il1dLCIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiOltbIk0iLCJNIl0sWyJnZXRSYW5rQ292ZXIiLCJnZXRSYW5rQ292ZXIiXSxbImlzUGF0dGVybiIsImlzUGF0dGVybiJdLFsiYXNzZXJ0UGF0dGVybiIsImFzc2VydFBhdHRlcm4iXSxbIm1hdGNoZXMiLCJtYXRjaGVzIl0sWyJtdXN0TWF0Y2giLCJtdXN0TWF0Y2giXSxbImlzQXdhaXRBcmdHdWFyZCIsImlzQXdhaXRBcmdHdWFyZCJdLFsiYXNzZXJ0QXdhaXRBcmdHdWFyZCIsImFzc2VydEF3YWl0QXJnR3VhcmQiXSxbImlzUmF3R3VhcmQiLCJpc1Jhd0d1YXJkIl0sWyJhc3NlcnRSYXdHdWFyZCIsImFzc2VydFJhd0d1YXJkIl0sWyJhc3NlcnRNZXRob2RHdWFyZCIsImFzc2VydE1ldGhvZEd1YXJkIl0sWyJhc3NlcnRJbnRlcmZhY2VHdWFyZCIsImFzc2VydEludGVyZmFjZUd1YXJkIl0sWyJraW5kT2YiLCJraW5kT2YiXV0sIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiOltbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIiwiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiXSxbImdldE1ldGhvZEd1YXJkUGF5bG9hZCIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCJdLFsiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIiwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIl0sWyJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIiwiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyJdXSwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6W1sibGlzdERpZmZlcmVuY2UiLCJsaXN0RGlmZmVyZW5jZSJdXSwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOltbIm9iamVjdE1hcCIsIm9iamVjdE1hcCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAW6U5DDkyAAA5MgAAKgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNi9zcmMva2V5cy9jaGVja0tleS5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiLCJAZW5kby9lcnJvcnMiLCIuL2NvcHlTZXQuanMiLCIuL2NvcHlCYWcuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRDb3B5QmFnIiwiYXNzZXJ0Q29weU1hcCIsImFzc2VydENvcHlTZXQiLCJhc3NlcnRLZXkiLCJhc3NlcnRQcmltaXRpdmVLZXkiLCJhc3NlcnRTY2FsYXJLZXkiLCJjaGVja0NvcHlCYWciLCJjaGVja0NvcHlNYXAiLCJjaGVja0NvcHlTZXQiLCJjaGVja0tleSIsImNoZWNrU2NhbGFyS2V5IiwiY29weU1hcEtleVNldCIsImV2ZXJ5Q29weUJhZ0VudHJ5IiwiZXZlcnlDb3B5TWFwS2V5IiwiZXZlcnlDb3B5TWFwVmFsdWUiLCJldmVyeUNvcHlTZXRLZXkiLCJnZXRDb3B5QmFnRW50cmllcyIsImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJ5QXJyYXkiLCJnZXRDb3B5TWFwS2V5cyIsImdldENvcHlNYXBWYWx1ZXMiLCJnZXRDb3B5U2V0S2V5cyIsImlzQ29weUJhZyIsImlzQ29weU1hcCIsImlzQ29weVNldCIsImlzS2V5IiwiaXNQcmltaXRpdmVLZXkiLCJpc1NjYWxhcktleSIsIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiLCJtYWtlQ29weU1hcCIsIm1ha2VDb3B5U2V0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsYXNzZXJ0UGFzc2FibGUsRmFyLGdldFRhZyxpc09iamVjdCxtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLGlkZW50Q2hlY2tlcixYLHEsRmFpbCxjaGVja0VsZW1lbnRzLG1ha2VTZXRPZkVsZW1lbnRzLGNoZWNrQmFnRW50cmllcyxtYWtlQmFnT2ZFbnRyaWVzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qc1wiLCBbW1wiaWRlbnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlTZXQuanNcIiwgW1tcImNoZWNrRWxlbWVudHNcIiwgWyRozY9fYSA9PiAoY2hlY2tFbGVtZW50cyA9ICRozY9fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjNj19hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRozY9fYSldXV1dLFtcIi4vY29weUJhZy5qc1wiLCBbW1wiY2hlY2tCYWdFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGNoZWNrQmFnRW50cmllcyA9ICRozY9fYSldXSxbXCJtYWtlQmFnT2ZFbnRyaWVzXCIsIFskaM2PX2EgPT4gKG1ha2VCYWdPZkVudHJpZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJpbWl0aXZlS2V5PSh2YWwsY2hlY2spPT57XG5pZihpc09iamVjdCh2YWwpKXtcbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbmNoZWNrKGZhbHNlLFggYEEgJHtxKHR5cGVvZiB2YWwpfSBjYW5ub3QgYmUgYSBwcmltaXRpdmU6ICR7dmFsfWApKTtcblxuIH1cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUodmFsKTtcbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQcmltaXRpdmVLZXk9KHZhbCk9PmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc1ByaW1pdGl2ZUtleShpc1ByaW1pdGl2ZUtleSk7XG5oYXJkZW4oaXNQcmltaXRpdmVLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFByaW1pdGl2ZUtleT0odmFsKT0+e1xuY2hlY2tQcmltaXRpdmVLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydFByaW1pdGl2ZUtleShhc3NlcnRQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGFzc2VydFByaW1pdGl2ZUtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1NjYWxhcktleT0odmFsLGNoZWNrKT0+e1xuaWYoaXNQcmltaXRpdmVLZXkodmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbmlmKHBhc3NTdHlsZT09PSdyZW1vdGFibGUnKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgYSBzY2FsYXIga2V5OiAke3ZhbH1gKTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5jaGVja1NjYWxhcktleShjaGVja1NjYWxhcktleSk7XG5jb25zdCAgICAgICAgaXNTY2FsYXJLZXk9KHZhbCk9PmNoZWNrU2NhbGFyS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc1NjYWxhcktleShpc1NjYWxhcktleSk7XG5oYXJkZW4oaXNTY2FsYXJLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFNjYWxhcktleT0odmFsKT0+e1xuY2hlY2tTY2FsYXJLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydFNjYWxhcktleShhc3NlcnRTY2FsYXJLZXkpO1xuaGFyZGVuKGFzc2VydFNjYWxhcktleSk7XG5cbi8vXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBrZXlNZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja0tleT0odmFsLGNoZWNrKT0+e1xuaWYoIWlzT2JqZWN0KHZhbCkpe1xuLy9cbi8vXG5hc3NlcnRQYXNzYWJsZSh2YWwpO1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmlmKGtleU1lbW8uaGFzKHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja0tleUludGVybmFsKHZhbCxjaGVjayk7XG5pZihyZXN1bHQpe1xuLy9cbi8vXG4vL1xua2V5TWVtby5hZGQodmFsKTtcbiB9XG4vL1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UuY2hlY2tLZXkoY2hlY2tLZXkpO1xuaGFyZGVuKGNoZWNrS2V5KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNLZXk9KHZhbCk9PmNoZWNrS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc0tleShpc0tleSk7XG5oYXJkZW4oaXNLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEtleT0odmFsKT0+e1xuY2hlY2tLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydEtleShhc3NlcnRLZXkpO1xuaGFyZGVuKGFzc2VydEtleSk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5U2V0TWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5U2V0PShzLGNoZWNrKT0+e1xuaWYoY29weVNldE1lbW8uaGFzKHMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihzKT09PSd0YWdnZWQnJiZnZXRUYWcocyk9PT0nY29weVNldCd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weVNldDogJHtzfWApKSYmXG5jaGVja0VsZW1lbnRzKHMucGF5bG9hZCxjaGVjaykmJlxuY2hlY2tLZXkocy5wYXlsb2FkLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb3B5U2V0TWVtby5hZGQocyk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlTZXQoY2hlY2tDb3B5U2V0KTtcbmhhcmRlbihjaGVja0NvcHlTZXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9PmNoZWNrQ29weVNldChzLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuaGFyZGVuKGlzQ29weVNldCk7XG5cbi8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlTZXQ9KHMpPT57XG5jaGVja0NvcHlTZXQocyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb3B5U2V0KGFzc2VydENvcHlTZXQpO1xuaGFyZGVuKGFzc2VydENvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weVNldEtleXM9KHMpPT57XG5hc3NlcnRDb3B5U2V0KHMpO1xucmV0dXJuIHMucGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRDb3B5U2V0S2V5cyhnZXRDb3B5U2V0S2V5cyk7XG5oYXJkZW4oZ2V0Q29weVNldEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlTZXRLZXk9KHMsZm4pPT5cbmdldENvcHlTZXRLZXlzKHMpLmV2ZXJ5KChrZXksaW5kZXgpPT5mbihrZXksaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5U2V0S2V5KGV2ZXJ5Q29weVNldEtleSk7XG5oYXJkZW4oZXZlcnlDb3B5U2V0S2V5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5U2V0PShlbGVtZW50SXRlcik9PntcbmNvbnN0IHJlc3VsdD1tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50SXRlcik7XG5hc3NlcnRDb3B5U2V0KHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5U2V0KG1ha2VDb3B5U2V0KTtcbmhhcmRlbihtYWtlQ29weVNldCk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5QmFnTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5QmFnPShiLGNoZWNrKT0+e1xuaWYoY29weUJhZ01lbW8uaGFzKGIpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihiKT09PSd0YWdnZWQnJiZnZXRUYWcoYik9PT0nY29weUJhZyd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weUJhZzogJHtifWApKSYmXG5jaGVja0JhZ0VudHJpZXMoYi5wYXlsb2FkLGNoZWNrKSYmXG5jaGVja0tleShiLnBheWxvYWQsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvcHlCYWdNZW1vLmFkZChiKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrQ29weUJhZyhjaGVja0NvcHlCYWcpO1xuaGFyZGVuKGNoZWNrQ29weUJhZyk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5QmFnPShiKT0+Y2hlY2tDb3B5QmFnKGIsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNDb3B5QmFnKGlzQ29weUJhZyk7XG5oYXJkZW4oaXNDb3B5QmFnKTtcblxuLypcblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q29weUJhZz0oYik9PntcbmNoZWNrQ29weUJhZyhiLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlCYWcoYXNzZXJ0Q29weUJhZyk7XG5oYXJkZW4oYXNzZXJ0Q29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5QmFnRW50cmllcz0oYik9PntcbmFzc2VydENvcHlCYWcoYik7XG5yZXR1cm4gYi5wYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldENvcHlCYWdFbnRyaWVzKGdldENvcHlCYWdFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5QmFnRW50cmllcyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weUJhZ0VudHJ5PShiLGZuKT0+XG5nZXRDb3B5QmFnRW50cmllcyhiKS5ldmVyeSgoZW50cnksaW5kZXgpPT5mbihlbnRyeSxpbmRleCkpOyRozY9fb25jZS5ldmVyeUNvcHlCYWdFbnRyeShldmVyeUNvcHlCYWdFbnRyeSk7XG5oYXJkZW4oZXZlcnlDb3B5QmFnRW50cnkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlCYWc9KGJhZ0VudHJ5SXRlcik9PntcbmNvbnN0IHJlc3VsdD1tYWtlQmFnT2ZFbnRyaWVzKGJhZ0VudHJ5SXRlcik7XG5hc3NlcnRDb3B5QmFnKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5QmFnKG1ha2VDb3B5QmFnKTtcbmhhcmRlbihtYWtlQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weUJhZ0Zyb21FbGVtZW50cz0oZWxlbWVudEl0ZXIpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCBzb3J0ZWQ9c29ydEJ5UmFuayhlbGVtZW50SXRlcixmdWxsQ29tcGFyZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVudHJpZXM9W107XG5mb3IobGV0IGk9MDtpPHNvcnRlZC5sZW5ndGg7KXtcbmNvbnN0IGs9c29ydGVkW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoajxzb3J0ZWQubGVuZ3RoJiZmdWxsQ29tcGFyZShrLHNvcnRlZFtqXSk9PT0wKXtcbmorPTE7XG4gfVxuZW50cmllcy5wdXNoKFtrLEJpZ0ludChqLWkpXSk7XG5pPWo7XG4gfVxucmV0dXJuIG1ha2VDb3B5QmFnKGVudHJpZXMpO1xuIH07JGjNj19vbmNlLm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKG1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKTtcbmhhcmRlbihtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5TWFwTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5TWFwPShtLGNoZWNrKT0+e1xuaWYoY29weU1hcE1lbW8uaGFzKG0pKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCEocGFzc1N0eWxlT2YobSk9PT0ndGFnZ2VkJyYmZ2V0VGFnKG0pPT09J2NvcHlNYXAnKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgTm90IGEgY29weU1hcDogJHttfWApO1xuIH1cbmNvbnN0e3BheWxvYWR9PW07XG5pZihwYXNzU3R5bGVPZihwYXlsb2FkKSE9PSdjb3B5UmVjb3JkJyl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgcGF5bG9hZCBtdXN0IGJlIGEgcmVjb3JkOiAke219YCk7XG4gfVxuY29uc3R7a2V5cyx2YWx1ZXMsLi4ucmVzdH09cGF5bG9hZDtcbmNvbnN0IHJlc3VsdD1cbihvd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBvbmx5IGhhdmUgLmtleXMgYW5kIC52YWx1ZXM6ICR7bX1gKSkmJlxuXG5jaGVja0VsZW1lbnRzKGtleXMsY2hlY2spJiZcbmNoZWNrS2V5KGtleXMsY2hlY2spJiYoXG5wYXNzU3R5bGVPZih2YWx1ZXMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgLnZhbHVlcyBtdXN0IGJlIGEgY29weUFycmF5OiAke219YCkpJiYoXG5rZXlzLmxlbmd0aD09PXZhbHVlcy5sZW5ndGh8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGtleXMgYW5kIHZhbHVlczogJHttfWApKTtcblxuaWYocmVzdWx0KXtcbmNvcHlNYXBNZW1vLmFkZChtKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrQ29weU1hcChjaGVja0NvcHlNYXApO1xuaGFyZGVuKGNoZWNrQ29weU1hcCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5TWFwPShtKT0+Y2hlY2tDb3B5TWFwKG0saWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNDb3B5TWFwKGlzQ29weU1hcCk7XG5oYXJkZW4oaXNDb3B5TWFwKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5TWFwPShtKT0+e1xuY2hlY2tDb3B5TWFwKG0sYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weU1hcChhc3NlcnRDb3B5TWFwKTtcbmhhcmRlbihhc3NlcnRDb3B5TWFwKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weU1hcEtleXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC5rZXlzO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBLZXlzKGdldENvcHlNYXBLZXlzKTtcbmhhcmRlbihnZXRDb3B5TWFwS2V5cyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBWYWx1ZXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC52YWx1ZXM7XG4gfTskaM2PX29uY2UuZ2V0Q29weU1hcFZhbHVlcyhnZXRDb3B5TWFwVmFsdWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwVmFsdWVzKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyeUFycmF5PShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5yZXR1cm4gaGFyZGVuKGtleXMubWFwKChrZXksaSk9PltrZXksdmFsdWVzW2ldXSkpO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBFbnRyeUFycmF5KGdldENvcHlNYXBFbnRyeUFycmF5KTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyaWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5jb25zdHtsZW5ndGh9PS8qICAgICAgICAgICAgICAgICova2V5cztcbnJldHVybiBGYXIoJ0NvcHlNYXAgZW50cmllcyBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmF0b3InLHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoaTxsZW5ndGgpe1xucmVzdWx0PWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTpba2V5c1tpXSx2YWx1ZXNbaV1dfSk7XG5pKz0xO1xucmV0dXJuIHJlc3VsdDtcbiB9ZWxzZXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH19KTtcblxuIH19KTtcblxuIH07JGjNj19vbmNlLmdldENvcHlNYXBFbnRyaWVzKGdldENvcHlNYXBFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwS2V5PShtLGZuKT0+XG5nZXRDb3B5TWFwS2V5cyhtKS5ldmVyeSgoa2V5LGluZGV4KT0+Zm4oa2V5LGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weU1hcEtleShldmVyeUNvcHlNYXBLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcEtleSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwVmFsdWU9KG0sZm4pPT5cbmdldENvcHlNYXBWYWx1ZXMobSkuZXZlcnkoKHZhbHVlLGluZGV4KT0+Zm4odmFsdWUsaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5TWFwVmFsdWUoZXZlcnlDb3B5TWFwVmFsdWUpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY29weU1hcEtleVNldD0obSk9PlxuLy9cbm1ha2VUYWdnZWQoJ2NvcHlTZXQnLG0ucGF5bG9hZC5rZXlzKTskaM2PX29uY2UuY29weU1hcEtleVNldChjb3B5TWFwS2V5U2V0KTtcbmhhcmRlbihjb3B5TWFwS2V5U2V0KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlNYXA9KGVudHJpZXMpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHNvcnRlZEVudHJpZXM9c29ydEJ5UmFuayhlbnRyaWVzLGNvbXBhcmVBbnRpUmFuayk7XG5jb25zdCBrZXlzPXNvcnRlZEVudHJpZXMubWFwKChbayxfdl0pPT5rKTtcbmNvbnN0IHZhbHVlcz1zb3J0ZWRFbnRyaWVzLm1hcCgoW19rLHZdKT0+dik7XG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnY29weU1hcCcse2tleXMsdmFsdWVzfSk7XG5hc3NlcnRDb3B5TWFwKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5TWFwKG1ha2VDb3B5TWFwKTtcbmhhcmRlbihtYWtlQ29weU1hcCk7XG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrS2V5SW50ZXJuYWw9KHZhbCxjaGVjayk9PntcbmNvbnN0IGNoZWNrSXQ9KGNoaWxkKT0+Y2hlY2tLZXkoY2hpbGQsY2hlY2spO1xuXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xucmV0dXJuIE9iamVjdC52YWx1ZXModmFsKS5ldmVyeShjaGVja0l0KTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbnJldHVybiB2YWwuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRhZz1nZXRUYWcodmFsKTtcbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4oXG5jaGVja0NvcHlNYXAodmFsLGNoZWNrKSYmXG4vL1xuLy9cbi8vXG5ldmVyeUNvcHlNYXBWYWx1ZSh2YWwsY2hlY2tJdCkpO1xuXG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG5jaGVjayhmYWxzZSxYIGBBIHBhc3NhYmxlIHRhZ2dlZCAke3EodGFnKX0gaXMgbm90IGEga2V5OiAke3ZhbH1gKSk7XG5cbiB9fVxuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKHBhc3NTdHlsZSl9IGNhbm5vdCBiZSBhIGtleWApO1xuIH1cbmRlZmF1bHQ6e1xuLy9cbi8vXG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX06ICR7dmFsfWA7XG4gfX1cblxuIH07XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1ByaW1pdGl2ZUtleSI6WyJpc1ByaW1pdGl2ZUtleSJdLCJhc3NlcnRQcmltaXRpdmVLZXkiOlsiYXNzZXJ0UHJpbWl0aXZlS2V5Il0sImNoZWNrU2NhbGFyS2V5IjpbImNoZWNrU2NhbGFyS2V5Il0sImlzU2NhbGFyS2V5IjpbImlzU2NhbGFyS2V5Il0sImFzc2VydFNjYWxhcktleSI6WyJhc3NlcnRTY2FsYXJLZXkiXSwiY2hlY2tLZXkiOlsiY2hlY2tLZXkiXSwiaXNLZXkiOlsiaXNLZXkiXSwiYXNzZXJ0S2V5IjpbImFzc2VydEtleSJdLCJjaGVja0NvcHlTZXQiOlsiY2hlY2tDb3B5U2V0Il0sImlzQ29weVNldCI6WyJpc0NvcHlTZXQiXSwiYXNzZXJ0Q29weVNldCI6WyJhc3NlcnRDb3B5U2V0Il0sImdldENvcHlTZXRLZXlzIjpbImdldENvcHlTZXRLZXlzIl0sImV2ZXJ5Q29weVNldEtleSI6WyJldmVyeUNvcHlTZXRLZXkiXSwibWFrZUNvcHlTZXQiOlsibWFrZUNvcHlTZXQiXSwiY2hlY2tDb3B5QmFnIjpbImNoZWNrQ29weUJhZyJdLCJpc0NvcHlCYWciOlsiaXNDb3B5QmFnIl0sImFzc2VydENvcHlCYWciOlsiYXNzZXJ0Q29weUJhZyJdLCJnZXRDb3B5QmFnRW50cmllcyI6WyJnZXRDb3B5QmFnRW50cmllcyJdLCJldmVyeUNvcHlCYWdFbnRyeSI6WyJldmVyeUNvcHlCYWdFbnRyeSJdLCJtYWtlQ29weUJhZyI6WyJtYWtlQ29weUJhZyJdLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyI6WyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLCJjaGVja0NvcHlNYXAiOlsiY2hlY2tDb3B5TWFwIl0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwiYXNzZXJ0Q29weU1hcCI6WyJhc3NlcnRDb3B5TWFwIl0sImdldENvcHlNYXBLZXlzIjpbImdldENvcHlNYXBLZXlzIl0sImdldENvcHlNYXBWYWx1ZXMiOlsiZ2V0Q29weU1hcFZhbHVlcyJdLCJnZXRDb3B5TWFwRW50cnlBcnJheSI6WyJnZXRDb3B5TWFwRW50cnlBcnJheSJdLCJnZXRDb3B5TWFwRW50cmllcyI6WyJnZXRDb3B5TWFwRW50cmllcyJdLCJldmVyeUNvcHlNYXBLZXkiOlsiZXZlcnlDb3B5TWFwS2V5Il0sImV2ZXJ5Q29weU1hcFZhbHVlIjpbImV2ZXJ5Q29weU1hcFZhbHVlIl0sImNvcHlNYXBLZXlTZXQiOlsiY29weU1hcEtleVNldCJdLCJtYWtlQ29weU1hcCI6WyJtYWtlQ29weU1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACEP4sHExUAABMVAAAtAAAAQGVuZG8vcGF0dGVybnMtdjEuNC42L3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NoZWNrS2V5LmpzIiwiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbImJhZ0NvbXBhcmUiLCJjb21wYXJlS2V5cyIsImtleUVRIiwia2V5R1QiLCJrZXlHVEUiLCJrZXlMVCIsImtleUxURSIsInNldENvbXBhcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsZ2V0VGFnLGNvbXBhcmVSYW5rLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlcyx0cml2aWFsQ29tcGFyYXRvcixxLEZhaWwsYXNzZXJ0S2V5LGdldENvcHlCYWdFbnRyaWVzLGdldENvcHlNYXBFbnRyeUFycmF5LGdldENvcHlTZXRLZXlzLG1ha2VDb21wYXJlQ29sbGVjdGlvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiY29tcGFyZVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZVJhbmsgPSAkaM2PX2EpXV0sW1wicmVjb3JkTmFtZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkTmFtZXMgPSAkaM2PX2EpXV0sW1wicmVjb3JkVmFsdWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZFZhbHVlcyA9ICRozY9fYSldXSxbXCJ0cml2aWFsQ29tcGFyYXRvclwiLCBbJGjNj19hID0+ICh0cml2aWFsQ29tcGFyYXRvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY2hlY2tLZXkuanNcIiwgW1tcImFzc2VydEtleVwiLCBbJGjNj19hID0+IChhc3NlcnRLZXkgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weUJhZ0VudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJ5QXJyYXkgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weVNldEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaM2PX2EpXV1dXSxbXCIuL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzXCIsIFtbXCJtYWtlQ29tcGFyZUNvbGxlY3Rpb25cIiwgWyRozY9fYSA9PiAobWFrZUNvbXBhcmVDb2xsZWN0aW9uID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNldENvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbihzKT0+aGFyZGVuKGdldENvcHlTZXRLZXlzKHMpLm1hcCgoa2V5KT0+W2tleSwxXSkpLFxuXG4wLFxudHJpdmlhbENvbXBhcmF0b3IpOyRozY9fb25jZS5zZXRDb21wYXJlKHNldENvbXBhcmUpO1xuXG5oYXJkZW4oc2V0Q29tcGFyZSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBiYWdDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbmdldENvcHlCYWdFbnRyaWVzLFxuMG4sXG50cml2aWFsQ29tcGFyYXRvcik7JGjNj19vbmNlLmJhZ0NvbXBhcmUoYmFnQ29tcGFyZSk7XG5cbmhhcmRlbihiYWdDb21wYXJlKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCBBQlNFTlQ9U3ltYm9sKCdhYnNlbnQnKTtcbi8qXG5cblxuXG5cblxuXG4gKi9cbi8vXG5jb25zdCBfbWFwQ29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG5nZXRDb3B5TWFwRW50cnlBcnJheSxcbkFCU0VOVCxcbihsZWZ0VmFsdWUscmlnaHRWYWx1ZSk9PntcbmlmKGxlZnRWYWx1ZT09PUFCU0VOVCYmcmlnaHRWYWx1ZT09PUFCU0VOVCl7XG50aHJvdyBGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBhYnNlbnQgZW50cnkgcGFpcmA7XG4gfWVsc2UgaWYobGVmdFZhbHVlPT09QUJTRU5UKXtcbnJldHVybi0xO1xuIH1lbHNlIGlmKHJpZ2h0VmFsdWU9PT1BQlNFTlQpe1xucmV0dXJuIDE7XG4gfWVsc2V7XG4vL1xucmV0dXJuIGNvbXBhcmVLZXlzKGxlZnRWYWx1ZSxyaWdodFZhbHVlKTtcbiB9XG4gfSk7XG5cbmhhcmRlbihfbWFwQ29tcGFyZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb21wYXJlS2V5cz0obGVmdCxyaWdodCk9PntcbmFzc2VydEtleShsZWZ0KTtcbmFzc2VydEtleShyaWdodCk7XG5jb25zdCBsZWZ0U3R5bGU9cGFzc1N0eWxlT2YobGVmdCk7XG5jb25zdCByaWdodFN0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0KTtcbmlmKGxlZnRTdHlsZSE9PXJpZ2h0U3R5bGUpe1xuLy9cbnJldHVybiBOYU47XG4gfVxuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzpcbmNhc2UnYmlnaW50JzpcbmNhc2Unc3RyaW5nJzpcbmNhc2Unc3ltYm9sJzp7XG4vL1xucmV0dXJuIGNvbXBhcmVSYW5rKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnbnVtYmVyJzp7XG5jb25zdCByYW5rQ29tcD1jb21wYXJlUmFuayhsZWZ0LHJpZ2h0KTtcbmlmKHJhbmtDb21wPT09MCl7XG5yZXR1cm4gMDtcbiB9XG5pZihOdW1iZXIuaXNOYU4obGVmdCl8fE51bWJlci5pc05hTihyaWdodCkpe1xuLy9cbmFzc2VydCghTnVtYmVyLmlzTmFOKGxlZnQpfHwhTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gTmFOO1xuIH1cbi8vXG4vL1xucmV0dXJuIHJhbmtDb21wO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5pZihsZWZ0PT09cmlnaHQpe1xucmV0dXJuIDA7XG4gfVxuLy9cbi8vXG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlbj1NYXRoLm1pbihsZWZ0Lmxlbmd0aCxyaWdodC5sZW5ndGgpO1xuZm9yKGxldCBpPTA7aTxsZW47aSs9MSl7XG4vL1xuY29uc3QgcmVzdWx0PWNvbXBhcmVLZXlzKGxlZnRbaV0scmlnaHRbaV0pO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG4vL1xuLy9cbi8vXG5yZXR1cm4gY29tcGFyZVJhbmsobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuY29uc3QgbGVmdE5hbWVzPXJlY29yZE5hbWVzKGxlZnQpO1xuLy9cbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG4vL1xuaWYoIWtleUVRKGxlZnROYW1lcyxyaWdodE5hbWVzKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBOYU47XG4gfVxuLy9cbmNvbnN0IGxlZnRWYWx1ZXM9cmVjb3JkVmFsdWVzKGxlZnQsbGVmdE5hbWVzKTtcbi8vXG5jb25zdCByaWdodFZhbHVlcz1yZWNvcmRWYWx1ZXMocmlnaHQscmlnaHROYW1lcyk7XG4vL1xuLy9cbmxldCByZXN1bHQ9MDtcbmZvcihsZXQgaT0wO2k8bGVmdFZhbHVlcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBjb21wPWNvbXBhcmVLZXlzKGxlZnRWYWx1ZXNbaV0scmlnaHRWYWx1ZXNbaV0pO1xuaWYoTnVtYmVyLmlzTmFOKGNvbXApKXtcbnJldHVybiBOYU47XG4gfVxuaWYocmVzdWx0IT09Y29tcCYmY29tcCE9PTApe1xuaWYocmVzdWx0PT09MCl7XG5yZXN1bHQ9Y29tcDtcbiB9ZWxzZXtcbmFzc2VydChcbnJlc3VsdD09PS0xJiZjb21wPT09MXx8cmVzdWx0PT09MSYmY29tcD09PS0xKTtcblxucmV0dXJuIE5hTjtcbiB9XG4gfVxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNhc2UndGFnZ2VkJzp7XG4vL1xuY29uc3QgbGVmdFRhZz1nZXRUYWcobGVmdCk7XG4vL1xuY29uc3QgcmlnaHRUYWc9Z2V0VGFnKHJpZ2h0KTtcbmlmKGxlZnRUYWchPT1yaWdodFRhZyl7XG4vL1xucmV0dXJuIE5hTjtcbiB9XG5zd2l0Y2gobGVmdFRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbi8vXG5yZXR1cm4gc2V0Q29tcGFyZShsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbi8vXG5yZXR1cm4gYmFnQ29tcGFyZShsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbi8vXG4vL1xudGhyb3cgRmFpbCBgTWFwIGNvbXBhcmlzb24gbm90IHlldCBpbXBsZW1lbnRlZDogJHtsZWZ0fSB2cyAke3JpZ2h0fWA7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHRhZyAke3EobGVmdFRhZyl9OiAke2xlZnR9YDtcbiB9fVxuXG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHBhc3NTdHlsZSAke3EobGVmdFN0eWxlKX06ICR7bGVmdH1gO1xuIH19XG5cbiB9OyRozY9fb25jZS5jb21wYXJlS2V5cyhjb21wYXJlS2V5cyk7XG5oYXJkZW4oY29tcGFyZUtleXMpO1xuXG5jb25zdCAgICAgICAga2V5TFQ9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KTwwOyRozY9fb25jZS5rZXlMVChrZXlMVCk7XG5oYXJkZW4oa2V5TFQpO1xuXG5jb25zdCAgICAgICAga2V5TFRFPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk8PTA7JGjNj19vbmNlLmtleUxURShrZXlMVEUpO1xuaGFyZGVuKGtleUxURSk7XG5cbmNvbnN0ICAgICAgICBrZXlFUT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPT09MDskaM2PX29uY2Uua2V5RVEoa2V5RVEpO1xuaGFyZGVuKGtleUVRKTtcblxuY29uc3QgICAgICAgIGtleUdURT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPj0wOyRozY9fb25jZS5rZXlHVEUoa2V5R1RFKTtcbmhhcmRlbihrZXlHVEUpO1xuXG5jb25zdCAgICAgICAga2V5R1Q9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KT4wOyRozY9fb25jZS5rZXlHVChrZXlHVCk7XG5oYXJkZW4oa2V5R1QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0Q29tcGFyZSI6WyJzZXRDb21wYXJlIl0sImJhZ0NvbXBhcmUiOlsiYmFnQ29tcGFyZSJdLCJjb21wYXJlS2V5cyI6WyJjb21wYXJlS2V5cyJdLCJrZXlMVCI6WyJrZXlMVCJdLCJrZXlMVEUiOlsia2V5TFRFIl0sImtleUVRIjpbImtleUVRIl0sImtleUdURSI6WyJrZXlHVEUiXSwia2V5R1QiOlsia2V5R1QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAATJtmFscNAADHDQAAKQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNi9zcmMva2V5cy9jb3B5QmFnLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRCYWdFbnRyaWVzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIiwiY2hlY2tCYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIiwibWFrZUJhZ09mRW50cmllcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsY29tcGFyZUFudGlSYW5rLGlzUmFua1NvcnRlZCxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLFg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wiaXNSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGlzUmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tOb0R1cGxpY2F0ZUtleXM9KGJhZ0VudHJpZXMsZnVsbENvbXBhcmUsY2hlY2spPT57XG4vL1xuLy9cbi8vXG4vL1xuZnVsbENvbXBhcmU9ZnVsbENvbXBhcmV8fG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbi8vXG4vL1xuLy9cbmJhZ0VudHJpZXM9c29ydEJ5UmFuayhiYWdFbnRyaWVzLGZ1bGxDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09YmFnRW50cmllcztcbmZvcihsZXQgaT0xO2k8bGVuZ3RoO2krPTEpe1xuY29uc3QgazA9YmFnRW50cmllc1tpLTFdWzBdO1xuY29uc3QgazE9YmFnRW50cmllc1tpXVswXTtcbmlmKGZ1bGxDb21wYXJlKGswLGsxKT09PTApe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYHZhbHVlIGhhcyBkdXBsaWNhdGUga2V5czogJHtrMH1gKTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzPShiYWdFbnRyaWVzLGZ1bGxDb21wYXJlPXVuZGVmaW5lZCk9PntcbmNoZWNrTm9EdXBsaWNhdGVLZXlzKGJhZ0VudHJpZXMsZnVsbENvbXBhcmUsYXNzZXJ0Q2hlY2tlcik7XG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5hc3NlcnROb0R1cGxpY2F0ZUtleXMoYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKTtcbmNvbnN0ICAgICAgICBjaGVja0JhZ0VudHJpZXM9KGJhZ0VudHJpZXMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihiYWdFbnRyaWVzKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGVudHJpZXMgb2YgYSBjb3B5QmFnIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmlmKCFpc1JhbmtTb3J0ZWQoYmFnRW50cmllcyxjb21wYXJlQW50aVJhbmspKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGVudHJpZXMgb2YgYSBjb3B5QmFnIG11c3QgYmUgc29ydGVkIGluIHJldmVyc2UgcmFuayBvcmRlcjogJHtiYWdFbnRyaWVzfWApO1xuXG4gfVxuZm9yKGNvbnN0IGVudHJ5IG9mIGJhZ0VudHJpZXMpe1xuaWYoXG5wYXNzU3R5bGVPZihlbnRyeSkhPT0nY29weUFycmF5J3x8XG5lbnRyeS5sZW5ndGghPT0yfHxcbnR5cGVvZiBlbnRyeVsxXSE9PSdiaWdpbnQnKVxue1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGJlIHBhaXIgb2YgYSBrZXkgYW5kIGEgYmlnaW50IHJlcHJlc2VudGluZyBhIGNvdW50OiAke2VudHJ5fWApO1xuXG4gfVxuaWYoZW50cnlbMV08MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEVhY2ggZW50cnkgb2YgYSBjb3B5QmFnIG11c3QgaGF2ZSBhIHBvc2l0aXZlIGNvdW50OiAke2VudHJ5fWApO1xuXG4gfVxuIH1cbi8vXG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZUtleXMoYmFnRW50cmllcyx1bmRlZmluZWQsY2hlY2spO1xuIH07JGjNj19vbmNlLmNoZWNrQmFnRW50cmllcyhjaGVja0JhZ0VudHJpZXMpO1xuaGFyZGVuKGNoZWNrQmFnRW50cmllcyk7XG5cbi8vXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEJhZ0VudHJpZXM9KGJhZ0VudHJpZXMpPT57XG5jaGVja0JhZ0VudHJpZXMoYmFnRW50cmllcyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRCYWdFbnRyaWVzKGFzc2VydEJhZ0VudHJpZXMpO1xuaGFyZGVuKGFzc2VydEJhZ0VudHJpZXMpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZVRvQmFnRW50cmllcz0oYmFnRW50cmllc0xpc3QpPT57XG5jb25zdCBiYWdFbnRyaWVzPXNvcnRCeVJhbmsoYmFnRW50cmllc0xpc3QsY29tcGFyZUFudGlSYW5rKTtcbmFzc2VydEJhZ0VudHJpZXMoYmFnRW50cmllcyk7XG5yZXR1cm4gYmFnRW50cmllcztcbiB9OyRozY9fb25jZS5jb2VyY2VUb0JhZ0VudHJpZXMoY29lcmNlVG9CYWdFbnRyaWVzKTtcbmhhcmRlbihjb2VyY2VUb0JhZ0VudHJpZXMpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUJhZ09mRW50cmllcz0oYmFnRW50cnlJdGVyKT0+XG5tYWtlVGFnZ2VkKCdjb3B5QmFnJyxjb2VyY2VUb0JhZ0VudHJpZXMoYmFnRW50cnlJdGVyKSk7JGjNj19vbmNlLm1ha2VCYWdPZkVudHJpZXMobWFrZUJhZ09mRW50cmllcyk7XG5oYXJkZW4obWFrZUJhZ09mRW50cmllcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3NlcnROb0R1cGxpY2F0ZUtleXMiOlsiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIl0sImNoZWNrQmFnRW50cmllcyI6WyJjaGVja0JhZ0VudHJpZXMiXSwiYXNzZXJ0QmFnRW50cmllcyI6WyJhc3NlcnRCYWdFbnRyaWVzIl0sImNvZXJjZVRvQmFnRW50cmllcyI6WyJjb2VyY2VUb0JhZ0VudHJpZXMiXSwibWFrZUJhZ09mRW50cmllcyI6WyJtYWtlQmFnT2ZFbnRyaWVzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACmeZ2zOCwAAzgsAACkAAABAZW5kby9wYXR0ZXJucy12MS40LjYvc3JjL2tleXMvY29weVNldC5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0RWxlbWVudHMiLCJhc3NlcnROb0R1cGxpY2F0ZXMiLCJjaGVja0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyIsIm1ha2VTZXRPZkVsZW1lbnRzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixjb21wYXJlQW50aVJhbmssaXNSYW5rU29ydGVkLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJpc1JhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoaXNSYW5rU29ydGVkID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja05vRHVwbGljYXRlcz0oZWxlbWVudHMsZnVsbENvbXBhcmUsY2hlY2spPT57XG4vL1xuLy9cbi8vXG4vL1xuZnVsbENvbXBhcmU9ZnVsbENvbXBhcmV8fG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmVsZW1lbnRzPXNvcnRCeVJhbmsoZWxlbWVudHMsZnVsbENvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbGVtZW50cztcbmZvcihsZXQgaT0xO2k8bGVuZ3RoO2krPTEpe1xuY29uc3QgazA9ZWxlbWVudHNbaS0xXTtcbmNvbnN0IGsxPWVsZW1lbnRzW2ldO1xuaWYoZnVsbENvbXBhcmUoazAsazEpPT09MCl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgdmFsdWUgaGFzIGR1cGxpY2F0ZSBrZXlzOiAke2swfWApO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZXM9KGVsZW1lbnRzLGZ1bGxDb21wYXJlPXVuZGVmaW5lZCk9PntcbmNoZWNrTm9EdXBsaWNhdGVzKGVsZW1lbnRzLGZ1bGxDb21wYXJlLGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVzKGFzc2VydE5vRHVwbGljYXRlcyk7XG5jb25zdCAgICAgICAgY2hlY2tFbGVtZW50cz0oZWxlbWVudHMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihlbGVtZW50cykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBrZXlzIG9mIGEgY29weVNldCBvciBjb3B5TWFwIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGVsZW1lbnRzLGNvbXBhcmVBbnRpUmFuaykpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBUaGUga2V5cyBvZiBhIGNvcHlTZXQgb3IgY29weU1hcCBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZXMoZWxlbWVudHMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRozY9fb25jZS5jaGVja0VsZW1lbnRzKGNoZWNrRWxlbWVudHMpO1xuaGFyZGVuKGNoZWNrRWxlbWVudHMpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0RWxlbWVudHM9KGVsZW1lbnRzKT0+e1xuY2hlY2tFbGVtZW50cyhlbGVtZW50cyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRFbGVtZW50cyhhc3NlcnRFbGVtZW50cyk7XG5oYXJkZW4oYXNzZXJ0RWxlbWVudHMpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZVRvRWxlbWVudHM9KGVsZW1lbnRzTGlzdCk9PntcbmNvbnN0IGVsZW1lbnRzPXNvcnRCeVJhbmsoZWxlbWVudHNMaXN0LGNvbXBhcmVBbnRpUmFuayk7XG5hc3NlcnRFbGVtZW50cyhlbGVtZW50cyk7XG5yZXR1cm4gZWxlbWVudHM7XG4gfTskaM2PX29uY2UuY29lcmNlVG9FbGVtZW50cyhjb2VyY2VUb0VsZW1lbnRzKTtcbmhhcmRlbihjb2VyY2VUb0VsZW1lbnRzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXRPZkVsZW1lbnRzPShlbGVtZW50SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weVNldCcsY29lcmNlVG9FbGVtZW50cyhlbGVtZW50SXRlcikpOyRozY9fb25jZS5tYWtlU2V0T2ZFbGVtZW50cyhtYWtlU2V0T2ZFbGVtZW50cyk7XG5oYXJkZW4obWFrZVNldE9mRWxlbWVudHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVzIjpbImFzc2VydE5vRHVwbGljYXRlcyJdLCJjaGVja0VsZW1lbnRzIjpbImNoZWNrRWxlbWVudHMiXSwiYXNzZXJ0RWxlbWVudHMiOlsiYXNzZXJ0RWxlbWVudHMiXSwiY29lcmNlVG9FbGVtZW50cyI6WyJjb2VyY2VUb0VsZW1lbnRzIl0sIm1ha2VTZXRPZkVsZW1lbnRzIjpbIm1ha2VTZXRPZkVsZW1lbnRzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAE2RIifgEgAA4BIAADkAAABAZW5kby9wYXR0ZXJucy12MS40LjYvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIiwiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyIsIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLG1ha2VJdGVyYXRvcixtYWtlQXJyYXlJdGVyYXRvcixxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUl0ZXJhdG9yXCIsIFskaM2PX2EgPT4gKG1ha2VJdGVyYXRvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlQXJyYXlJdGVyYXRvclwiLCBbJGjNj19hID0+IChtYWtlQXJyYXlJdGVyYXRvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXM9KGVudHJpZXMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG4vL1xuYXNzZXJ0UmFua1NvcnRlZChlbnRyaWVzLHJhbmtDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZW50cmllcztcbmxldCBpPTA7XG5sZXQgc2FtZVJhbmtJdGVyYXRvcjtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9PntcbmlmKHNhbWVSYW5rSXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PXNhbWVSYW5rSXRlcmF0b3IubmV4dCgpO1xuaWYoIXJlc3VsdC5kb25lKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuc2FtZVJhbmtJdGVyYXRvcj11bmRlZmluZWQ7XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgZW50cnk9ZW50cmllc1tpXTtcbi8vXG5sZXQgaj1pKzE7XG53aGlsZShqPGxlbmd0aCYmcmFua0NvbXBhcmUoZW50cnlbMF0sZW50cmllc1tqXVswXSk9PT0wKXtcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG4vL1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTplbnRyeX0pO1xuIH1cbmNvbnN0IHRpZXM9ZW50cmllcy5zbGljZShpLGopO1xuaT1qO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBzb3J0ZWRUaWVzPXNvcnRCeVJhbmsodGllcyxmdWxsQ29tcGFyZSk7XG5mb3IobGV0IGs9MTtrPHNvcnRlZFRpZXMubGVuZ3RoO2srPTEpe1xuLy9cbmNvbnN0W2tleTBdPXNvcnRlZFRpZXNbay0xXTtcbmNvbnN0W2tleTFdPXNvcnRlZFRpZXNba107XG5NYXRoLnNpZ24oZnVsbENvbXBhcmUoa2V5MCxrZXkxKSl8fFxuRmFpbCBgRHVwbGljYXRlIGVudHJ5IGtleTogJHtrZXkwfWA7XG4gfVxuc2FtZVJhbmtJdGVyYXRvcj1tYWtlQXJyYXlJdGVyYXRvcihzb3J0ZWRUaWVzKTtcbnJldHVybiBzYW1lUmFua0l0ZXJhdG9yLm5leHQoKTtcbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfSk7XG4gfTtcbmhhcmRlbihnZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzPShcbmMxLFxuYzIsXG5nZXRFbnRyaWVzLFxuYWJzZW50VmFsdWUpPT5cbntcbmNvbnN0IGUxPWdldEVudHJpZXMoYzEpO1xuY29uc3QgZTI9Z2V0RW50cmllcyhjMik7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCB4PWdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMoZTEsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHk9Z2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyhlMixjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuXG4vL1xuLy9cbmxldCB4RG9uZTtcbmxldCB4S2V5O1xubGV0IHhWYWx1ZTtcbmxldCB5RG9uZTtcbmxldCB5S2V5O1xubGV0IHlWYWx1ZTtcbmNvbnN0IG5vbkVudHJ5PVt1bmRlZmluZWQsdW5kZWZpbmVkXTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBtdXN0IG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbmNvbnN0IHJlc3VsdD14VmFsdWU7XG4oe2RvbmU6eERvbmUsdmFsdWU6W3hLZXkseFZhbHVlXT1ub25FbnRyeX09eC5uZXh0KCkpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xubmV4dFgoKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBtdXN0IG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbmNvbnN0IHJlc3VsdD15VmFsdWU7XG4oe2RvbmU6eURvbmUsdmFsdWU6W3lLZXkseVZhbHVlXT1ub25FbnRyeX09eS5uZXh0KCkpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xubmV4dFkoKTtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9PntcbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xudmFsdWU9W3VuZGVmaW5lZCxhYnNlbnRWYWx1ZSxhYnNlbnRWYWx1ZV07XG4gfWVsc2UgaWYoeERvbmUpe1xudmFsdWU9W3lLZXksYWJzZW50VmFsdWUsbmV4dFkoKV07XG4gfWVsc2UgaWYoeURvbmUpe1xudmFsdWU9W3hLZXksbmV4dFgoKSxhYnNlbnRWYWx1ZV07XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeEtleSx5S2V5KTtcbmlmKGNvbXA9PT0wKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksbmV4dFkoKV07XG4gfWVsc2UgaWYoY29tcDwwKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksYWJzZW50VmFsdWVdO1xuIH1lbHNlIGlmKGNvbXA+MCl7XG52YWx1ZT1beUtleSxhYnNlbnRWYWx1ZSxuZXh0WSgpXTtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYFVuZXhwZWN0ZWQga2V5IGNvbXBhcmlzb24gJHtxKGNvbXApfSBmb3IgJHt4S2V5fSB2cyAke3lLZXl9YDtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH0pO1xuIH07JGjNj19vbmNlLmdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKTtcbmhhcmRlbihnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvbXBhcmVDb2xsZWN0aW9uPShnZXRFbnRyaWVzLGFic2VudFZhbHVlLGNvbXBhcmVWYWx1ZXMpPT5cbmhhcmRlbigobGVmdCxyaWdodCk9PntcbmNvbnN0IG1lcmdlZD1nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhcbmxlZnQsXG5yaWdodCxcbmdldEVudHJpZXMsXG5hYnNlbnRWYWx1ZSk7XG5cbmxldCBsZWZ0SXNCaWdnZXI9ZmFsc2U7XG5sZXQgcmlnaHRJc0JpZ2dlcj1mYWxzZTtcbmZvcihjb25zdFtfa2V5LGxlZnRWYWx1ZSxyaWdodFZhbHVlXW9mIG1lcmdlZCl7XG5jb25zdCBjb21wPWNvbXBhcmVWYWx1ZXMobGVmdFZhbHVlLHJpZ2h0VmFsdWUpO1xuaWYoY29tcD09PTApe1xuLy9cbmNvbnRpbnVlO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG4vL1xucmlnaHRJc0JpZ2dlcj10cnVlO1xuIH1lbHNlIGlmKGNvbXA+MCl7XG4vL1xubGVmdElzQmlnZ2VyPXRydWU7XG4gfWVsc2V7XG5OdW1iZXIuaXNOYU4oY29tcCl8fFxuLy9cbkZhaWwgYFVuZXhwZWN0ZWQgdmFsdWUgY29tcGFyaXNvbiAke3EoY29tcCl9IGZvciAke2xlZnRWYWx1ZX0gdnMgJHtyaWdodFZhbHVlfWA7XG5yZXR1cm4gTmFOO1xuIH1cbmlmKGxlZnRJc0JpZ2dlciYmcmlnaHRJc0JpZ2dlcil7XG5yZXR1cm4gTmFOO1xuIH1cbiB9XG4vL1xucmV0dXJuIGxlZnRJc0JpZ2dlcj8xOnJpZ2h0SXNCaWdnZXI/LTE6MDtcbiB9KTskaM2PX29uY2UubWFrZUNvbXBhcmVDb2xsZWN0aW9uKG1ha2VDb21wYXJlQ29sbGVjdGlvbik7XG5oYXJkZW4obWFrZUNvbXBhcmVDb2xsZWN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzIjpbImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzIl0sIm1ha2VDb21wYXJlQ29sbGVjdGlvbiI6WyJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWzrVy1IWAABSFgAANQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NvcHlCYWcuanMiXSwiZXhwb3J0cyI6WyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSXNEaXNqb2ludCIsImJhZ0lzU3VwZXJiYWciLCJiYWdVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLHEsRmFpbCxhc3NlcnROb0R1cGxpY2F0ZUtleXMsbWFrZUJhZ09mRW50cmllczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY29weUJhZy5qc1wiLCBbW1wiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzXCIsIFskaM2PX2EgPT4gKGFzc2VydE5vRHVwbGljYXRlS2V5cyA9ICRozY9fYSldXSxbXCJtYWtlQmFnT2ZFbnRyaWVzXCIsIFskaM2PX2EgPT4gKG1ha2VCYWdPZkVudHJpZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZ1dpbmRvd1Jlc29ydD0oYmFnRW50cmllcyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoYmFnRW50cmllcyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWJhZ0VudHJpZXM7XG5sZXQgaT0wO1xubGV0IG9wdElubmVySXRlcmF0b3I7XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT5cbmhhcmRlbih7XG5uZXh0OigpPT57XG5pZihvcHRJbm5lckl0ZXJhdG9yKXtcbmNvbnN0IHJlc3VsdD1vcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbmlmKHJlc3VsdC5kb25lKXtcbm9wdElubmVySXRlcmF0b3I9dW5kZWZpbmVkO1xuLy9cbiB9ZWxzZXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbmlmKGk8bGVuZ3RoKXtcbmNvbnN0IGVudHJ5PWJhZ0VudHJpZXNbaV07XG5sZXQgaj1pKzE7XG53aGlsZShcbmo8bGVuZ3RoJiZcbnJhbmtDb21wYXJlKGVudHJ5WzBdLGJhZ0VudHJpZXNbal1bMF0pPT09MClcbntcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlOmVudHJ5fSk7XG4gfVxuY29uc3Qgc2ltaWxhclJ1bj1iYWdFbnRyaWVzLnNsaWNlKGksaik7XG5pPWo7XG5jb25zdCByZXNvcnRlZD1zb3J0QnlSYW5rKHNpbWlsYXJSdW4sZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKHJlc29ydGVkLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbi8vXG4vL1xub3B0SW5uZXJJdGVyYXRvcj1yZXNvcnRlZFtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gb3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6W251bGwsMG5dfSk7XG4gfVxuIH19KX0pO1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWVyZ2U9KHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKT0+e1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG5jb25zdCB4cz1iYWdXaW5kb3dSZXNvcnQoeGJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHlzPWJhZ1dpbmRvd1Jlc29ydCh5YmFnRW50cmllcyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAqL1xubGV0IHg7XG5sZXQgeGM7XG5sZXQgeERvbmU7XG4vKiAgICAgICAgICAgICovXG5sZXQgeTtcbmxldCB5YztcbmxldCB5RG9uZTtcblxuY29uc3QgeGk9eHNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe1xuZG9uZTp4RG9uZSxcbnZhbHVlOlt4LHhjXX09XG54aS5uZXh0KCkpO1xuIH07XG5uZXh0WCgpO1xuXG5jb25zdCB5aT15c1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5jb25zdCBuZXh0WT0oKT0+e1xuIXlEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbih7XG5kb25lOnlEb25lLFxudmFsdWU6W3kseWNdfT1cbnlpLm5leHQoKSk7XG4gfTtcbm5leHRZKCk7XG5cbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbi8vXG52YWx1ZT1bbnVsbCwwbiwwbl07XG4gfWVsc2UgaWYoeERvbmUpe1xuLy9cbnZhbHVlPVt5LDBuLHljXTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoeURvbmUpe1xuLy9cbnZhbHVlPVt4LHhjLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHgseSk7XG5pZihjb21wPT09MCl7XG4vL1xudmFsdWU9W3gseGMseWNdO1xubmV4dFgoKTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG52YWx1ZT1beCx4Yywwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuLy9cbmNvbXA+MHx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY29tcCAke3EoY29tcCl9YDtcbnZhbHVlPVt5LDBuLHljXTtcbm5leHRZKCk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9O1xuaGFyZGVuKG1lcmdlKTtcblxuLy9cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySXNTdXBlcmJhZz0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yzx5Yyl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vL1xuLy9cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJJc0Rpc2pvaW50PSh4eWkpPT57XG5mb3IoY29uc3RbX20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0xbiYmeWM+PTFuKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJVbmlvbj0oeHlpKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xucmVzdWx0LnB1c2goW20seGMreWNdKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJJbnRlcnNlY3Rpb249KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmNvbnN0IG1jPXhjPD15Yz94Yzp5YztcbnJlc3VsdC5wdXNoKFttLG1jXSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVyRGlzam9pbnRTdWJ0cmFjdD0oeHlpKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuY29uc3QgbWM9eGMteWM7XG5tYz49MG58fEZhaWwgYHJpZ2h0IGVsZW1lbnQgJHttfSB3YXMgbm90IGluIGxlZnRgO1xuaWYobWM+PTFuKXtcbi8vXG5yZXN1bHQucHVzaChbbSxtY10pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbmNvbnN0IG1lcmdlaWZ5PShiYWdJdGVyT3ApPT4oeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpPT5cbmJhZ0l0ZXJPcChtZXJnZSh4YmFnRW50cmllcyx5YmFnRW50cmllcykpO1xuXG5jb25zdCBiYWdFbnRyaWVzSXNTdXBlcmJhZz1tZXJnZWlmeShiYWdJdGVySXNTdXBlcmJhZyk7XG5jb25zdCBiYWdFbnRyaWVzSXNEaXNqb2ludD1tZXJnZWlmeShiYWdJdGVySXNEaXNqb2ludCk7XG5jb25zdCBiYWdFbnRyaWVzVW5pb249bWVyZ2VpZnkoYmFnSXRlclVuaW9uKTtcbmNvbnN0IGJhZ0VudHJpZXNJbnRlcnNlY3Rpb249bWVyZ2VpZnkoYmFnSXRlckludGVyc2VjdGlvbik7XG5jb25zdCBiYWdFbnRyaWVzRGlzam9pbnRTdWJ0cmFjdD1tZXJnZWlmeShiYWdJdGVyRGlzam9pbnRTdWJ0cmFjdCk7XG5cbmNvbnN0IHJhd0JhZ2lmeT0oYmFnRW50cmllc09wKT0+KHhiYWcseWJhZyk9PlxuYmFnRW50cmllc09wKHhiYWcucGF5bG9hZCx5YmFnLnBheWxvYWQpO1xuXG5jb25zdCBiYWdpZnk9KGJhZ0VudHJpZXNPcCk9Pih4YmFnLHliYWcpPT5cbm1ha2VCYWdPZkVudHJpZXMoYmFnRW50cmllc09wKHhiYWcucGF5bG9hZCx5YmFnLnBheWxvYWQpKTtcblxuY29uc3QgICAgICAgIGJhZ0lzU3VwZXJiYWc9cmF3QmFnaWZ5KGJhZ0VudHJpZXNJc1N1cGVyYmFnKTskaM2PX29uY2UuYmFnSXNTdXBlcmJhZyhiYWdJc1N1cGVyYmFnKTtcbmNvbnN0ICAgICAgICBiYWdJc0Rpc2pvaW50PXJhd0JhZ2lmeShiYWdFbnRyaWVzSXNEaXNqb2ludCk7JGjNj19vbmNlLmJhZ0lzRGlzam9pbnQoYmFnSXNEaXNqb2ludCk7XG5jb25zdCAgICAgICAgYmFnVW5pb249YmFnaWZ5KGJhZ0VudHJpZXNVbmlvbik7JGjNj19vbmNlLmJhZ1VuaW9uKGJhZ1VuaW9uKTtcbmNvbnN0ICAgICAgICBiYWdJbnRlcnNlY3Rpb249YmFnaWZ5KGJhZ0VudHJpZXNJbnRlcnNlY3Rpb24pOyRozY9fb25jZS5iYWdJbnRlcnNlY3Rpb24oYmFnSW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBiYWdEaXNqb2ludFN1YnRyYWN0PWJhZ2lmeShiYWdFbnRyaWVzRGlzam9pbnRTdWJ0cmFjdCk7JGjNj19vbmNlLmJhZ0Rpc2pvaW50U3VidHJhY3QoYmFnRGlzam9pbnRTdWJ0cmFjdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJiYWdJc1N1cGVyYmFnIjpbImJhZ0lzU3VwZXJiYWciXSwiYmFnSXNEaXNqb2ludCI6WyJiYWdJc0Rpc2pvaW50Il0sImJhZ1VuaW9uIjpbImJhZ1VuaW9uIl0sImJhZ0ludGVyc2VjdGlvbiI6WyJiYWdJbnRlcnNlY3Rpb24iXSwiYmFnRGlzam9pbnRTdWJ0cmFjdCI6WyJiYWdEaXNqb2ludFN1YnRyYWN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAH1gizOLHAAAixwAADUAAABAZW5kby9wYXR0ZXJucy12MS40LjYvc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5U2V0LmpzIl0sImV4cG9ydHMiOlsiZWxlbWVudHNDb21wYXJlIiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFVuaW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzU3VwZXJzZXQiLCJlbGVtZW50c1VuaW9uIiwic2V0RGlzam9pbnRTdWJ0cmFjdCIsInNldERpc2pvaW50VW5pb24iLCJzZXRJbnRlcnNlY3Rpb24iLCJzZXRJc0Rpc2pvaW50Iiwic2V0SXNTdXBlcnNldCIsInNldFVuaW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydFJhbmtTb3J0ZWQsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmsscSxGYWlsLGFzc2VydE5vRHVwbGljYXRlcyxtYWtlU2V0T2ZFbGVtZW50czskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY29weVNldC5qc1wiLCBbW1wiYXNzZXJ0Tm9EdXBsaWNhdGVzXCIsIFskaM2PX2EgPT4gKGFzc2VydE5vRHVwbGljYXRlcyA9ICRozY9fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjNj19hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCB3aW5kb3dSZXNvcnQ9KGVsZW1lbnRzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChlbGVtZW50cyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWVsZW1lbnRzO1xubGV0IGk9MDtcbmxldCBvcHRJbm5lckl0ZXJhdG9yO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+XG5oYXJkZW4oe1xubmV4dDooKT0+e1xuaWYob3B0SW5uZXJJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9b3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG5pZihyZXN1bHQuZG9uZSl7XG5vcHRJbm5lckl0ZXJhdG9yPXVuZGVmaW5lZDtcbi8vXG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCB2YWx1ZT1lbGVtZW50c1tpXTtcbmxldCBqPWkrMTtcbndoaWxlKGo8bGVuZ3RoJiZyYW5rQ29tcGFyZSh2YWx1ZSxlbGVtZW50c1tqXSk9PT0wKXtcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuY29uc3Qgc2ltaWxhclJ1bj1lbGVtZW50cy5zbGljZShpLGopO1xuaT1qO1xuY29uc3QgcmVzb3J0ZWQ9c29ydEJ5UmFuayhzaW1pbGFyUnVuLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbmFzc2VydE5vRHVwbGljYXRlcyhyZXNvcnRlZCxmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbm9wdElubmVySXRlcmF0b3I9cmVzb3J0ZWRbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIG9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOm51bGx9KTtcbiB9XG4gfX0pfSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtZXJnZT0oeGVsZW1lbnRzLHllbGVtZW50cyk9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuY29uc3QgeHM9d2luZG93UmVzb3J0KHhlbGVtZW50cyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuY29uc3QgeXM9d2luZG93UmVzb3J0KHllbGVtZW50cyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAqL1xubGV0IHg7XG5sZXQgeERvbmU7XG4vKiAgICAgICAgICAgICovXG5sZXQgeTtcbmxldCB5RG9uZTtcblxuY29uc3QgeGk9eHNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe2RvbmU6eERvbmUsdmFsdWU6eH09eGkubmV4dCgpKTtcbiB9O1xubmV4dFgoKTtcblxuY29uc3QgeWk9eXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe2RvbmU6eURvbmUsdmFsdWU6eX09eWkubmV4dCgpKTtcbiB9O1xubmV4dFkoKTtcblxucmV0dXJuIGhhcmRlbih7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xuLy9cbnZhbHVlPVtudWxsLDBuLDBuXTtcbiB9ZWxzZSBpZih4RG9uZSl7XG4vL1xudmFsdWU9W3ksMG4sMW5dO1xubmV4dFkoKTtcbiB9ZWxzZSBpZih5RG9uZSl7XG4vL1xudmFsdWU9W3gsMW4sMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeCx5KTtcbmlmKGNvbXA9PT0wKXtcbi8vXG52YWx1ZT1beCwxbiwxbl07XG5uZXh0WCgpO1xubmV4dFkoKTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnZhbHVlPVt4LDFuLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG4vL1xuY29tcD4wfHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb21wICR7cShjb21wKX1gO1xudmFsdWU9W3ksMG4sMW5dO1xubmV4dFkoKTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH19KTtcblxuIH19KTtcblxuIH07XG5oYXJkZW4obWVyZ2UpO1xuXG5jb25zdCBpdGVySXNTdXBlcnNldD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLF95Y11vZiB4eWkpe1xuaWYoeGM9PT0wbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVySXNEaXNqb2ludD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyQ29tcGFyZT0oeHlpKT0+e1xubGV0IGxvbmVZPWZhbHNlO1xubGV0IGxvbmVYPWZhbHNlO1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz09PTBuKXtcbi8vXG5sb25lWT10cnVlO1xuIH1cbmlmKHljPT09MG4pe1xuLy9cbmxvbmVYPXRydWU7XG4gfVxuaWYobG9uZVgmJmxvbmVZKXtcbnJldHVybiBOYU47XG4gfVxuIH1cbmlmKGxvbmVYKXtcbnJldHVybiAxO1xuIH1lbHNlIGlmKGxvbmVZKXtcbnJldHVybi0xO1xuIH1lbHNle1xuIWxvbmVYJiYhbG9uZVl8fFxuRmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgbG9uZSBwYWlyICR7cShbbG9uZVgsbG9uZVldKX1gO1xucmV0dXJuIDA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJVbmlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0wbil7XG5yZXN1bHQucHVzaChtKTtcbiB9ZWxzZXtcbnljPj0wbnx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY291bnQgJHtxKHljKX1gO1xuLy9cbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyRGlzam9pbnRVbmlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnhjPT09MG58fHljPT09MG58fEZhaWwgYFNldHMgbXVzdCBub3QgaGF2ZSBjb21tb24gZWxlbWVudHM6ICR7bX1gO1xuaWYoeGM+PTFuKXtcbnJlc3VsdC5wdXNoKG0pO1xuIH1lbHNle1xueWM+PTFufHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb3VudCAke3EoeWMpfWA7XG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVySW50ZXJzZWN0aW9uPSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJEaXNqb2ludFN1YnRyYWN0PSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xueGM+PTFufHxGYWlsIGByaWdodCBlbGVtZW50ICR7bX0gd2FzIG5vdCBpbiBsZWZ0YDtcbmlmKHljPT09MG4pe1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbmNvbnN0IG1lcmdlaWZ5PShpdGVyT3ApPT4oeGVsZW1lbnRzLHllbGVtZW50cyk9PlxuaXRlck9wKG1lcmdlKHhlbGVtZW50cyx5ZWxlbWVudHMpKTtcblxuY29uc3QgICAgICAgIGVsZW1lbnRzSXNTdXBlcnNldD1tZXJnZWlmeShpdGVySXNTdXBlcnNldCk7JGjNj19vbmNlLmVsZW1lbnRzSXNTdXBlcnNldChlbGVtZW50c0lzU3VwZXJzZXQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzSXNEaXNqb2ludD1tZXJnZWlmeShpdGVySXNEaXNqb2ludCk7JGjNj19vbmNlLmVsZW1lbnRzSXNEaXNqb2ludChlbGVtZW50c0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzQ29tcGFyZT1tZXJnZWlmeShpdGVyQ29tcGFyZSk7JGjNj19vbmNlLmVsZW1lbnRzQ29tcGFyZShlbGVtZW50c0NvbXBhcmUpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzVW5pb249bWVyZ2VpZnkoaXRlclVuaW9uKTskaM2PX29uY2UuZWxlbWVudHNVbmlvbihlbGVtZW50c1VuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50VW5pb249bWVyZ2VpZnkoaXRlckRpc2pvaW50VW5pb24pOyRozY9fb25jZS5lbGVtZW50c0Rpc2pvaW50VW5pb24oZWxlbWVudHNEaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0ludGVyc2VjdGlvbj1tZXJnZWlmeShpdGVySW50ZXJzZWN0aW9uKTskaM2PX29uY2UuZWxlbWVudHNJbnRlcnNlY3Rpb24oZWxlbWVudHNJbnRlcnNlY3Rpb24pO1xuY29uc3QgICAgICAgIGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdD1tZXJnZWlmeShpdGVyRGlzam9pbnRTdWJ0cmFjdCk7JGjNj19vbmNlLmVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdChlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdTZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5lbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpO1xuXG5jb25zdCBzZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpKTtcblxuY29uc3QgICAgICAgIHNldElzU3VwZXJzZXQ9cmF3U2V0aWZ5KGVsZW1lbnRzSXNTdXBlcnNldCk7JGjNj19vbmNlLnNldElzU3VwZXJzZXQoc2V0SXNTdXBlcnNldCk7XG5jb25zdCAgICAgICAgc2V0SXNEaXNqb2ludD1yYXdTZXRpZnkoZWxlbWVudHNJc0Rpc2pvaW50KTskaM2PX29uY2Uuc2V0SXNEaXNqb2ludChzZXRJc0Rpc2pvaW50KTtcbmNvbnN0ICAgICAgICBzZXRVbmlvbj1zZXRpZnkoZWxlbWVudHNVbmlvbik7JGjNj19vbmNlLnNldFVuaW9uKHNldFVuaW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFVuaW9uPXNldGlmeShlbGVtZW50c0Rpc2pvaW50VW5pb24pOyRozY9fb25jZS5zZXREaXNqb2ludFVuaW9uKHNldERpc2pvaW50VW5pb24pO1xuY29uc3QgICAgICAgIHNldEludGVyc2VjdGlvbj1zZXRpZnkoZWxlbWVudHNJbnRlcnNlY3Rpb24pOyRozY9fb25jZS5zZXRJbnRlcnNlY3Rpb24oc2V0SW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFN1YnRyYWN0PXNldGlmeShlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5zZXREaXNqb2ludFN1YnRyYWN0KHNldERpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZWxlbWVudHNJc1N1cGVyc2V0IjpbImVsZW1lbnRzSXNTdXBlcnNldCJdLCJlbGVtZW50c0lzRGlzam9pbnQiOlsiZWxlbWVudHNJc0Rpc2pvaW50Il0sImVsZW1lbnRzQ29tcGFyZSI6WyJlbGVtZW50c0NvbXBhcmUiXSwiZWxlbWVudHNVbmlvbiI6WyJlbGVtZW50c1VuaW9uIl0sImVsZW1lbnRzRGlzam9pbnRVbmlvbiI6WyJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSwiZWxlbWVudHNJbnRlcnNlY3Rpb24iOlsiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IjpbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLCJzZXRJc1N1cGVyc2V0IjpbInNldElzU3VwZXJzZXQiXSwic2V0SXNEaXNqb2ludCI6WyJzZXRJc0Rpc2pvaW50Il0sInNldFVuaW9uIjpbInNldFVuaW9uIl0sInNldERpc2pvaW50VW5pb24iOlsic2V0RGlzam9pbnRVbmlvbiJdLCJzZXRJbnRlcnNlY3Rpb24iOlsic2V0SW50ZXJzZWN0aW9uIl0sInNldERpc2pvaW50U3VidHJhY3QiOlsic2V0RGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACkQyco7RgAAO0YAAA2AAAAQGVuZG8vcGF0dGVybnMtdjEuNC42L3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiLi9wYXR0ZXJuTWF0Y2hlcnMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIl0sImV4cG9ydHMiOlsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG9iamVjdE1hcCxBcmdHdWFyZExpc3RTaGFwZSxBd2FpdEFyZ0d1YXJkU2hhcGUsSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUsSW50ZXJmYWNlR3VhcmRTaGFwZSxNLE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLE1ldGhvZEd1YXJkU2hhcGUsUmF3R3VhcmRTaGFwZSxTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxTeW5jVmFsdWVHdWFyZFNoYXBlLGFzc2VydEF3YWl0QXJnR3VhcmQsbWF0Y2hlcyxtdXN0TWF0Y2gsZ2V0Q29weU1hcEtleXMsbWFrZUNvcHlNYXA7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIi4vcGF0dGVybk1hdGNoZXJzLmpzXCIsIFtbXCJBcmdHdWFyZExpc3RTaGFwZVwiLCBbJGjNj19hID0+IChBcmdHdWFyZExpc3RTaGFwZSA9ICRozY9fYSldXSxbXCJBd2FpdEFyZ0d1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoQXdhaXRBcmdHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlXCIsIFskaM2PX2EgPT4gKEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlID0gJGjNj19hKV1dLFtcIkludGVyZmFjZUd1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoSW50ZXJmYWNlR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGVcIiwgWyRozY9fYSA9PiAoTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUgPSAkaM2PX2EpXV0sW1wiTWV0aG9kR3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChNZXRob2RHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcIlJhd0d1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoUmF3R3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJTeW5jVmFsdWVHdWFyZExpc3RTaGFwZVwiLCBbJGjNj19hID0+IChTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSA9ICRozY9fYSldXSxbXCJTeW5jVmFsdWVHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKFN5bmNWYWx1ZUd1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0QXdhaXRBcmdHdWFyZFwiLCBbJGjNj19hID0+IChhc3NlcnRBd2FpdEFyZ0d1YXJkID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jaGVja0tleS5qc1wiLCBbW1wiZ2V0Q29weU1hcEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEtleXMgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGU9aGFyZGVuKHtcbmtsYXNzOidhd2FpdEFyZycsXG5hcmdHdWFyZDpNLnBhdHRlcm4oKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZD0oYXdhaXRBcmdHdWFyZCk9PntcbmlmKG1hdGNoZXMoYXdhaXRBcmdHdWFyZCxMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUpKXtcbi8vXG5jb25zdHtrbGFzczpfLC4uLnBheWxvYWR9PWF3YWl0QXJnR3VhcmQ7XG4vL1xucmV0dXJuIHBheWxvYWQ7XG4gfVxuYXNzZXJ0QXdhaXRBcmdHdWFyZChhd2FpdEFyZ0d1YXJkKTtcbnJldHVybiBhd2FpdEFyZ0d1YXJkLnBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5U3luY01ldGhvZEd1YXJkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmtsYXNzOidtZXRob2RHdWFyZCcsXG5jYWxsS2luZDonc3luYycsXG5hcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSxcblxue1xub3B0aW9uYWxBcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5yZXN0QXJnR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXJnR3VhcmRTaGFwZT1NLm9yKFxuUmF3R3VhcmRTaGFwZSxcbkF3YWl0QXJnR3VhcmRTaGFwZSxcbkxlZ2FjeUF3YWl0QXJnR3VhcmRTaGFwZSxcbk0ucGF0dGVybigpKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXJnR3VhcmRMaXN0U2hhcGU9TS5hcnJheU9mKExlZ2FjeUFyZ0d1YXJkU2hhcGUpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBc3luY01ldGhvZEd1YXJkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmtsYXNzOidtZXRob2RHdWFyZCcsXG5jYWxsS2luZDonYXN5bmMnLFxuYXJnR3VhcmRzOkxlZ2FjeUFyZ0d1YXJkTGlzdFNoYXBlLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0sXG5cbntcbm9wdGlvbmFsQXJnR3VhcmRzOkFyZ0d1YXJkTGlzdFNoYXBlLFxucmVzdEFyZ0d1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeU1ldGhvZEd1YXJkU2hhcGU9TS5vcihcbkxlZ2FjeVN5bmNNZXRob2RHdWFyZFNoYXBlLFxuTGVnYWN5QXN5bmNNZXRob2RHdWFyZFNoYXBlKTtcblxuXG5jb25zdCBhZGFwdExlZ2FjeUFyZ0d1YXJkPShhcmdHdWFyZCk9PlxubWF0Y2hlcyhhcmdHdWFyZCxMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUpP1xuTS5hd2FpdChnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChhcmdHdWFyZCkuYXJnR3VhcmQpOlxuYXJnR3VhcmQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kR3VhcmRQYXlsb2FkPShtZXRob2RHdWFyZCk9PntcbmlmKG1hdGNoZXMobWV0aG9kR3VhcmQsTWV0aG9kR3VhcmRTaGFwZSkpe1xucmV0dXJuIG1ldGhvZEd1YXJkLnBheWxvYWQ7XG4gfVxubXVzdE1hdGNoKG1ldGhvZEd1YXJkLExlZ2FjeU1ldGhvZEd1YXJkU2hhcGUsJ2xlZ2FjeU1ldGhvZEd1YXJkJyk7XG5jb25zdHtcbi8vXG5rbGFzczpfLFxuLy9cbmNhbGxLaW5kLFxuLy9cbnJldHVybkd1YXJkLFxuLy9cbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZDtcbmxldHtcbi8vXG5hcmdHdWFyZHMsXG4vL1xub3B0aW9uYWxBcmdHdWFyZHN9PVxubWV0aG9kR3VhcmQ7XG5pZihjYWxsS2luZD09PSdhc3luYycpe1xuYXJnR3VhcmRzPWFyZ0d1YXJkcy5tYXAoYWRhcHRMZWdhY3lBcmdHdWFyZCk7XG5vcHRpb25hbEFyZ0d1YXJkcz1cbm9wdGlvbmFsQXJnR3VhcmRzJiZvcHRpb25hbEFyZ0d1YXJkcy5tYXAoYWRhcHRMZWdhY3lBcmdHdWFyZCk7XG4gfVxuY29uc3QgcGF5bG9hZD1oYXJkZW4oe1xuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcyxcbnJlc3RBcmdHdWFyZCxcbnJldHVybkd1YXJkfSk7XG5cbi8vXG5tdXN0TWF0Y2gocGF5bG9hZCxNZXRob2RHdWFyZFBheWxvYWRTaGFwZSwnaW50ZXJuYWxNZXRob2RHdWFyZEFkYXB0b3InKTtcbnJldHVybiBwYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldE1ldGhvZEd1YXJkUGF5bG9hZChnZXRNZXRob2RHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldE1ldGhvZEd1YXJkUGF5bG9hZCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUludGVyZmFjZUd1YXJkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmtsYXNzOidJbnRlcmZhY2UnLFxuaW50ZXJmYWNlTmFtZTpNLnN0cmluZygpLFxubWV0aG9kR3VhcmRzOk0ucmVjb3JkT2YoXG5NLnN0cmluZygpLFxuTS5vcihNZXRob2RHdWFyZFNoYXBlLExlZ2FjeU1ldGhvZEd1YXJkU2hhcGUpKX0sXG5cblxue1xuZGVmYXVsdEd1YXJkczpNLm9yKE0udW5kZWZpbmVkKCksJ3Bhc3NhYmxlJywncmF3JyksXG5zbG9wcHk6TS5ib29sZWFuKCksXG4vL1xuLy9cbi8vXG5zeW1ib2xNZXRob2RHdWFyZHM6TS5tYXBPZihNLnN5bWJvbCgpLE1ldGhvZEd1YXJkU2hhcGUpfSk7XG5cblxuXG5jb25zdCBhZGFwdE1ldGhvZEd1YXJkPShtZXRob2RHdWFyZCk9PntcbmlmKG1hdGNoZXMobWV0aG9kR3VhcmQsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSkpe1xuY29uc3R7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkPU0uYW55KCksXG5yZXR1cm5HdWFyZH09XG5nZXRNZXRob2RHdWFyZFBheWxvYWQobWV0aG9kR3VhcmQpO1xuY29uc3QgbUNhbGw9Y2FsbEtpbmQ9PT0nc3luYyc/TS5jYWxsOk0uY2FsbFdoZW47XG5yZXR1cm4gbUNhbGwoLi4uYXJnR3VhcmRzKS5cbm9wdGlvbmFsKC4uLm9wdGlvbmFsQXJnR3VhcmRzKS5cbnJlc3QocmVzdEFyZ0d1YXJkKS5cbnJldHVybnMocmV0dXJuR3VhcmQpO1xuIH1cbnJldHVybiBtZXRob2RHdWFyZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkPShpbnRlcmZhY2VHdWFyZCk9PntcbmlmKG1hdGNoZXMoaW50ZXJmYWNlR3VhcmQsSW50ZXJmYWNlR3VhcmRTaGFwZSkpe1xucmV0dXJuIGludGVyZmFjZUd1YXJkLnBheWxvYWQ7XG4gfVxubXVzdE1hdGNoKGludGVyZmFjZUd1YXJkLExlZ2FjeUludGVyZmFjZUd1YXJkU2hhcGUsJ2xlZ2FjeUludGVyZmFjZUd1YXJkJyk7XG4vL1xuLy9cbmxldHtrbGFzczpfLGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLC4uLnJlc3R9PWludGVyZmFjZUd1YXJkO1xubWV0aG9kR3VhcmRzPW9iamVjdE1hcChtZXRob2RHdWFyZHMsYWRhcHRNZXRob2RHdWFyZCk7XG5jb25zdCBwYXlsb2FkPWhhcmRlbih7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzLFxuLi4ucmVzdH0pO1xuXG5tdXN0TWF0Y2goXG5wYXlsb2FkLFxuSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUsXG4naW50ZXJuYWxJbnRlcmZhY2VHdWFyZEFkYXB0b3InKTtcblxucmV0dXJuIHBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKTtcblxuY29uc3QgZW1wdHlDb3B5TWFwPW1ha2VDb3B5TWFwKFtdKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VNZXRob2RLZXlzPShpbnRlcmZhY2VHdWFyZCk9PntcbmNvbnN0e21ldGhvZEd1YXJkcyxzeW1ib2xNZXRob2RHdWFyZHM9ZW1wdHlDb3B5TWFwfT1cbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChpbnRlcmZhY2VHdWFyZCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oW1xuLi4uUmVmbGVjdC5vd25LZXlzKG1ldGhvZEd1YXJkcyksXG4uLi5nZXRDb3B5TWFwS2V5cyhzeW1ib2xNZXRob2RHdWFyZHMpXSk7XG5cbiB9OyRozY9fb25jZS5nZXRJbnRlcmZhY2VNZXRob2RLZXlzKGdldEludGVyZmFjZU1ldGhvZEtleXMpO1xuaGFyZGVuKGdldEludGVyZmFjZU1ldGhvZEtleXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiOlsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiXSwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIjpbImdldE1ldGhvZEd1YXJkUGF5bG9hZCJdLCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiOlsiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIl0sImdldEludGVyZmFjZU1ldGhvZEtleXMiOlsiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAdOAyUyK0AAMitAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC42L3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIiwiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIiwiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiLCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi4va2V5cy9jb21wYXJlS2V5cy5qcyIsIi4uL2tleXMvY2hlY2tLZXkuanMiLCIuLi9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIl0sImV4cG9ydHMiOlsiQXJnR3VhcmRMaXN0U2hhcGUiLCJBd2FpdEFyZ0d1YXJkU2hhcGUiLCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSIsIkludGVyZmFjZUd1YXJkU2hhcGUiLCJNIiwiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiLCJNZXRob2RHdWFyZFNoYXBlIiwiUmF3R3VhcmRTaGFwZSIsIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIiwiU3luY1ZhbHVlR3VhcmRTaGFwZSIsImFzc2VydEF3YWl0QXJnR3VhcmQiLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCIsImFzc2VydE1ldGhvZEd1YXJkIiwiYXNzZXJ0UGF0dGVybiIsImFzc2VydFJhd0d1YXJkIiwiY2hlY2tNYXRjaGVzIiwiZGVmYXVsdExpbWl0cyIsImdldFJhbmtDb3ZlciIsImlzQXdhaXRBcmdHdWFyZCIsImlzUGF0dGVybiIsImlzUmF3R3VhcmQiLCJraW5kT2YiLCJtYXRjaGVzIiwibXVzdE1hdGNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsRmFyLGdldFRhZyxtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGhhc093blByb3BlcnR5T2YsbmFtZUZvclBhc3NhYmxlU3ltYm9sLGNvbXBhcmVSYW5rLGdldFBhc3NTdHlsZUNvdmVyLGludGVyc2VjdFJhbmtDb3ZlcnMsdW5pb25SYW5rQ292ZXJzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlcyxpZGVudENoZWNrZXIsYXBwbHlMYWJlbGluZ0Vycm9yLGZyb21VbmlxdWVFbnRyaWVzLGxpc3REaWZmZXJlbmNlLHEsYixYLEZhaWwsbWFrZUVycm9yLGFubm90YXRlRXJyb3Isa2V5RVEsa2V5R1Qsa2V5R1RFLGtleUxULGtleUxURSxhc3NlcnRLZXksY2hlY2tLZXksaXNLZXksY2hlY2tTY2FsYXJLZXksY2hlY2tDb3B5U2V0LGNoZWNrQ29weU1hcCxjb3B5TWFwS2V5U2V0LGNoZWNrQ29weUJhZyxnZXRDb3B5TWFwRW50cnlBcnJheSxtYWtlQ29weU1hcCxnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJuYW1lRm9yUGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAobmFtZUZvclBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dLFtcImdldFBhc3NTdHlsZUNvdmVyXCIsIFskaM2PX2EgPT4gKGdldFBhc3NTdHlsZUNvdmVyID0gJGjNj19hKV1dLFtcImludGVyc2VjdFJhbmtDb3ZlcnNcIiwgWyRozY9fYSA9PiAoaW50ZXJzZWN0UmFua0NvdmVycyA9ICRozY9fYSldXSxbXCJ1bmlvblJhbmtDb3ZlcnNcIiwgWyRozY9fYSA9PiAodW5pb25SYW5rQ292ZXJzID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qc1wiLCBbW1wiaWRlbnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qc1wiLCBbW1wiYXBwbHlMYWJlbGluZ0Vycm9yXCIsIFskaM2PX2EgPT4gKGFwcGx5TGFiZWxpbmdFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtbXCJmcm9tVW5pcXVlRW50cmllc1wiLCBbJGjNj19hID0+IChmcm9tVW5pcXVlRW50cmllcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW1tcImxpc3REaWZmZXJlbmNlXCIsIFskaM2PX2EgPT4gKGxpc3REaWZmZXJlbmNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiYlwiLCBbJGjNj19hID0+IChiID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2NvbXBhcmVLZXlzLmpzXCIsIFtbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXSxbXCJrZXlHVFwiLCBbJGjNj19hID0+IChrZXlHVCA9ICRozY9fYSldXSxbXCJrZXlHVEVcIiwgWyRozY9fYSA9PiAoa2V5R1RFID0gJGjNj19hKV1dLFtcImtleUxUXCIsIFskaM2PX2EgPT4gKGtleUxUID0gJGjNj19hKV1dLFtcImtleUxURVwiLCBbJGjNj19hID0+IChrZXlMVEUgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2NoZWNrS2V5LmpzXCIsIFtbXCJhc3NlcnRLZXlcIiwgWyRozY9fYSA9PiAoYXNzZXJ0S2V5ID0gJGjNj19hKV1dLFtcImNoZWNrS2V5XCIsIFskaM2PX2EgPT4gKGNoZWNrS2V5ID0gJGjNj19hKV1dLFtcImlzS2V5XCIsIFskaM2PX2EgPT4gKGlzS2V5ID0gJGjNj19hKV1dLFtcImNoZWNrU2NhbGFyS2V5XCIsIFskaM2PX2EgPT4gKGNoZWNrU2NhbGFyS2V5ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weVNldFwiLCBbJGjNj19hID0+IChjaGVja0NvcHlTZXQgPSAkaM2PX2EpXV0sW1wiY2hlY2tDb3B5TWFwXCIsIFskaM2PX2EgPT4gKGNoZWNrQ29weU1hcCA9ICRozY9fYSldXSxbXCJjb3B5TWFwS2V5U2V0XCIsIFskaM2PX2EgPT4gKGNvcHlNYXBLZXlTZXQgPSAkaM2PX2EpXV0sW1wiY2hlY2tDb3B5QmFnXCIsIFskaM2PX2EgPT4gKGNoZWNrQ29weUJhZyA9ICRozY9fYSldXSxbXCJnZXRDb3B5TWFwRW50cnlBcnJheVwiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwRW50cnlBcnJheSA9ICRozY9fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjNj19hID0+IChtYWtlQ29weU1hcCA9ICRozY9fYSldXV1dLFtcIi4uL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNcIiwgW1tcImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLHZhbHVlc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF0dGVybk1lbW89bmV3IFdlYWtTZXQoKTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgTU07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmYXVsdExpbWl0cz1oYXJkZW4oe1xuZGVjaW1hbERpZ2l0c0xpbWl0OjEwMCxcbnN0cmluZ0xlbmd0aExpbWl0OjEwMF8wMDAsXG5zeW1ib2xOYW1lTGVuZ3RoTGltaXQ6MTAwLFxubnVtUHJvcGVydGllc0xpbWl0OjgwLFxucHJvcGVydHlOYW1lTGVuZ3RoTGltaXQ6MTAwLFxuYXJyYXlMZW5ndGhMaW1pdDoxMF8wMDAsXG5udW1TZXRFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQ6MTBfMDAwLFxubnVtTWFwRW50cmllc0xpbWl0OjUwMDB9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZmF1bHRMaW1pdHMoZGVmYXVsdExpbWl0cyk7XG5jb25zdCBsaW1pdD0obGltaXRzPXt9KT0+XG4vKiAgICAgICAgICAgICAgICAgICAgKi9oYXJkZW4oe19fcHJvdG9fXzpkZWZhdWx0TGltaXRzLC4uLmxpbWl0c30pO1xuXG5jb25zdCBjaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdD0oXG5wYXlsb2FkLFxubWFpblBheWxvYWRTaGFwZSxcbmNoZWNrLFxubGFiZWwpPT5cbntcbmFzc2VydChBcnJheS5pc0FycmF5KG1haW5QYXlsb2FkU2hhcGUpKTtcbmlmKCFBcnJheS5pc0FycmF5KHBheWxvYWQpKXtcbnJldHVybiBjaGVjayhmYWxzZSxYIGAke3EobGFiZWwpfSBwYXlsb2FkIG11c3QgYmUgYW4gYXJyYXk6ICR7cGF5bG9hZH1gKTtcbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBtYWluTGVuZ3RoPW1haW5QYXlsb2FkU2hhcGUubGVuZ3RoO1xuaWYoIShwYXlsb2FkLmxlbmd0aD09PW1haW5MZW5ndGh8fHBheWxvYWQubGVuZ3RoPT09bWFpbkxlbmd0aCsxKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtxKGxhYmVsKX0gcGF5bG9hZCB1bmV4cGVjdGVkIHNpemU6ICR7cGF5bG9hZH1gKTtcbiB9XG5jb25zdCBsaW1pdHM9cGF5bG9hZFttYWluTGVuZ3RoXTtcbnBheWxvYWQ9aGFyZGVuKHBheWxvYWQuc2xpY2UoMCxtYWluTGVuZ3RoKSk7XG4vL1xuaWYoIWNoZWNrTWF0Y2hlcyhwYXlsb2FkLG1haW5QYXlsb2FkU2hhcGUsY2hlY2ssbGFiZWwpKXtcbnJldHVybiBmYWxzZTtcbiB9XG5pZihsaW1pdHM9PT11bmRlZmluZWQpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuKFxuKHBhc3NTdHlsZU9mKGxpbWl0cyk9PT0nY29weVJlY29yZCd8fFxuY2hlY2soZmFsc2UsWCBgTGltaXRzIG11c3QgYmUgYSByZWNvcmQ6ICR7cShsaW1pdHMpfWApKSYmXG5lbnRyaWVzKGxpbWl0cykuZXZlcnkoXG4oW2tleSx2YWx1ZV0pPT5cbnBhc3NTdHlsZU9mKHZhbHVlKT09PSdudW1iZXInfHxcbmNoZWNrKGZhbHNlLFggYFZhbHVlIG9mIGxpbWl0ICR7cShrZXkpfSBidXQgYmUgYSBudW1iZXI6ICR7cSh2YWx1ZSl9YCkpKTtcblxuXG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tEZWNpbWFsRGlnaXRzTGltaXQ9KHNwZWNpbWVuLGRlY2ltYWxEaWdpdHNMaW1pdCxjaGVjayk9PntcbmlmKFxuTWF0aC5mbG9vcihNYXRoLmxvZzEwKE1hdGguYWJzKE51bWJlcihzcGVjaW1lbikpKSkrMTw9XG5kZWNpbWFsRGlnaXRzTGltaXQpXG57XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYGJpZ2ludCAke3NwZWNpbWVufSBtdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke2RlY2ltYWxEaWdpdHNMaW1pdH0gZGlnaXRzYCk7XG5cbiB9O1xuXG4vKlxuXG4gKi9cbmNvbnN0IG1ha2VQYXR0ZXJuS2l0PSgpPT57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZU1hdGNoSGVscGVyPSh0YWcpPT5cbi8vXG5IZWxwZXJzQnlNYXRjaFRhZ1t0YWddO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlUGF5bG9hZFNoYXBlPSh0YWcpPT5cbi8vXG5HdWFyZFBheWxvYWRTaGFwZXNbdGFnXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaW5nbGV0b25LaW5kcz1uZXcgTWFwKFtcblsnbnVsbCcsbnVsbF0sXG5bJ3VuZGVmaW5lZCcsdW5kZWZpbmVkXV0pO1xuXG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgdGFnTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tUYWdnZWQ9KHRhZ2dlZCx0YWcsY2hlY2spPT57XG5jb25zdCBtYXRjaEhlbHBlcj1tYXliZU1hdGNoSGVscGVyKHRhZyk7XG5pZihtYXRjaEhlbHBlcil7XG4vL1xuLy9cbnJldHVybiBtYXRjaEhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCh0YWdnZWQucGF5bG9hZCxjaGVjayk7XG4gfWVsc2V7XG5jb25zdCBwYXlsb2FkU2hhcGU9bWF5YmVQYXlsb2FkU2hhcGUodGFnKTtcbmlmKHBheWxvYWRTaGFwZSE9PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIGNoZWNrTWF0Y2hlcyh0YWdnZWQucGF5bG9hZCxwYXlsb2FkU2hhcGUsY2hlY2ssdGFnKTtcbiB9XG4gfVxuc3dpdGNoKHRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbnJldHVybiBjaGVja0NvcHlTZXQodGFnZ2VkLGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbnJldHVybiBjaGVja0NvcHlCYWcodGFnZ2VkLGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbnJldHVybiBjaGVja0NvcHlNYXAodGFnZ2VkLGNoZWNrKTtcbiB9XG5kZWZhdWx0OntcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgY2Fubm90IGNoZWNrIHVucmVjb2duaXplZCB0YWcgJHtxKHRhZyl9OiAke3RhZ2dlZH1gKTtcblxuIH19XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qga2luZE9mPShzcGVjaW1lbixjaGVjaz1pZGVudENoZWNrZXIpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuaWYocGFzc1N0eWxlIT09J3RhZ2dlZCcpe1xucmV0dXJuIHBhc3NTdHlsZTtcbiB9XG4vL1xuLy9cbi8vXG5pZih0YWdNZW1vLmhhcyhzcGVjaW1lbikpe1xucmV0dXJuIHRhZ01lbW8uZ2V0KHNwZWNpbWVuKTtcbiB9XG5jb25zdCB0YWc9Z2V0VGFnKHNwZWNpbWVuKTtcbmlmKGNoZWNrVGFnZ2VkKHNwZWNpbWVuLHRhZyxjaGVjaykpe1xudGFnTWVtby5zZXQoc3BlY2ltZW4sdGFnKTtcbnJldHVybiB0YWc7XG4gfVxuaWYoY2hlY2shPT1pZGVudENoZWNrZXIpe1xuY2hlY2soZmFsc2UsWCBgY2Fubm90IGNoZWNrIHVucmVjb2duaXplZCB0YWcgJHtxKHRhZyl9YCk7XG4gfVxucmV0dXJuIHVuZGVmaW5lZDtcbiB9O1xuaGFyZGVuKGtpbmRPZik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja0tpbmQ9KHNwZWNpbWVuLGtpbmQsY2hlY2spPT57XG4vL1xuaWYoc2luZ2xldG9uS2luZHMuaGFzKGtpbmQpKXtcbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4sc2luZ2xldG9uS2luZHMuZ2V0KGtpbmQpLGNoZWNrKTtcbiB9XG5cbmNvbnN0IHJlYWxLaW5kPWtpbmRPZihzcGVjaW1lbixjaGVjayk7XG5pZihraW5kPT09cmVhbEtpbmQpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoY2hlY2shPT1pZGVudENoZWNrZXIpe1xuLy9cbi8vXG5jaGVjayhmYWxzZSxYIGAke2IocmVhbEtpbmQpfSAke3NwZWNpbWVufSAtIE11c3QgYmUgYSAke2Ioa2luZCl9YCk7XG4gfVxucmV0dXJuIGZhbHNlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgaXNLaW5kPShzcGVjaW1lbixraW5kKT0+Y2hlY2tLaW5kKHNwZWNpbWVuLGtpbmQsaWRlbnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrQXNLZXlQYXR0PShzcGVjaW1lbixrZXlBc1BhdHRlcm4sY2hlY2spPT57XG5pZihpc0tleShzcGVjaW1lbikmJmtleUVRKHNwZWNpbWVuLGtleUFzUGF0dGVybikpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuKFxuY2hlY2shPT1pZGVudENoZWNrZXImJlxuLy9cbi8vXG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmU6ICR7a2V5QXNQYXR0ZXJufWApKTtcblxuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2hlY2tQYXR0ZXJuPShwYXR0LGNoZWNrKT0+e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiB0cnVlO1xuIH1cbmlmKHBhdHRlcm5NZW1vLmhhcyhwYXR0KSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4vL1xuY29uc3QgcmVzdWx0PWNoZWNrUGF0dGVybkludGVybmFsKHBhdHQsY2hlY2spO1xuaWYocmVzdWx0KXtcbnBhdHRlcm5NZW1vLmFkZChwYXR0KTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1BhdHRlcm5JbnRlcm5hbD0ocGF0dCxjaGVjayk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGNoZWNrSXQ9KGNoaWxkKT0+Y2hlY2tQYXR0ZXJuKGNoaWxkLGNoZWNrKTtcblxuY29uc3Qga2luZD1raW5kT2YocGF0dCxjaGVjayk7XG5zd2l0Y2goa2luZCl7XG5jYXNlIHVuZGVmaW5lZDp7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbnJldHVybiB2YWx1ZXMocGF0dCkuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG4vL1xucmV0dXJuIHBhdHQuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tQYXR0ZXJuKHBhdHQudmFsdWVzLGNoZWNrKTtcbiB9XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKGtpbmQpfSBjYW5ub3QgYmUgYSBwYXR0ZXJuYCk7XG4gfVxuZGVmYXVsdDp7XG5pZihtYXliZU1hdGNoSGVscGVyKGtpbmQpIT09dW5kZWZpbmVkKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgQSBwYXNzYWJsZSBvZiBraW5kICR7cShraW5kKX0gaXMgbm90IGEgcGF0dGVybjogJHtwYXR0fWApO1xuXG4gfX1cblxuIH07XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGlzUGF0dGVybj0ocGF0dCk9PmNoZWNrUGF0dGVybihwYXR0LGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cbiAgICovXG5jb25zdCBhc3NlcnRQYXR0ZXJuPShwYXR0KT0+e1xuY2hlY2tQYXR0ZXJuKHBhdHQsYXNzZXJ0Q2hlY2tlcik7XG4gfTtcblxuLy9cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tNYXRjaGVzPShzcGVjaW1lbixwYXR0ZXJuLGNoZWNrLGxhYmVsPXVuZGVmaW5lZCk9PlxuLy9cbmFwcGx5TGFiZWxpbmdFcnJvcihjaGVja01hdGNoZXNJbnRlcm5hbCxbc3BlY2ltZW4scGF0dGVybixjaGVja10sbGFiZWwpO1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tNYXRjaGVzSW50ZXJuYWw9KHNwZWNpbWVuLHBhdHQsY2hlY2spPT57XG4vL1xuY29uc3QgcGF0dGVybktpbmQ9a2luZE9mKHBhdHQsY2hlY2spO1xuY29uc3Qgc3BlY2ltZW5LaW5kPWtpbmRPZihzcGVjaW1lbik7Ly9cbnN3aXRjaChwYXR0ZXJuS2luZCl7XG5jYXNlIHVuZGVmaW5lZDp7XG5yZXR1cm4gRmFpbCBgcGF0dGVybiBleHBlY3RlZDogJHtwYXR0fWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5yZXR1cm4gRmFpbCBgcHJvbWlzZXMgY2Fubm90IGJlIHBhdHRlcm5zOiAke3BhdHR9YDtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5yZXR1cm4gRmFpbCBgZXJyb3JzIGNhbm5vdCBiZSBwYXR0ZXJuczogJHtwYXR0fWA7XG4gfVxuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ3N5bWJvbCc6XG5jYXNlJ2NvcHlTZXQnOlxuY2FzZSdjb3B5QmFnJzpcbmNhc2UncmVtb3RhYmxlJzp7XG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHBhdHQsY2hlY2spO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBhIGNvcHlBcnJheSB0byBtYXRjaCBhIGNvcHlBcnJheSBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbmNvbnN0e2xlbmd0aH09cGF0dDtcbmlmKHNwZWNpbWVuLmxlbmd0aCE9PWxlbmd0aCl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEFycmF5ICR7c3BlY2ltZW59IC0gTXVzdCBiZSBhcyBsb25nIGFzIGNvcHlBcnJheSBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbnJldHVybiBwYXR0LmV2ZXJ5KChwLGkpPT5jaGVja01hdGNoZXMoc3BlY2ltZW5baV0scCxjaGVjayxpKSk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weVJlY29yZCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5UmVjb3JkIHRvIG1hdGNoIGEgY29weVJlY29yZCBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3Qgc3BlY2ltZW5OYW1lcz1yZWNvcmROYW1lcyhzcGVjaW1lbik7XG5jb25zdCBwYXR0TmFtZXM9cmVjb3JkTmFtZXMocGF0dCk7XG5jb25zdCBtaXNzaW5nPWxpc3REaWZmZXJlbmNlKHBhdHROYW1lcyxzcGVjaW1lbk5hbWVzKTtcbmlmKG1pc3NpbmcubGVuZ3RoPj0xKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGhhdmUgbWlzc2luZyBwcm9wZXJ0aWVzICR7cShtaXNzaW5nKX1gKTtcblxuIH1cbmNvbnN0IHVuZXhwZWN0ZWQ9bGlzdERpZmZlcmVuY2Uoc3BlY2ltZW5OYW1lcyxwYXR0TmFtZXMpO1xuaWYodW5leHBlY3RlZC5sZW5ndGg+PTEpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3Qgbm90IGhhdmUgdW5leHBlY3RlZCBwcm9wZXJ0aWVzOiAke3EoXG51bmV4cGVjdGVkKVxuIH1gKTtcblxuIH1cbmNvbnN0IHNwZWNpbWVuVmFsdWVzPXJlY29yZFZhbHVlcyhzcGVjaW1lbixzcGVjaW1lbk5hbWVzKTtcbmNvbnN0IHBhdHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHBhdHQscGF0dE5hbWVzKTtcbnJldHVybiBwYXR0TmFtZXMuZXZlcnkoKGxhYmVsLGkpPT5cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lblZhbHVlc1tpXSxwYXR0VmFsdWVzW2ldLGNoZWNrLGxhYmVsKSk7XG5cbiB9XG5jYXNlJ2NvcHlNYXAnOntcbmlmKGlzS2V5KHBhdHQpKXtcbi8vXG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHBhdHQsY2hlY2spO1xuIH1cbmlmKHNwZWNpbWVuS2luZCE9PSdjb3B5TWFwJyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBhIGNvcHlNYXAgdG8gbWF0Y2ggYSBjb3B5TWFwIHBhdHRlcm46ICR7cShcbnBhdHQpXG4gfWApO1xuXG4gfVxuLy9cbmNvbnN0IHBhdHRLZXlTZXQ9Y29weU1hcEtleVNldChwYXR0KTtcbmNvbnN0IHNwZWNpbWVuS2V5U2V0PWNvcHlNYXBLZXlTZXQoc3BlY2ltZW4pO1xuaWYoIWNoZWNrTWF0Y2hlcyhzcGVjaW1lbktleVNldCxwYXR0S2V5U2V0LGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbi8vXG4vL1xuY29uc3QgcGF0dFZhbHVlcz1bXTtcbmNvbnN0IHNwZWNpbWVuVmFsdWVzPVtdO1xuY29uc3QgZW50cnlQYWlycz1nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhcbnBhdHQsXG5zcGVjaW1lbixcbmdldENvcHlNYXBFbnRyeUFycmF5LFxudW5kZWZpbmVkKTtcblxuZm9yKGNvbnN0W19rZXkscGF0dFZhbHVlLHNwZWNpbWVuVmFsdWVdb2YgZW50cnlQYWlycyl7XG5wYXR0VmFsdWVzLnB1c2gocGF0dFZhbHVlKTtcbnNwZWNpbWVuVmFsdWVzLnB1c2goc3BlY2ltZW5WYWx1ZSk7XG4gfVxucmV0dXJuIGNoZWNrTWF0Y2hlcyhoYXJkZW4oc3BlY2ltZW5WYWx1ZXMpLGhhcmRlbihwYXR0VmFsdWVzKSxjaGVjayk7XG4gfVxuZGVmYXVsdDp7XG5jb25zdCBtYXRjaEhlbHBlcj1tYXliZU1hdGNoSGVscGVyKHBhdHRlcm5LaW5kKTtcbmlmKG1hdGNoSGVscGVyKXtcbnJldHVybiBtYXRjaEhlbHBlci5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dC5wYXlsb2FkLGNoZWNrKTtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogc2hvdWxkIGhhdmUgcmVjb2duaXplZCAke3EocGF0dGVybktpbmQpfSBgO1xuIH19XG5cbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IG1hdGNoZXM9KHNwZWNpbWVuLHBhdHQpPT5cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbXVzdE1hdGNoPShzcGVjaW1lbixwYXR0LGxhYmVsPXVuZGVmaW5lZCk9PntcbmxldCBpbm5lckVycm9yO1xudHJ5e1xuaWYoY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsaWRlbnRDaGVja2VyLHVuZGVmaW5lZCkpe1xucmV0dXJuO1xuIH1cbiB9Y2F0Y2goZXIpe1xuaW5uZXJFcnJvcj1lcjtcbiB9XG4vL1xuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsYXNzZXJ0Q2hlY2tlcixsYWJlbCk7XG5jb25zdCBvdXRlckVycm9yPW1ha2VFcnJvcihcblggYGludGVybmFsOiAke2xhYmVsfTogaW5jb25zaXN0ZW50IHBhdHRlcm4gbWF0Y2g6ICR7cShwYXR0KX1gKTtcblxuaWYoaW5uZXJFcnJvciE9PXVuZGVmaW5lZCl7XG5hbm5vdGF0ZUVycm9yKG91dGVyRXJyb3IsWCBgY2F1c2VkIGJ5ICR7aW5uZXJFcnJvcn1gKTtcbiB9XG50aHJvdyBvdXRlckVycm9yO1xuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0UmFua0NvdmVyPShwYXR0LGVuY29kZVBhc3NhYmxlKT0+e1xuaWYoaXNLZXkocGF0dCkpe1xuY29uc3QgZW5jb2RlZD1lbmNvZGVQYXNzYWJsZShwYXR0KTtcbmlmKGVuY29kZWQhPT11bmRlZmluZWQpe1xucmV0dXJuW2VuY29kZWQsIGAke2VuY29kZWR9fmBdO1xuIH1cbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocGF0dCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyZWFrO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdCB0YWc9Z2V0VGFnKHBhdHQpO1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcih0YWcpO1xuaWYobWF0Y2hIZWxwZXIpe1xuLy9cbi8vXG5yZXR1cm4gbWF0Y2hIZWxwZXIuZ2V0UmFua0NvdmVyKHBhdHQucGF5bG9hZCxlbmNvZGVQYXNzYWJsZSk7XG4gfVxuc3dpdGNoKHRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG5icmVhazsvL1xuIH19XG5cbmJyZWFrOy8vXG4gfVxuZGVmYXVsdDp7XG5icmVhazsvL1xuIH19XG5cbnJldHVybiBnZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGUpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGFycmF5RXZlcnlNYXRjaFBhdHRlcm49KGFycmF5LHBhdHQsY2hlY2ssbGFiZWxQcmVmaXg9JycpPT57XG5pZihpc0tpbmQocGF0dCwnbWF0Y2g6YW55Jykpe1xuLy9cbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBhcnJheS5ldmVyeSgoZWwsaSk9PlxuY2hlY2tNYXRjaGVzKGVsLHBhdHQsY2hlY2ssIGAke2xhYmVsUHJlZml4fVske2l9XWApKTtcblxuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFueUhlbHBlcj1GYXIoJ21hdGNoOmFueSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooX3NwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxfY2hlY2spPT50cnVlLFxuXG5jaGVja0lzV2VsbEZvcm1lZDoobWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbm1hdGNoZXJQYXlsb2FkPT09dW5kZWZpbmVkfHxcbmNoZWNrKGZhbHNlLFggYG1hdGNoOmFueSBwYXlsb2FkOiAke21hdGNoZXJQYXlsb2FkfSAtIE11c3QgYmUgdW5kZWZpbmVkYCksXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJycsJ3snXX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFuZEhlbHBlcj1GYXIoJ21hdGNoOmFuZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scGF0dHMsY2hlY2spPT57XG5yZXR1cm4gcGF0dHMuZXZlcnkoKHBhdHQpPT5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dCxjaGVjaykpO1xuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkUGF0dHMsY2hlY2spPT57XG5jb25zdCBjaGVja0l0PShwYXR0KT0+Y2hlY2tQYXR0ZXJuKHBhdHQsY2hlY2spO1xucmV0dXJuKFxuKHBhc3NTdHlsZU9mKGFsbGVnZWRQYXR0cyk9PT0nY29weUFycmF5J3x8XG5jaGVjayhmYWxzZSxYIGBOZWVkcyBhcnJheSBvZiBzdWItcGF0dGVybnM6ICR7cShhbGxlZ2VkUGF0dHMpfWApKSYmXG5hbGxlZ2VkUGF0dHMuZXZlcnkoY2hlY2tJdCkpO1xuXG4gfSxcblxuZ2V0UmFua0NvdmVyOihwYXR0cyxlbmNvZGVQYXNzYWJsZSk9PlxuaW50ZXJzZWN0UmFua0NvdmVycyhcbmNvbXBhcmVSYW5rLFxucGF0dHMubWFwKChwKT0+Z2V0UmFua0NvdmVyKHAsZW5jb2RlUGFzc2FibGUpKSl9KTtcblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaE9ySGVscGVyPUZhcignbWF0Y2g6b3IgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHRzLGNoZWNrKT0+e1xuY29uc3R7bGVuZ3RofT1wYXR0cztcbmlmKGxlbmd0aD09PTApe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIG5vIHBhdHRlcm4gZGlzanVuY3RzIHRvIG1hdGNoOiAke3EocGF0dHMpfWApO1xuXG4gfVxuaWYoXG5wYXR0cy5sZW5ndGg9PT0yJiZcbiFtYXRjaGVzKHNwZWNpbWVuLHBhdHRzWzBdKSYmXG5pc0tpbmQocGF0dHNbMF0sJ21hdGNoOmtpbmQnKSYmXG5wYXR0c1swXS5wYXlsb2FkPT09J3VuZGVmaW5lZCcpXG57XG4vL1xuLy9cbnJldHVybiBjaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dHNbMV0sY2hlY2spO1xuIH1cbmlmKHBhdHRzLnNvbWUoKHBhdHQpPT5tYXRjaGVzKHNwZWNpbWVuLHBhdHQpKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IG1hdGNoIG9uZSBvZiAke3EocGF0dHMpfWApO1xuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOm1hdGNoQW5kSGVscGVyLmNoZWNrSXNXZWxsRm9ybWVkLFxuXG5nZXRSYW5rQ292ZXI6KHBhdHRzLGVuY29kZVBhc3NhYmxlKT0+XG51bmlvblJhbmtDb3ZlcnMoXG5jb21wYXJlUmFuayxcbnBhdHRzLm1hcCgocCk9PmdldFJhbmtDb3ZlcihwLGVuY29kZVBhc3NhYmxlKSkpfSk7XG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hOb3RIZWxwZXI9RmFyKCdtYXRjaDpub3QgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHQsY2hlY2spPT57XG5pZihtYXRjaGVzKHNwZWNpbWVuLHBhdHQpKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGZhaWwgbmVnYXRlZCBwYXR0ZXJuOiAke3EocGF0dCl9YCk7XG5cbiB9ZWxzZXtcbnJldHVybiB0cnVlO1xuIH1cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja1BhdHRlcm4sXG5cbmdldFJhbmtDb3ZlcjooX3BhdHQsX2VuY29kZVBhc3NhYmxlKT0+WycnLCd7J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTY2FsYXJIZWxwZXI9RmFyKCdtYXRjaDpzY2FsYXIgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tTY2FsYXJLZXkoc3BlY2ltZW4sY2hlY2spLFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFueUhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlsnYScsJ3p+J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hLZXlIZWxwZXI9RmFyKCdtYXRjaDprZXkgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tLZXkoc3BlY2ltZW4sY2hlY2spLFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFueUhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlsnYScsJ3p+J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hQYXR0ZXJuSGVscGVyPUZhcignbWF0Y2g6cGF0dGVybiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sX21hdGNoZXJQYXlsb2FkLGNoZWNrKT0+XG5jaGVja1BhdHRlcm4oc3BlY2ltZW4sY2hlY2spLFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFueUhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlsnYScsJ3p+J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hLaW5kSGVscGVyPUZhcignbWF0Y2g6a2luZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczpjaGVja0tpbmQsXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkS2V5S2luZCxjaGVjayk9PlxudHlwZW9mIGFsbGVnZWRLZXlLaW5kPT09J3N0cmluZyd8fFxuY2hlY2soXG5mYWxzZSxcblggYG1hdGNoOmtpbmQ6IHBheWxvYWQ6ICR7YWxsZWdlZEtleUtpbmR9IC0gQSBraW5kIG5hbWUgbXVzdCBiZSBhIHN0cmluZ2ApLFxuXG5cbmdldFJhbmtDb3Zlcjooa2luZCxfZW5jb2RlUGFzc2FibGUpPT57XG5sZXQgc3R5bGU7XG5zd2l0Y2goa2luZCl7XG5jYXNlJ2NvcHlTZXQnOlxuY2FzZSdjb3B5TWFwJzp7XG5zdHlsZT0ndGFnZ2VkJztcbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuc3R5bGU9a2luZDtcbmJyZWFrO1xuIH19XG5cbnJldHVybiBnZXRQYXNzU3R5bGVDb3ZlcihzdHlsZSk7XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFRhZ2dlZEhlbHBlcj1GYXIoJ21hdGNoOnRhZ2dlZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW3RhZ1BhdHQscGF5bG9hZFBhdHRdLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2Yoc3BlY2ltZW4pIT09J3RhZ2dlZCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFeHBlY3RlZCB0YWdnZWQgb2JqZWN0LCBub3QgJHtxKFxucGFzc1N0eWxlT2Yoc3BlY2ltZW4pKVxuIH06ICR7c3BlY2ltZW59YCk7XG5cbiB9XG5yZXR1cm4oXG5jaGVja01hdGNoZXMoZ2V0VGFnKHNwZWNpbWVuKSx0YWdQYXR0LGNoZWNrLCd0YWcnKSYmXG5jaGVja01hdGNoZXMoc3BlY2ltZW4ucGF5bG9hZCxwYXlsb2FkUGF0dCxjaGVjaywncGF5bG9hZCcpKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja01hdGNoZXMoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDp0YWdnZWQgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX2tpbmQsX2VuY29kZVBhc3NhYmxlKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQmlnaW50SGVscGVyPUZhcignbWF0Y2g6YmlnaW50IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtkZWNpbWFsRGlnaXRzTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2JpZ2ludCcsY2hlY2spJiZcbmNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0KHNwZWNpbWVuLGRlY2ltYWxEaWdpdHNMaW1pdCxjaGVjaykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpiaWdpbnQgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdiaWdpbnQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaE5hdEhlbHBlcj1GYXIoJ21hdGNoOm5hdCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7ZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdiaWdpbnQnLGNoZWNrKSYmXG5jaGVjayhcbi8qICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuPj0wbixcblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBub24tbmVnYXRpdmVgKSYmXG5cbmNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0KHNwZWNpbWVuLGRlY2ltYWxEaWdpdHNMaW1pdCxjaGVjaykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpuYXQgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbi8vXG5nZXRQYXNzU3R5bGVDb3ZlcignYmlnaW50Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTdHJpbmdIZWxwZXI9RmFyKCdtYXRjaDpzdHJpbmcgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e3N0cmluZ0xlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xuLy9cbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnc3RyaW5nJyxjaGVjaykmJihcbi8vXG4vKiAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5sZW5ndGg8PXN0cmluZ0xlbmd0aExpbWl0fHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBzdHJpbmcgJHtzcGVjaW1lbn0gbXVzdCBub3QgYmUgYmlnZ2VyIHRoYW4gJHtzdHJpbmdMZW5ndGhMaW1pdH1gKSkpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtdKSxcbmNoZWNrLFxuJ21hdGNoOnN0cmluZyBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ3N0cmluZycpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3ltYm9sSGVscGVyPUZhcignbWF0Y2g6c3ltYm9sIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtzeW1ib2xOYW1lTGVuZ3RoTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdzeW1ib2wnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3Qgc3ltYm9sTmFtZT1uYW1lRm9yUGFzc2FibGVTeW1ib2woc3BlY2ltZW4pO1xuXG5pZih0eXBlb2Ygc3ltYm9sTmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludGVybmFsOiBQYXNzYWJsZSBzeW1ib2wgJHtzcGVjaW1lbn0gbXVzdCBoYXZlIGEgcGFzc2FibGUgbmFtZWA7XG4gfVxucmV0dXJuIGNoZWNrKFxuc3ltYm9sTmFtZS5sZW5ndGg8PXN5bWJvbE5hbWVMZW5ndGhMaW1pdCxcblggYFN5bWJvbCBuYW1lICR7cShcbnN5bWJvbE5hbWUpXG4gfSBtdXN0IG5vdCBiZSBiaWdnZXIgdGhhbiAke3N5bWJvbE5hbWVMZW5ndGhMaW1pdH1gKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6c3ltYm9sIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3Zlcignc3ltYm9sJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hSZW1vdGFibGVIZWxwZXI9RmFyKCdtYXRjaDpyZW1vdGFibGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJlbW90YWJsZURlc2MsY2hlY2spPT57XG5pZihpc0tpbmQoc3BlY2ltZW4sJ3JlbW90YWJsZScpKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNoZWNrPT09aWRlbnRDaGVja2VyKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtsYWJlbH09cmVtb3RhYmxlRGVzYztcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5jb25zdCBraW5kRGV0YWlscz1cbnBhc3NTdHlsZSE9PSd0YWdnZWQnP1xuLy9cbmIocGFzc1N0eWxlKTpcbi8vXG4vL1xucShnZXRUYWcoc3BlY2ltZW4pKTtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuLy9cbi8vXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSByZW1vdGFibGUgJHtiKGxhYmVsKX0sIG5vdCAke2tpbmREZXRhaWxzfWApO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KGFsbGVnZWRSZW1vdGFibGVEZXNjLGNoZWNrKT0+XG5jaGVja01hdGNoZXMoXG5hbGxlZ2VkUmVtb3RhYmxlRGVzYyxcbmhhcmRlbih7bGFiZWw6TU0uc3RyaW5nKCl9KSxcbmNoZWNrLFxuJ21hdGNoOnJlbW90YWJsZSBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfcmVtb3RhYmxlRGVzYyxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdyZW1vdGFibGUnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaExURUhlbHBlcj1GYXIoJ21hdGNoOmx0ZSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scmlnaHRPcGVyYW5kLGNoZWNrKT0+XG5rZXlMVEUoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPD0gJHtyaWdodE9wZXJhbmR9YCksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrS2V5LFxuXG5nZXRSYW5rQ292ZXI6KHJpZ2h0T3BlcmFuZCxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihyaWdodE9wZXJhbmQpO1xuLy9cbi8vXG4vL1xubGV0W2xlZnRCb3VuZCxyaWdodEJvdW5kXT1nZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGUpO1xuY29uc3QgbmV3UmlnaHRCb3VuZD0gYCR7ZW5jb2RlUGFzc2FibGUocmlnaHRPcGVyYW5kKX1+YDtcbmlmKG5ld1JpZ2h0Qm91bmQhPT11bmRlZmluZWQpe1xucmlnaHRCb3VuZD1uZXdSaWdodEJvdW5kO1xuIH1cbnJldHVybltsZWZ0Qm91bmQscmlnaHRCb3VuZF07XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaExUSGVscGVyPUZhcignbWF0Y2g6bHQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5TFQoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPCAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjptYXRjaExURUhlbHBlci5nZXRSYW5rQ292ZXJ9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hHVEVIZWxwZXI9RmFyKCdtYXRjaDpndGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5R1RFKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlID49ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOihyaWdodE9wZXJhbmQsZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmlnaHRPcGVyYW5kKTtcbi8vXG4vL1xuLy9cbmxldFtsZWZ0Qm91bmQscmlnaHRCb3VuZF09Z2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbmNvbnN0IG5ld0xlZnRCb3VuZD1lbmNvZGVQYXNzYWJsZShyaWdodE9wZXJhbmQpO1xuaWYobmV3TGVmdEJvdW5kIT09dW5kZWZpbmVkKXtcbmxlZnRCb3VuZD1uZXdMZWZ0Qm91bmQ7XG4gfVxucmV0dXJuW2xlZnRCb3VuZCxyaWdodEJvdW5kXTtcbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoR1RIZWxwZXI9RmFyKCdtYXRjaDpndCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scmlnaHRPcGVyYW5kLGNoZWNrKT0+XG5rZXlHVChzcGVjaW1lbixyaWdodE9wZXJhbmQpfHxcbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSA+ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOm1hdGNoR1RFSGVscGVyLmdldFJhbmtDb3Zlcn0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFJlY29yZE9mSGVscGVyPUZhcignbWF0Y2g6cmVjb3JkT2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5ba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sXG5jaGVjayk9Plxue1xuY29uc3R7bnVtUHJvcGVydGllc0xpbWl0LHByb3BlcnR5TmFtZUxlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5UmVjb3JkJyxjaGVjaykmJlxuY2hlY2soXG5vd25LZXlzKHNwZWNpbWVuKS5sZW5ndGg8PW51bVByb3BlcnRpZXNMaW1pdCxcblggYE11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICR7cShcbm51bVByb3BlcnRpZXNMaW1pdClcbiB9IHByb3BlcnRpZXM6ICR7c3BlY2ltZW59YCkmJlxuXG5lbnRyaWVzKHNwZWNpbWVuKS5ldmVyeShcbihba2V5LHZhbHVlXSk9PlxuYXBwbHlMYWJlbGluZ0Vycm9yKFxuY2hlY2ssXG5bXG5rZXkubGVuZ3RoPD1wcm9wZXJ0eU5hbWVMZW5ndGhMaW1pdCxcblggYFByb3BlcnR5IG5hbWUgbXVzdCBub3QgYmUgbG9uZ2VyIHRoYW4gJHtxKFxucHJvcGVydHlOYW1lTGVuZ3RoTGltaXQpXG4gfWBdLFxuXG5rZXkpJiZcblxuY2hlY2tNYXRjaGVzKFxuaGFyZGVuKFtrZXksdmFsdWVdKSxcbmhhcmRlbihba2V5UGF0dCx2YWx1ZVBhdHRdKSxcbmNoZWNrLFxua2V5KSkpO1xuXG5cblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKSxNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOnJlY29yZE9mIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9lbnRyeVBhdHQpPT5nZXRQYXNzU3R5bGVDb3ZlcignY29weVJlY29yZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQXJyYXlPZkhlbHBlcj1GYXIoJ21hdGNoOmFycmF5T2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtzdWJQYXR0LGxpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7YXJyYXlMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbi8vXG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlBcnJheScsY2hlY2spJiYoXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLmxlbmd0aDw9YXJyYXlMZW5ndGhMaW1pdHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgQXJyYXkgbGVuZ3RoICR7c3BlY2ltZW4ubGVuZ3RofSBtdXN0IGJlIDw9IGxpbWl0ICR7YXJyYXlMZW5ndGhMaW1pdH1gKSkmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKHNwZWNpbWVuLHN1YlBhdHQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6YXJyYXlPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcignY29weUFycmF5Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTZXRPZkhlbHBlcj1GYXIoJ21hdGNoOnNldE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixba2V5UGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e251bVNldEVsZW1lbnRzTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlTZXQnLGNoZWNrKSYmXG5jaGVjayhcbi8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4ucGF5bG9hZC5sZW5ndGg8bnVtU2V0RWxlbWVudHNMaW1pdCxcblggYFNldCBtdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke3EobnVtU2V0RWxlbWVudHNMaW1pdCl9IGVsZW1lbnRzOiAke1xuc3BlY2ltZW4ucGF5bG9hZC5sZW5ndGhcbiB9YCkmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKHNwZWNpbWVuLnBheWxvYWQsa2V5UGF0dCxjaGVjaywnc2V0IGVsZW1lbnRzJykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpzZXRPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcigndGFnZ2VkJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hCYWdPZkhlbHBlcj1GYXIoJ21hdGNoOmJhZ09mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsY291bnRQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQsZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QmFnJyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQubGVuZ3RoPD1cbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQsXG5YIGBCYWcgbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtxKFxubnVtVW5pcXVlQmFnRWxlbWVudHNMaW1pdClcbiB9IHVuaXF1ZSBlbGVtZW50czogJHtzcGVjaW1lbn1gKSYmXG5cbnNwZWNpbWVuLnBheWxvYWQuZXZlcnkoXG4oW2tleSxjb3VudF0saSk9PlxuY2hlY2tNYXRjaGVzKGtleSxrZXlQYXR0LGNoZWNrLCBgYmFnIGtleXNbJHtpfV1gKSYmXG5hcHBseUxhYmVsaW5nRXJyb3IoXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdCxcbltjb3VudCxkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2tdLFxuIGBiYWcgY291bnRzWyR7aX1dYCkmJlxuXG5jaGVja01hdGNoZXMoY291bnQsY291bnRQYXR0LGNoZWNrLCBgYmFnIGNvdW50c1ske2l9XWApKSk7XG5cblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKSxNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOmJhZ09mIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KCk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaE1hcE9mSGVscGVyPUZhcignbWF0Y2g6bWFwT2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5ba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sXG5jaGVjayk9Plxue1xuY29uc3R7bnVtTWFwRW50cmllc0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5TWFwJyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQua2V5cy5sZW5ndGg8PVxubnVtTWFwRW50cmllc0xpbWl0LFxuWCBgQ29weU1hcCBtdXN0IGhhdmUgbm8gbW9yZSB0aGFuICR7cShcbm51bU1hcEVudHJpZXNMaW1pdClcbiB9IGVudHJpZXM6ICR7c3BlY2ltZW59YCkmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKFxuc3BlY2ltZW4ucGF5bG9hZC5rZXlzLFxua2V5UGF0dCxcbmNoZWNrLFxuJ21hcCBrZXlzJykmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKFxuc3BlY2ltZW4ucGF5bG9hZC52YWx1ZXMsXG52YWx1ZVBhdHQsXG5jaGVjayxcbidtYXAgdmFsdWVzJykpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDptYXBPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfZW50cnlQYXR0KT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgc3BsaXRBcnJheVBhcnRzPShzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KT0+e1xuY29uc3QgbnVtUmVxdWlyZWQ9cmVxdWlyZWRQYXR0Lmxlbmd0aDtcbmNvbnN0IG51bU9wdGlvbmFsPW9wdGlvbmFsUGF0dC5sZW5ndGg7XG5jb25zdCByZXF1aXJlZFNwZWNpbWVuPXNwZWNpbWVuLnNsaWNlKDAsbnVtUmVxdWlyZWQpO1xuY29uc3Qgb3B0aW9uYWxTcGVjaW1lbj1zcGVjaW1lbi5zbGljZShcbm51bVJlcXVpcmVkLFxubnVtUmVxdWlyZWQrbnVtT3B0aW9uYWwpO1xuXG5jb25zdCByZXN0U3BlY2ltZW49c3BlY2ltZW4uc2xpY2UobnVtUmVxdWlyZWQrbnVtT3B0aW9uYWwpO1xucmV0dXJuIGhhcmRlbih7cmVxdWlyZWRTcGVjaW1lbixvcHRpb25hbFNwZWNpbWVuLHJlc3RTcGVjaW1lbn0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGFwdEFycmF5UGF0dGVybj0ob3B0aW9uYWxQYXR0LGxlbmd0aCk9PlxuaGFyZGVuKG9wdGlvbmFsUGF0dC5zbGljZSgwLGxlbmd0aCkubWFwKChwYXR0KT0+TU0ub3B0KHBhdHQpKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFNwbGl0QXJyYXlIZWxwZXI9RmFyKCdtYXRjaDpzcGxpdEFycmF5IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9W10scmVzdFBhdHQ9TU0uYW55KCldLFxuY2hlY2spPT5cbntcbmlmKCFjaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlBcnJheScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtyZXF1aXJlZFNwZWNpbWVuLG9wdGlvbmFsU3BlY2ltZW4scmVzdFNwZWNpbWVufT1cbnNwbGl0QXJyYXlQYXJ0cyhzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KTtcbmNvbnN0IHBhcnRpYWxQYXR0PWFkYXB0QXJyYXlQYXR0ZXJuKFxub3B0aW9uYWxQYXR0LFxub3B0aW9uYWxTcGVjaW1lbi5sZW5ndGgpO1xuXG5sZXQgYXJnTnVtPTA7XG5yZXR1cm4oXG4ocmVxdWlyZWRTcGVjaW1lbi5sZW5ndGg9PT1yZXF1aXJlZFBhdHQubGVuZ3RofHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBFeHBlY3RlZCBhdCBsZWFzdCAke3EoXG5yZXF1aXJlZFBhdHQubGVuZ3RoKVxuIH0gYXJndW1lbnRzOiAke3NwZWNpbWVufWApKSYmXG5cbnJlcXVpcmVkUGF0dC5ldmVyeSgocCxpKT0+XG4vL1xuY2hlY2tNYXRjaGVzKHJlcXVpcmVkU3BlY2ltZW5baV0scCxjaGVjaywgYGFyZyAke2FyZ051bSsrfWApKSYmXG5cbnBhcnRpYWxQYXR0LmV2ZXJ5KChwLGkpPT5cbi8vXG5jaGVja01hdGNoZXMob3B0aW9uYWxTcGVjaW1lbltpXSxwLGNoZWNrLCBgYXJnICR7YXJnTnVtKyt9P2ApKSYmXG5cbmNoZWNrTWF0Y2hlcyhyZXN0U3BlY2ltZW4scmVzdFBhdHQsY2hlY2ssJy4uLnJlc3QnKSk7XG5cbiB9LFxuXG4vKlxuXG5cbiAgICAgKi9cbmNoZWNrSXNXZWxsRm9ybWVkOihzcGxpdEFycmF5LGNoZWNrKT0+e1xuaWYoXG5wYXNzU3R5bGVPZihzcGxpdEFycmF5KT09PSdjb3B5QXJyYXknJiYoXG5zcGxpdEFycmF5Lmxlbmd0aD49MXx8c3BsaXRBcnJheS5sZW5ndGg8PTMpKVxue1xuY29uc3RbcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD11bmRlZmluZWQscmVzdFBhdHQ9dW5kZWZpbmVkXT1cbnNwbGl0QXJyYXk7XG5pZihcbmlzUGF0dGVybihyZXF1aXJlZFBhdHQpJiZcbnBhc3NTdHlsZU9mKHJlcXVpcmVkUGF0dCk9PT0nY29weUFycmF5JyYmKFxub3B0aW9uYWxQYXR0PT09dW5kZWZpbmVkfHxcbmlzUGF0dGVybihvcHRpb25hbFBhdHQpJiZcbnBhc3NTdHlsZU9mKG9wdGlvbmFsUGF0dCk9PT0nY29weUFycmF5JykmJihcbnJlc3RQYXR0PT09dW5kZWZpbmVkfHxpc1BhdHRlcm4ocmVzdFBhdHQpKSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYE11c3QgYmUgYW4gYXJyYXkgb2YgYSByZXF1aXJlZFBhdHQgYXJyYXksIGFuIG9wdGlvbmFsIG9wdGlvbmFsUGF0dCBhcnJheSwgYW5kIGFuIG9wdGlvbmFsIHJlc3RQYXR0OiAke3EoXG5zcGxpdEFycmF5KVxuIH1gKTtcblxuIH0sXG5cbmdldFJhbmtDb3ZlcjooW1xuX3JlcXVpcmVkUGF0dCxcbl9vcHRpb25hbFBhdHQ9dW5kZWZpbmVkLFxuX3Jlc3RQYXR0PXVuZGVmaW5lZF0pPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdjb3B5QXJyYXknKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHNwbGl0UmVjb3JkUGFydHM9KHNwZWNpbWVuLHJlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQpPT57XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlcXVpcmVkRW50cmllcz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBvcHRpb25hbEVudHJpZXM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdEVudHJpZXM9W107XG5mb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiBlbnRyaWVzKHNwZWNpbWVuKSl7XG5pZihoYXNPd25Qcm9wZXJ0eU9mKHJlcXVpcmVkUGF0dCxuYW1lKSl7XG5yZXF1aXJlZEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1lbHNlIGlmKGhhc093blByb3BlcnR5T2Yob3B0aW9uYWxQYXR0LG5hbWUpKXtcbm9wdGlvbmFsRW50cmllcy5wdXNoKFtuYW1lLHZhbHVlXSk7XG4gfWVsc2V7XG5yZXN0RW50cmllcy5wdXNoKFtuYW1lLHZhbHVlXSk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe1xucmVxdWlyZWRTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhyZXF1aXJlZEVudHJpZXMpLFxub3B0aW9uYWxTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhvcHRpb25hbEVudHJpZXMpLFxucmVzdFNwZWNpbWVuOmZyb21VbmlxdWVFbnRyaWVzKHJlc3RFbnRyaWVzKX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGFkYXB0UmVjb3JkUGF0dGVybj0ob3B0aW9uYWxQYXR0LG5hbWVzKT0+XG5mcm9tVW5pcXVlRW50cmllcyhuYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxNTS5vcHQob3B0aW9uYWxQYXR0W25hbWVdKV0pKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3BsaXRSZWNvcmRIZWxwZXI9RmFyKCdtYXRjaDpzcGxpdFJlY29yZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0PXt9LHJlc3RQYXR0PU1NLmFueSgpXSxcbmNoZWNrKT0+XG57XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5UmVjb3JkJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0e3JlcXVpcmVkU3BlY2ltZW4sb3B0aW9uYWxTcGVjaW1lbixyZXN0U3BlY2ltZW59PVxuc3BsaXRSZWNvcmRQYXJ0cyhzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KTtcblxuY29uc3QgcGFydGlhbE5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhvcHRpb25hbFNwZWNpbWVuKTtcbmNvbnN0IHBhcnRpYWxQYXR0PWFkYXB0UmVjb3JkUGF0dGVybihvcHRpb25hbFBhdHQscGFydGlhbE5hbWVzKTtcbnJldHVybihcbmNoZWNrTWF0Y2hlcyhyZXF1aXJlZFNwZWNpbWVuLHJlcXVpcmVkUGF0dCxjaGVjaykmJlxucGFydGlhbE5hbWVzLmV2ZXJ5KChuYW1lKT0+XG5jaGVja01hdGNoZXMoXG5vcHRpb25hbFNwZWNpbWVuW25hbWVdLFxucGFydGlhbFBhdHRbbmFtZV0sXG5jaGVjayxcbiBgJHtuYW1lfT9gKSkmJlxuXG5cbmNoZWNrTWF0Y2hlcyhyZXN0U3BlY2ltZW4scmVzdFBhdHQsY2hlY2ssJy4uLnJlc3QnKSk7XG5cbiB9LFxuXG4vKlxuXG5cbiAgICAgKi9cbmNoZWNrSXNXZWxsRm9ybWVkOihzcGxpdEFycmF5LGNoZWNrKT0+e1xuaWYoXG5wYXNzU3R5bGVPZihzcGxpdEFycmF5KT09PSdjb3B5QXJyYXknJiYoXG5zcGxpdEFycmF5Lmxlbmd0aD49MXx8c3BsaXRBcnJheS5sZW5ndGg8PTMpKVxue1xuY29uc3RbcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD11bmRlZmluZWQscmVzdFBhdHQ9dW5kZWZpbmVkXT1cbnNwbGl0QXJyYXk7XG5pZihcbmlzUGF0dGVybihyZXF1aXJlZFBhdHQpJiZcbnBhc3NTdHlsZU9mKHJlcXVpcmVkUGF0dCk9PT0nY29weVJlY29yZCcmJihcbm9wdGlvbmFsUGF0dD09PXVuZGVmaW5lZHx8XG5pc1BhdHRlcm4ob3B0aW9uYWxQYXR0KSYmXG5wYXNzU3R5bGVPZihvcHRpb25hbFBhdHQpPT09J2NvcHlSZWNvcmQnKSYmKFxucmVzdFBhdHQ9PT11bmRlZmluZWR8fGlzUGF0dGVybihyZXN0UGF0dCkpKVxue1xucmV0dXJuIHRydWU7XG4gfVxuIH1cbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgTXVzdCBiZSBhbiBhcnJheSBvZiBhIHJlcXVpcmVkUGF0dCByZWNvcmQsIGFuIG9wdGlvbmFsIG9wdGlvbmFsUGF0dCByZWNvcmQsIGFuZCBhbiBvcHRpb25hbCByZXN0UGF0dDogJHtxKFxuc3BsaXRBcnJheSlcbiB9YCk7XG5cbiB9LFxuXG5nZXRSYW5rQ292ZXI6KFtcbnJlcXVpcmVkUGF0dCxcbl9vcHRpb25hbFBhdHQ9dW5kZWZpbmVkLFxuX3Jlc3RQYXR0PXVuZGVmaW5lZF0pPT5cbmdldFBhc3NTdHlsZUNvdmVyKHBhc3NTdHlsZU9mKHJlcXVpcmVkUGF0dCkpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBIZWxwZXJzQnlNYXRjaFRhZz1oYXJkZW4oe1xuJ21hdGNoOmFueSc6bWF0Y2hBbnlIZWxwZXIsXG4nbWF0Y2g6YW5kJzptYXRjaEFuZEhlbHBlcixcbidtYXRjaDpvcic6bWF0Y2hPckhlbHBlcixcbidtYXRjaDpub3QnOm1hdGNoTm90SGVscGVyLFxuXG4nbWF0Y2g6c2NhbGFyJzptYXRjaFNjYWxhckhlbHBlcixcbidtYXRjaDprZXknOm1hdGNoS2V5SGVscGVyLFxuJ21hdGNoOnBhdHRlcm4nOm1hdGNoUGF0dGVybkhlbHBlcixcbidtYXRjaDpraW5kJzptYXRjaEtpbmRIZWxwZXIsXG4nbWF0Y2g6dGFnZ2VkJzptYXRjaFRhZ2dlZEhlbHBlcixcbidtYXRjaDpiaWdpbnQnOm1hdGNoQmlnaW50SGVscGVyLFxuJ21hdGNoOm5hdCc6bWF0Y2hOYXRIZWxwZXIsXG4nbWF0Y2g6c3RyaW5nJzptYXRjaFN0cmluZ0hlbHBlcixcbidtYXRjaDpzeW1ib2wnOm1hdGNoU3ltYm9sSGVscGVyLFxuJ21hdGNoOnJlbW90YWJsZSc6bWF0Y2hSZW1vdGFibGVIZWxwZXIsXG5cbidtYXRjaDpsdCc6bWF0Y2hMVEhlbHBlcixcbidtYXRjaDpsdGUnOm1hdGNoTFRFSGVscGVyLFxuJ21hdGNoOmd0ZSc6bWF0Y2hHVEVIZWxwZXIsXG4nbWF0Y2g6Z3QnOm1hdGNoR1RIZWxwZXIsXG5cbidtYXRjaDphcnJheU9mJzptYXRjaEFycmF5T2ZIZWxwZXIsXG4nbWF0Y2g6cmVjb3JkT2YnOm1hdGNoUmVjb3JkT2ZIZWxwZXIsXG4nbWF0Y2g6c2V0T2YnOm1hdGNoU2V0T2ZIZWxwZXIsXG4nbWF0Y2g6YmFnT2YnOm1hdGNoQmFnT2ZIZWxwZXIsXG4nbWF0Y2g6bWFwT2YnOm1hdGNoTWFwT2ZIZWxwZXIsXG4nbWF0Y2g6c3BsaXRBcnJheSc6bWF0Y2hTcGxpdEFycmF5SGVscGVyLFxuJ21hdGNoOnNwbGl0UmVjb3JkJzptYXRjaFNwbGl0UmVjb3JkSGVscGVyfSk7XG5cblxuY29uc3QgbWFrZU1hdGNoZXI9KHRhZyxwYXlsb2FkKT0+e1xuY29uc3QgbWF0Y2hlcj1tYWtlVGFnZ2VkKHRhZyxwYXlsb2FkKTtcbmFzc2VydFBhdHRlcm4obWF0Y2hlcik7XG5yZXR1cm4gbWF0Y2hlcjtcbiB9O1xuXG5jb25zdCBtYWtlS2luZE1hdGNoZXI9KGtpbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6a2luZCcsa2luZCk7XG5cbmNvbnN0IEFueVNoYXBlPW1ha2VNYXRjaGVyKCdtYXRjaDphbnknLHVuZGVmaW5lZCk7XG5jb25zdCBTY2FsYXJTaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6c2NhbGFyJyx1bmRlZmluZWQpO1xuY29uc3QgS2V5U2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOmtleScsdW5kZWZpbmVkKTtcbmNvbnN0IFBhdHRlcm5TaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6cGF0dGVybicsdW5kZWZpbmVkKTtcbmNvbnN0IEJvb2xlYW5TaGFwZT1tYWtlS2luZE1hdGNoZXIoJ2Jvb2xlYW4nKTtcbmNvbnN0IE51bWJlclNoYXBlPW1ha2VLaW5kTWF0Y2hlcignbnVtYmVyJyk7XG5jb25zdCBCaWdJbnRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpiaWdpbnQnLFtdKTtcbmNvbnN0IE5hdFNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOm5hdCcsW10pO1xuY29uc3QgU3RyaW5nU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c3RyaW5nJyxbXSk7XG5jb25zdCBTeW1ib2xTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpzeW1ib2wnLFtdKTtcbmNvbnN0IFJlY29yZFNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOnJlY29yZE9mJyxbQW55U2hhcGUsQW55U2hhcGVdKTtcbmNvbnN0IEFycmF5U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YXJyYXlPZicsW0FueVNoYXBlXSk7XG5jb25zdCBTZXRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpzZXRPZicsW0FueVNoYXBlXSk7XG5jb25zdCBCYWdTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpiYWdPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBNYXBTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDptYXBPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBSZW1vdGFibGVTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ3JlbW90YWJsZScpO1xuY29uc3QgRXJyb3JTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ2Vycm9yJyk7XG5jb25zdCBQcm9taXNlU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdwcm9taXNlJyk7XG5jb25zdCBVbmRlZmluZWRTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ3VuZGVmaW5lZCcpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VMaW1pdHNNYXRjaGVyPSh0YWcscGF5bG9hZCk9PntcbmlmKHBheWxvYWRbcGF5bG9hZC5sZW5ndGgtMV09PT11bmRlZmluZWQpe1xucGF5bG9hZD1oYXJkZW4ocGF5bG9hZC5zbGljZSgwLHBheWxvYWQubGVuZ3RoLTEpKTtcbiB9XG5yZXR1cm4gbWFrZU1hdGNoZXIodGFnLHBheWxvYWQpO1xuIH07XG5cbmNvbnN0IG1ha2VSZW1vdGFibGVNYXRjaGVyPShsYWJlbD11bmRlZmluZWQpPT5cbmxhYmVsPT09dW5kZWZpbmVkP1xuUmVtb3RhYmxlU2hhcGU6XG5tYWtlTWF0Y2hlcignbWF0Y2g6cmVtb3RhYmxlJyxoYXJkZW4oe2xhYmVsfSkpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VTcGxpdFBheWxvYWQ9KFxuZW1wdHksXG5iYXNlLFxub3B0aW9uYWw9dW5kZWZpbmVkLFxucmVzdD11bmRlZmluZWQpPT5cbntcbmlmKHJlc3Qpe1xucmV0dXJuW2Jhc2Usb3B0aW9uYWx8fGVtcHR5LHJlc3RdO1xuIH1cbmlmKG9wdGlvbmFsKXtcbnJldHVybltiYXNlLG9wdGlvbmFsXTtcbiB9XG5yZXR1cm5bYmFzZV07XG4gfTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgTT1oYXJkZW4oe1xuYW55OigpPT5BbnlTaGFwZSxcbmFuZDooLi4ucGF0dHMpPT5tYWtlTWF0Y2hlcignbWF0Y2g6YW5kJyxwYXR0cyksXG5vcjooLi4ucGF0dHMpPT5tYWtlTWF0Y2hlcignbWF0Y2g6b3InLHBhdHRzKSxcbm5vdDooc3ViUGF0dCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpub3QnLHN1YlBhdHQpLFxuXG5zY2FsYXI6KCk9PlNjYWxhclNoYXBlLFxua2V5OigpPT5LZXlTaGFwZSxcbnBhdHRlcm46KCk9PlBhdHRlcm5TaGFwZSxcbmtpbmQ6bWFrZUtpbmRNYXRjaGVyLFxudGFnZ2VkOih0YWdQYXR0PU0uc3RyaW5nKCkscGF5bG9hZFBhdHQ9TS5hbnkoKSk9PlxubWFrZU1hdGNoZXIoJ21hdGNoOnRhZ2dlZCcsaGFyZGVuKFt0YWdQYXR0LHBheWxvYWRQYXR0XSkpLFxuYm9vbGVhbjooKT0+Qm9vbGVhblNoYXBlLFxubnVtYmVyOigpPT5OdW1iZXJTaGFwZSxcbmJpZ2ludDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpiaWdpbnQnLFtsaW1pdHNdKTpCaWdJbnRTaGFwZSxcbm5hdDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpuYXQnLFtsaW1pdHNdKTpOYXRTaGFwZSxcbnN0cmluZzoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpzdHJpbmcnLFtsaW1pdHNdKTpTdHJpbmdTaGFwZSxcbnN5bWJvbDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpzeW1ib2wnLFtsaW1pdHNdKTpTeW1ib2xTaGFwZSxcbnJlY29yZDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP00ucmVjb3JkT2YoTS5hbnkoKSxNLmFueSgpLGxpbWl0cyk6UmVjb3JkU2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYXJyYXk6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLmFycmF5T2YoTS5hbnkoKSxsaW1pdHMpOkFycmF5U2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5zZXQ6KGxpbWl0cz11bmRlZmluZWQpPT5saW1pdHM/TS5zZXRPZihNLmFueSgpLGxpbWl0cyk6U2V0U2hhcGUsXG5iYWc6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLmJhZ09mKE0uYW55KCksTS5hbnkoKSxsaW1pdHMpOkJhZ1NoYXBlLFxubWFwOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5tYXBPZihNLmFueSgpLE0uYW55KCksbGltaXRzKTpNYXBTaGFwZSxcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZW1vdGFibGU6bWFrZVJlbW90YWJsZU1hdGNoZXIsXG5lcnJvcjooKT0+RXJyb3JTaGFwZSxcbnByb21pc2U6KCk9PlByb21pc2VTaGFwZSxcbnVuZGVmaW5lZDooKT0+VW5kZWZpbmVkU2hhcGUsXG5udWxsOigpPT5udWxsLFxuXG5sdDoocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmx0JyxyaWdodE9wZXJhbmQpLFxubHRlOihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6bHRlJyxyaWdodE9wZXJhbmQpLFxuZXE6KGtleSk9PntcbmFzc2VydEtleShrZXkpO1xucmV0dXJuIGtleT09PXVuZGVmaW5lZD9NLnVuZGVmaW5lZCgpOmtleTtcbiB9LFxubmVxOihrZXkpPT5NLm5vdChNLmVxKGtleSkpLFxuZ3RlOihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6Z3RlJyxyaWdodE9wZXJhbmQpLFxuZ3Q6KHJpZ2h0T3BlcmFuZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpndCcscmlnaHRPcGVyYW5kKSxcblxucmVjb3JkT2Y6KGtleVBhdHQ9TS5hbnkoKSx2YWx1ZVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6cmVjb3JkT2YnLFtrZXlQYXR0LHZhbHVlUGF0dCxsaW1pdHNdKSxcbmFycmF5T2Y6KHN1YlBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YXJyYXlPZicsW3N1YlBhdHQsbGltaXRzXSksXG5zZXRPZjooa2V5UGF0dD1NLmFueSgpLGxpbWl0cz11bmRlZmluZWQpPT5cbm1ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpzZXRPZicsW2tleVBhdHQsbGltaXRzXSksXG5iYWdPZjooa2V5UGF0dD1NLmFueSgpLGNvdW50UGF0dD1NLmFueSgpLGxpbWl0cz11bmRlZmluZWQpPT5cbm1ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpiYWdPZicsW2tleVBhdHQsY291bnRQYXR0LGxpbWl0c10pLFxubWFwT2Y6KGtleVBhdHQ9TS5hbnkoKSx2YWx1ZVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6bWFwT2YnLFtrZXlQYXR0LHZhbHVlUGF0dCxsaW1pdHNdKSxcbnNwbGl0QXJyYXk6KGJhc2Usb3B0aW9uYWw9dW5kZWZpbmVkLHJlc3Q9dW5kZWZpbmVkKT0+XG5tYWtlTWF0Y2hlcihcbidtYXRjaDpzcGxpdEFycmF5Jyxcbm1ha2VTcGxpdFBheWxvYWQoW10sYmFzZSxvcHRpb25hbCxyZXN0KSksXG5cbnNwbGl0UmVjb3JkOihiYXNlLG9wdGlvbmFsPXVuZGVmaW5lZCxyZXN0PXVuZGVmaW5lZCk9PlxubWFrZU1hdGNoZXIoXG4nbWF0Y2g6c3BsaXRSZWNvcmQnLFxubWFrZVNwbGl0UGF5bG9hZCh7fSxiYXNlLG9wdGlvbmFsLHJlc3QpKSxcblxuc3BsaXQ6KGJhc2UscmVzdD11bmRlZmluZWQpPT57XG5pZihwYXNzU3R5bGVPZihoYXJkZW4oYmFzZSkpPT09J2NvcHlBcnJheScpe1xuLy9cbi8vXG5yZXR1cm4gTS5zcGxpdEFycmF5KGJhc2UscmVzdCYmW10scmVzdCk7XG4gfWVsc2V7XG5yZXR1cm4gTS5zcGxpdFJlY29yZChiYXNlLHJlc3QmJnt9LHJlc3QpO1xuIH1cbiB9LFxucGFydGlhbDooYmFzZSxyZXN0PXVuZGVmaW5lZCk9PntcbmlmKHBhc3NTdHlsZU9mKGhhcmRlbihiYXNlKSk9PT0nY29weUFycmF5Jyl7XG4vL1xuLy9cbnJldHVybiBNLnNwbGl0QXJyYXkoW10sYmFzZSxyZXN0KTtcbiB9ZWxzZXtcbnJldHVybiBNLnNwbGl0UmVjb3JkKHt9LGJhc2UscmVzdCk7XG4gfVxuIH0sXG5cbmVyZWY6KHQpPT5NLm9yKHQsTS5wcm9taXNlKCkpLFxub3B0Oih0KT0+TS5vcihNLnVuZGVmaW5lZCgpLHQpLFxuXG5pbnRlcmZhY2U6KGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLG9wdGlvbnMpPT5cbi8vXG5tYWtlSW50ZXJmYWNlR3VhcmQoaW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsb3B0aW9ucyksXG5jYWxsOiguLi5hcmdQYXR0ZXJucyk9PlxuLy9cbm1ha2VNZXRob2RHdWFyZE1ha2VyKCdzeW5jJyxhcmdQYXR0ZXJucyksXG5jYWxsV2hlbjooLi4uYXJnR3VhcmRzKT0+XG4vL1xubWFrZU1ldGhvZEd1YXJkTWFrZXIoJ2FzeW5jJyxhcmdHdWFyZHMpLFxuXG5hd2FpdDooYXJnUGF0dGVybik9PlxuLy9cbm1ha2VBd2FpdEFyZ0d1YXJkKGFyZ1BhdHRlcm4pLFxucmF3OigpPT5cbi8vXG5tYWtlUmF3R3VhcmQoKX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuY2hlY2tNYXRjaGVzLFxubWF0Y2hlcyxcbm11c3RNYXRjaCxcbmFzc2VydFBhdHRlcm4sXG5pc1BhdHRlcm4sXG5nZXRSYW5rQ292ZXIsXG5NLFxua2luZE9mfSk7XG5cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCAgICAgICB7XG5jaGVja01hdGNoZXMsXG5tYXRjaGVzLFxubXVzdE1hdGNoLFxuYXNzZXJ0UGF0dGVybixcbmlzUGF0dGVybixcbmdldFJhbmtDb3Zlcixcbk0sXG5raW5kT2Z9PVxubWFrZVBhdHRlcm5LaXQoKTskaM2PX29uY2UuY2hlY2tNYXRjaGVzKGNoZWNrTWF0Y2hlcyk7JGjNj19vbmNlLm1hdGNoZXMobWF0Y2hlcyk7JGjNj19vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpOyRozY9fb25jZS5hc3NlcnRQYXR0ZXJuKGFzc2VydFBhdHRlcm4pOyRozY9fb25jZS5pc1BhdHRlcm4oaXNQYXR0ZXJuKTskaM2PX29uY2UuZ2V0UmFua0NvdmVyKGdldFJhbmtDb3Zlcik7JGjNj19vbmNlLk0oTSk7JGjNj19vbmNlLmtpbmRPZihraW5kT2YpO1xuXG5NTT1NO1xuXG4vL1xuXG4vL1xuY29uc3QgQXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuYXJnR3VhcmQ6TS5wYXR0ZXJuKCl9KTtcblxuXG5jb25zdCAgICAgICAgQXdhaXRBcmdHdWFyZFNoYXBlPU0ua2luZCgnZ3VhcmQ6YXdhaXRBcmdHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5Bd2FpdEFyZ0d1YXJkU2hhcGUoQXdhaXRBcmdHdWFyZFNoYXBlKTtcbmNvbnN0ICAgICAgICBpc0F3YWl0QXJnR3VhcmQ9KHNwZWNpbWVuKT0+XG5tYXRjaGVzKHNwZWNpbWVuLEF3YWl0QXJnR3VhcmRTaGFwZSk7JGjNj19vbmNlLmlzQXdhaXRBcmdHdWFyZChpc0F3YWl0QXJnR3VhcmQpO1xuaGFyZGVuKGlzQXdhaXRBcmdHdWFyZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0QXdhaXRBcmdHdWFyZD0oc3BlY2ltZW4pPT57XG5tdXN0TWF0Y2goc3BlY2ltZW4sQXdhaXRBcmdHdWFyZFNoYXBlLCdhd2FpdEFyZ0d1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0QXdhaXRBcmdHdWFyZChhc3NlcnRBd2FpdEFyZ0d1YXJkKTtcbmhhcmRlbihhc3NlcnRBd2FpdEFyZ0d1YXJkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VBd2FpdEFyZ0d1YXJkPShhcmdQYXR0ZXJuKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnLHtcbmFyZ0d1YXJkOmFyZ1BhdHRlcm59KTtcblxuYXNzZXJ0QXdhaXRBcmdHdWFyZChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vL1xuXG5jb25zdCBSYXdHdWFyZFBheWxvYWRTaGFwZT1NLnJlY29yZCgpO1xuXG5jb25zdCAgICAgICAgUmF3R3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOnJhd0d1YXJkJyk7JGjNj19vbmNlLlJhd0d1YXJkU2hhcGUoUmF3R3VhcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBpc1Jhd0d1YXJkPShzcGVjaW1lbik9Pm1hdGNoZXMoc3BlY2ltZW4sUmF3R3VhcmRTaGFwZSk7JGjNj19vbmNlLmlzUmF3R3VhcmQoaXNSYXdHdWFyZCk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRSYXdHdWFyZD0oc3BlY2ltZW4pPT5cbm11c3RNYXRjaChzcGVjaW1lbixSYXdHdWFyZFNoYXBlLCdyYXdHdWFyZCcpO1xuXG4vKlxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0UmF3R3VhcmQoYXNzZXJ0UmF3R3VhcmQpO1xuY29uc3QgbWFrZVJhd0d1YXJkPSgpPT5tYWtlVGFnZ2VkKCdndWFyZDpyYXdHdWFyZCcse30pO1xuXG4vL1xuLy9cblxuY29uc3QgICAgICAgIFN5bmNWYWx1ZUd1YXJkU2hhcGU9TS5vcihSYXdHdWFyZFNoYXBlLE0ucGF0dGVybigpKTskaM2PX29uY2UuU3luY1ZhbHVlR3VhcmRTaGFwZShTeW5jVmFsdWVHdWFyZFNoYXBlKTtcblxuY29uc3QgICAgICAgIFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihTeW5jVmFsdWVHdWFyZFNoYXBlKTskaM2PX29uY2UuU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUoU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUpO1xuXG5jb25zdCBBcmdHdWFyZFNoYXBlPU0ub3IoUmF3R3VhcmRTaGFwZSxBd2FpdEFyZ0d1YXJkU2hhcGUsTS5wYXR0ZXJuKCkpO1xuY29uc3QgICAgICAgIEFyZ0d1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihBcmdHdWFyZFNoYXBlKTskaM2PX29uY2UuQXJnR3VhcmRMaXN0U2hhcGUoQXJnR3VhcmRMaXN0U2hhcGUpO1xuXG5jb25zdCBTeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmNhbGxLaW5kOidzeW5jJyxcbmFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCBBc3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonYXN5bmMnLFxuYXJnR3VhcmRzOkFyZ0d1YXJkTGlzdFNoYXBlLFxub3B0aW9uYWxBcmdHdWFyZHM6TS5vcHQoQXJnR3VhcmRMaXN0U2hhcGUpLFxucmVzdEFyZ0d1YXJkOk0ub3B0KFN5bmNWYWx1ZUd1YXJkU2hhcGUpLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cbmNvbnN0ICAgICAgICBNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1NLm9yKFxuU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7JGjNj19vbmNlLk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlKE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgTWV0aG9kR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOm1ldGhvZEd1YXJkJyk7XG5cbi8qXG5cblxuICovJGjNj19vbmNlLk1ldGhvZEd1YXJkU2hhcGUoTWV0aG9kR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgYXNzZXJ0TWV0aG9kR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLE1ldGhvZEd1YXJkU2hhcGUsJ21ldGhvZEd1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0TWV0aG9kR3VhcmQoYXNzZXJ0TWV0aG9kR3VhcmQpO1xuaGFyZGVuKGFzc2VydE1ldGhvZEd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VNZXRob2RHdWFyZE1ha2VyPShcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkPXVuZGVmaW5lZCk9PlxuXG5oYXJkZW4oe1xub3B0aW9uYWw6KC4uLm9wdEFyZ0d1YXJkcyk9Pntcbm9wdGlvbmFsQXJnR3VhcmRzPT09dW5kZWZpbmVkfHxcbkZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHNldCBvZiBvcHRpb25hbCBndWFyZHNgO1xucmVzdEFyZ0d1YXJkPT09dW5kZWZpbmVkfHxcbkZhaWwgYG9wdGlvbmFsIGFyZyBndWFyZHMgbXVzdCBjb21lIGJlZm9yZSByZXN0IGFyZ2A7XG5yZXR1cm4gbWFrZU1ldGhvZEd1YXJkTWFrZXIoY2FsbEtpbmQsYXJnR3VhcmRzLG9wdEFyZ0d1YXJkcyk7XG4gfSxcbnJlc3Q6KHJBcmdHdWFyZCk9PntcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8RmFpbCBgQ2FuIG9ubHkgaGF2ZSBvbmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKFxuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcyxcbnJBcmdHdWFyZCk7XG5cbiB9LFxucmV0dXJuczoocmV0dXJuR3VhcmQ9TS51bmRlZmluZWQoKSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnZ3VhcmQ6bWV0aG9kR3VhcmQnLHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yZXN0QXJnR3VhcmQsXG5yZXR1cm5HdWFyZH0pO1xuXG5hc3NlcnRNZXRob2RHdWFyZChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9fSk7XG5cblxuY29uc3QgICAgICAgIEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5pbnRlcmZhY2VOYW1lOk0uc3RyaW5nKCksXG5tZXRob2RHdWFyZHM6TS5yZWNvcmRPZihNLnN0cmluZygpLE1ldGhvZEd1YXJkU2hhcGUpfSxcblxue1xuZGVmYXVsdEd1YXJkczpNLm9yKE0udW5kZWZpbmVkKCksJ3Bhc3NhYmxlJywncmF3JyksXG5zbG9wcHk6TS5ib29sZWFuKCksXG5zeW1ib2xNZXRob2RHdWFyZHM6TS5tYXBPZihNLnN5bWJvbCgpLE1ldGhvZEd1YXJkU2hhcGUpfSk7JGjNj19vbmNlLkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlKEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlKTtcblxuXG5cbmNvbnN0ICAgICAgICBJbnRlcmZhY2VHdWFyZFNoYXBlPU0ua2luZCgnZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnKTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuSW50ZXJmYWNlR3VhcmRTaGFwZShJbnRlcmZhY2VHdWFyZFNoYXBlKTtcbmNvbnN0ICAgICAgICBhc3NlcnRJbnRlcmZhY2VHdWFyZD0oc3BlY2ltZW4pPT57XG5tdXN0TWF0Y2goc3BlY2ltZW4sSW50ZXJmYWNlR3VhcmRTaGFwZSwnaW50ZXJmYWNlR3VhcmQnKTtcbiB9OyRozY9fb25jZS5hc3NlcnRJbnRlcmZhY2VHdWFyZChhc3NlcnRJbnRlcmZhY2VHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUludGVyZmFjZUd1YXJkPShpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zPXt9KT0+e1xuY29uc3R7c2xvcHB5PWZhbHNlLGRlZmF1bHRHdWFyZHM9c2xvcHB5PydwYXNzYWJsZSc6dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0cmluZ01ldGhvZEd1YXJkcz17fTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN5bWJvbE1ldGhvZEd1YXJkc0VudHJpZXM9W107XG5mb3IoY29uc3Qga2V5IG9mIG93bktleXMobWV0aG9kR3VhcmRzKSl7XG5jb25zdCB2YWx1ZT1tZXRob2RHdWFyZHNbLyogICAgICAgICAgICAgICAgICova2V5XTtcbmlmKHR5cGVvZiBrZXk9PT0nc3ltYm9sJyl7XG5zeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLnB1c2goW2tleSx2YWx1ZV0pO1xuIH1lbHNle1xuc3RyaW5nTWV0aG9kR3VhcmRzW2tleV09dmFsdWU7XG4gfVxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnLHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHM6c3RyaW5nTWV0aG9kR3VhcmRzLFxuLi4uKHN5bWJvbE1ldGhvZEd1YXJkc0VudHJpZXMubGVuZ3RoP1xue3N5bWJvbE1ldGhvZEd1YXJkczptYWtlQ29weU1hcChzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzKX06XG57fSksXG5kZWZhdWx0R3VhcmRzfSk7XG5cbmFzc2VydEludGVyZmFjZUd1YXJkKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5jb25zdCBHdWFyZFBheWxvYWRTaGFwZXM9aGFyZGVuKHtcbidndWFyZDphd2FpdEFyZ0d1YXJkJzpBd2FpdEFyZ0d1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOnJhd0d1YXJkJzpSYXdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDptZXRob2RHdWFyZCc6TWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnOkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlfSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0TGltaXRzIjpbImRlZmF1bHRMaW1pdHMiXSwiY2hlY2tNYXRjaGVzIjpbImNoZWNrTWF0Y2hlcyJdLCJtYXRjaGVzIjpbIm1hdGNoZXMiXSwibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdLCJhc3NlcnRQYXR0ZXJuIjpbImFzc2VydFBhdHRlcm4iXSwiaXNQYXR0ZXJuIjpbImlzUGF0dGVybiJdLCJnZXRSYW5rQ292ZXIiOlsiZ2V0UmFua0NvdmVyIl0sIk0iOlsiTSJdLCJraW5kT2YiOlsia2luZE9mIl0sIkF3YWl0QXJnR3VhcmRTaGFwZSI6WyJBd2FpdEFyZ0d1YXJkU2hhcGUiXSwiaXNBd2FpdEFyZ0d1YXJkIjpbImlzQXdhaXRBcmdHdWFyZCJdLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIjpbImFzc2VydEF3YWl0QXJnR3VhcmQiXSwiUmF3R3VhcmRTaGFwZSI6WyJSYXdHdWFyZFNoYXBlIl0sImlzUmF3R3VhcmQiOlsiaXNSYXdHdWFyZCJdLCJhc3NlcnRSYXdHdWFyZCI6WyJhc3NlcnRSYXdHdWFyZCJdLCJTeW5jVmFsdWVHdWFyZFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkU2hhcGUiXSwiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiOlsiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiXSwiQXJnR3VhcmRMaXN0U2hhcGUiOlsiQXJnR3VhcmRMaXN0U2hhcGUiXSwiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiOlsiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiXSwiTWV0aG9kR3VhcmRTaGFwZSI6WyJNZXRob2RHdWFyZFNoYXBlIl0sImFzc2VydE1ldGhvZEd1YXJkIjpbImFzc2VydE1ldGhvZEd1YXJkIl0sIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIl0sIkludGVyZmFjZUd1YXJkU2hhcGUiOlsiSW50ZXJmYWNlR3VhcmRTaGFwZSJdLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCI6WyJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAiAAAAQGVuZG8vcGF0dGVybnMtdjEuNC42L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0gGixEIGAABCBgAAIQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsIi4vc3JjL21lbW8tcmFjZS5qcyIsIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VQcm9taXNlS2l0IiwicmFjZVByb21pc2VzIl0sInJlZXhwb3J0cyI6WyIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0LG1lbW9SYWNlOyRozY9faW1wb3J0cyhbW1wiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNcIiwgW1tcIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9tZW1vLXJhY2UuanNcIiwgW1tcIm1lbW9SYWNlXCIsIFskaM2PX2EgPT4gKG1lbW9SYWNlID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvaXMtcHJvbWlzZS5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VQcm9taXNlS2l0LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlUHJvbWlzZUtpdFwifSk7JGjNj19vbmNlLm1ha2VQcm9taXNlS2l0KG1ha2VQcm9taXNlS2l0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmFjZVByb21pc2VzLCAnbmFtZScsIHt2YWx1ZTogXCJyYWNlUHJvbWlzZXNcIn0pOyRozY9fb25jZS5yYWNlUHJvbWlzZXMocmFjZVByb21pc2VzKTsgICBcblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEJlc3RQaXBlbGluYWJsZVByb21pc2U9Z2xvYmFsVGhpcy5IYW5kbGVkUHJvbWlzZXx8UHJvbWlzZTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIG1ha2VQcm9taXNlS2l0KCl7XG5jb25zdHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn09bWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KCk7XG5cbmNvbnN0IHByb21pc2U9bmV3IEJlc3RQaXBlbGluYWJsZVByb21pc2UoZXhlY3V0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtwcm9taXNlLHJlc29sdmUscmVqZWN0fSk7XG4gfVxuaGFyZGVuKG1ha2VQcm9taXNlS2l0KTtcblxuLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgcmFjZVByb21pc2VzKHZhbHVlcyl7XG5yZXR1cm4gaGFyZGVuKG1lbW9SYWNlLmNhbGwoQmVzdFBpcGVsaW5hYmxlUHJvbWlzZSx2YWx1ZXMpKTtcbiB9XG5oYXJkZW4ocmFjZVByb21pc2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQcm9taXNlS2l0IjpbIm1ha2VQcm9taXNlS2l0Il0sInJhY2VQcm9taXNlcyI6WyJyYWNlUHJvbWlzZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAs11bRlUCAABVAgAAKgAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9zcmMvaXMtcHJvbWlzZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaXNQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNQcm9taXNlLCAnbmFtZScsIHt2YWx1ZTogXCJpc1Byb21pc2VcIn0pOyRozY9fb25jZS5pc1Byb21pc2UoaXNQcm9taXNlKTsgICAvKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBpc1Byb21pc2UobWF5YmVQcm9taXNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKT09PW1heWJlUHJvbWlzZTtcbiB9XG5oYXJkZW4oaXNQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUHJvbWlzZSI6WyJpc1Byb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+mbwkZwHAACcBwAAKQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9zcmMvbWVtby1yYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtZW1vUmFjZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiovXG5cbmNvbnN0IGlzT2JqZWN0PSh2YWx1ZSk9Pk9iamVjdCh2YWx1ZSk9PT12YWx1ZTtcblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtub3duUHJvbWlzZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1hcmtTZXR0bGVkPShyZWNvcmQpPT57XG5pZighcmVjb3JkfHxyZWNvcmQuc2V0dGxlZCl7XG5yZXR1cm4gbmV3IFNldCgpO1xuIH1cblxuY29uc3R7ZGVmZXJyZWRzfT1yZWNvcmQ7XG5PYmplY3QuYXNzaWduKHJlY29yZCx7XG5kZWZlcnJlZHM6dW5kZWZpbmVkLFxuc2V0dGxlZDp0cnVlfSk7XG5cbk9iamVjdC5mcmVlemUocmVjb3JkKTtcbnJldHVybiBkZWZlcnJlZHM7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZ2V0TWVtb1JlY29yZD0odmFsdWUpPT57XG5pZighaXNPYmplY3QodmFsdWUpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtzZXR0bGVkOnRydWV9KTtcbiB9XG5cbmxldCByZWNvcmQ9a25vd25Qcm9taXNlcy5nZXQodmFsdWUpO1xuXG5pZighcmVjb3JkKXtcbnJlY29yZD17ZGVmZXJyZWRzOm5ldyBTZXQoKSxzZXR0bGVkOmZhbHNlfTtcbmtub3duUHJvbWlzZXMuc2V0KHZhbHVlLHJlY29yZCk7XG4vL1xuUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKFxuKHZhbCk9PntcbmZvcihjb25zdHtyZXNvbHZlfW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVzb2x2ZSh2YWwpO1xuIH1cbiB9LFxuKGVycik9PntcbmZvcihjb25zdHtyZWplY3R9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZWplY3QoZXJyKTtcbiB9XG4gfSk7XG5cbiB9XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0e3JhY2V9PXtcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbnJhY2UodmFsdWVzKXtcbmxldCBkZWZlcnJlZDtcbi8qICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGNhY2hlZFZhbHVlcz1bXTtcbmNvbnN0IEM9dGhpcztcbmNvbnN0IHJlc3VsdD1uZXcgQygocmVzb2x2ZSxyZWplY3QpPT57XG5kZWZlcnJlZD17cmVzb2x2ZSxyZWplY3R9O1xuZm9yKGNvbnN0IHZhbHVlIG9mIHZhbHVlcyl7XG5jYWNoZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XG5jb25zdHtzZXR0bGVkLGRlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihzZXR0bGVkKXtcbi8vXG4vL1xuQy5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmUscmVqZWN0KTtcbiB9ZWxzZXtcbmRlZmVycmVkcy5hZGQoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG5cbi8vXG4vL1xucmV0dXJuIHJlc3VsdC5maW5hbGx5KCgpPT57XG5mb3IoY29uc3QgdmFsdWUgb2YgY2FjaGVkVmFsdWVzKXtcbmNvbnN0e2RlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihkZWZlcnJlZHMpe1xuZGVmZXJyZWRzLmRlbGV0ZShkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcbiB9fTskaM2PX29uY2UucmFjZShyYWNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1lbW9SYWNlIjpbInJhY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnG3EsnwFAAB8BQAANAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVzb2x2ZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlamVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmU9KHZhbHVlKT0+e1xuaWYoaW50ZXJuYWxSZXNvbHZlKXtcbmludGVybmFsUmVzb2x2ZSh2YWx1ZSk7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09bnVsbCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVqZWN0PShyZWFzb24pPT57XG5pZihpbnRlcm5hbFJlamVjdCl7XG5pbnRlcm5hbFJlamVjdChyZWFzb24pO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVqZWN0PT09bnVsbCk7XG4gfVxuIH07XG5cbmNvbnN0IGV4ZWN1dG9yPShyZXMscmVqKT0+e1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PXVuZGVmaW5lZCYmaW50ZXJuYWxSZWplY3Q9PT11bmRlZmluZWQpO1xuaW50ZXJuYWxSZXNvbHZlPXJlcztcbmludGVybmFsUmVqZWN0PXJlajtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn0pO1xuIH07JGjNj19vbmNlLm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xuaGFyZGVuKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACUAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADcaPdCkBEAAJARAAAcAAAAQGVuZG8vc3RyZWFtLXYxLjIuNy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiXSwiZXhwb3J0cyI6WyJtYWtlUGlwZSIsIm1ha2VRdWV1ZSIsIm1ha2VTdHJlYW0iLCJtYXBSZWFkZXIiLCJtYXBXcml0ZXIiLCJwcmltZSIsInB1bXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxtYWtlUHJvbWlzZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBmcmVlemU9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL09iamVjdC5mcmVlemU7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVF1ZXVlPSgpPT57XG5sZXR7cHJvbWlzZTp0YWlsUHJvbWlzZSxyZXNvbHZlOnRhaWxSZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucmV0dXJue1xucHV0KHZhbHVlKXtcbmNvbnN0e3Jlc29sdmUscHJvbWlzZX09bWFrZVByb21pc2VLaXQoKTtcbnRhaWxSZXNvbHZlKGZyZWV6ZSh7dmFsdWUscHJvbWlzZX0pKTtcbnRhaWxSZXNvbHZlPXJlc29sdmU7XG4gfSxcbmdldCgpe1xuY29uc3QgcHJvbWlzZT10YWlsUHJvbWlzZS50aGVuKChuZXh0KT0+bmV4dC52YWx1ZSk7XG50YWlsUHJvbWlzZT10YWlsUHJvbWlzZS50aGVuKChuZXh0KT0+bmV4dC5wcm9taXNlKTtcbnJldHVybiBoYXJkZW4ocHJvbWlzZSk7XG4gfX07XG5cbiB9OyRozY9fb25jZS5tYWtlUXVldWUobWFrZVF1ZXVlKTtcbmhhcmRlbihtYWtlUXVldWUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0cmVhbT0oYWNrcyxkYXRhKT0+e1xuY29uc3Qgc3RyZWFtPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG5uZXh0KHZhbHVlKXtcbi8vXG4vL1xuZGF0YS5wdXQoZnJlZXplKHt2YWx1ZSxkb25lOmZhbHNlfSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbnJldHVybih2YWx1ZSl7XG5kYXRhLnB1dChmcmVlemUoe3ZhbHVlLGRvbmU6dHJ1ZX0pKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG4vKlxuXG4gICAgICovXG50aHJvdyhlcnJvcil7XG5kYXRhLnB1dChoYXJkZW4oUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xucmV0dXJuIHN0cmVhbTtcbiB9fSk7XG5cbnJldHVybiBzdHJlYW07XG4gfTskaM2PX29uY2UubWFrZVN0cmVhbShtYWtlU3RyZWFtKTtcbmhhcmRlbihtYWtlU3RyZWFtKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VQaXBlPSgpPT57XG5jb25zdCBkYXRhPW1ha2VRdWV1ZSgpO1xuY29uc3QgYWNrcz1tYWtlUXVldWUoKTtcbmNvbnN0IHJlYWRlcj1tYWtlU3RyZWFtKGFja3MsZGF0YSk7XG5jb25zdCB3cml0ZXI9bWFrZVN0cmVhbShkYXRhLGFja3MpO1xucmV0dXJuIGhhcmRlbihbd3JpdGVyLHJlYWRlcl0pO1xuIH07JGjNj19vbmNlLm1ha2VQaXBlKG1ha2VQaXBlKTtcbmhhcmRlbihtYWtlUGlwZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHB1bXA9YXN5bmMod3JpdGVyLHJlYWRlcixwcmltZXIpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0aWNrPShwcm9taXNlKT0+XG5FLndoZW4oXG5wcm9taXNlLFxuKHJlc3VsdCk9PntcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiB3cml0ZXIucmV0dXJuKHJlc3VsdC52YWx1ZSk7XG4gfWVsc2V7XG4vL1xuLy9cbnJldHVybiB0b2NrKHdyaXRlci5uZXh0KHJlc3VsdC52YWx1ZSkpO1xuIH1cbiB9LFxuKC8qICAgICAgICAgICAgICAgICovZXJyb3IpPT57XG5yZXR1cm4gd3JpdGVyLnRocm93KGVycm9yKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0b2NrPShwcm9taXNlKT0+XG5FLndoZW4oXG5wcm9taXNlLFxuKHJlc3VsdCk9PntcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiByZWFkZXIucmV0dXJuKHJlc3VsdC52YWx1ZSk7XG4gfWVsc2V7XG5yZXR1cm4gdGljayhyZWFkZXIubmV4dChyZXN1bHQudmFsdWUpKTtcbiB9XG4gfSxcbigvKiAgICAgICAgICAgICAgICAqL2Vycm9yKT0+e1xucmV0dXJuIHJlYWRlci50aHJvdyhlcnJvcik7XG4gfSk7XG5cbmF3YWl0IHRpY2socmVhZGVyLm5leHQocHJpbWVyKSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLnB1bXAocHVtcCk7XG5oYXJkZW4ocHVtcCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJpbWU9KGdlbmVyYXRvcixwcmltZXIpPT57XG4vL1xuY29uc3QgZmlyc3Q9Z2VuZXJhdG9yLm5leHQocHJpbWVyKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5jb25zdCBwcmltZWQ9aGFyZGVuKHtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIG5leHQodmFsdWUpe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLm5leHQodmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgcmV0dXJuKHZhbHVlKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci5yZXR1cm4odmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHRocm93KGVycm9yKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xudGhyb3cgZXJyb3I7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IudGhyb3coZXJyb3IpO1xuIH19KTtcblxucmV0dXJuIHByaW1lZDtcbiB9OyRozY9fb25jZS5wcmltZShwcmltZSk7XG5oYXJkZW4ocHJpbWUpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFJlYWRlcj0ocmVhZGVyLHRyYW5zZm9ybSk9PntcbmFzeW5jIGZ1bmN0aW9uKnRyYW5zZm9ybUdlbmVyYXRvcigpe1xuZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIHJlYWRlcil7XG55aWVsZCB0cmFuc2Zvcm0odmFsdWUpO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcik7XG5yZXR1cm4gaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcigpKTtcbiB9OyRozY9fb25jZS5tYXBSZWFkZXIobWFwUmVhZGVyKTtcbmhhcmRlbihtYXBSZWFkZXIpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFdyaXRlcj0od3JpdGVyLHRyYW5zZm9ybSk9PntcbmNvbnN0IHRyYW5zZm9ybWVkV3JpdGVyPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyBuZXh0KHZhbHVlKXtcbnJldHVybiB3cml0ZXIubmV4dCh0cmFuc2Zvcm0odmFsdWUpKTtcbiB9LFxuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgdGhyb3coZXJyb3Ipe1xucmV0dXJuIHdyaXRlci50aHJvdyhlcnJvcik7XG4gfSxcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIHJldHVybih2YWx1ZSl7XG5yZXR1cm4gd3JpdGVyLnJldHVybih2YWx1ZSk7XG4gfSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiB0cmFuc2Zvcm1lZFdyaXRlcjtcbiB9fSk7XG5cbnJldHVybiB0cmFuc2Zvcm1lZFdyaXRlcjtcbiB9OyRozY9fb25jZS5tYXBXcml0ZXIobWFwV3JpdGVyKTtcbmhhcmRlbihtYXBXcml0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVF1ZXVlIjpbIm1ha2VRdWV1ZSJdLCJtYWtlU3RyZWFtIjpbIm1ha2VTdHJlYW0iXSwibWFrZVBpcGUiOlsibWFrZVBpcGUiXSwicHVtcCI6WyJwdW1wIl0sInByaW1lIjpbInByaW1lIl0sIm1hcFJlYWRlciI6WyJtYXBSZWFkZXIiXSwibWFwV3JpdGVyIjpbIm1hcFdyaXRlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABmVxEJwwEAAMMBAAAcAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvbWFpbi5qc3siaW1wb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vcmluZzAvbWFpbi5qc1wiLCBbXV0sW1wiLi9yaW5nMS9tYWluLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJBhzwNzAQAAcwEAAB8AAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9FLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIkBlbmRvL2ZhciJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOD1uR9vAgAAbwIAACwAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYXN5bmNHZW5lcmF0ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzeW5jR2VuZXJhdGU9KG5leHQpPT57XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbnJldHVybiBoYXJkZW4oe1xubmV4dDphc3luYygpPT5oYXJkZW4obmV4dCgpKX0pO1xuXG4gfX0pO1xuXG4gfTskaM2PX29uY2UuYXN5bmNHZW5lcmF0ZShhc3luY0dlbmVyYXRlKTtcbmhhcmRlbihhc3luY0dlbmVyYXRlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzeW5jR2VuZXJhdGUiOlsiYXN5bmNHZW5lcmF0ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD/fh925gEAAOYBAAAiAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc3siaW1wb3J0cyI6WyIuL0UuanMiLCIuL21ha2Vycy5qcyIsIi4vYXN5bmMtZ2VuZXJhdGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL0UuanMiLCIuL2FzeW5jLWdlbmVyYXRlLmpzIiwiLi9tYWtlcnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vRS5qc1wiLCBbXV0sW1wiLi9tYWtlcnMuanNcIiwgW11dLFtcIi4vYXN5bmMtZ2VuZXJhdGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAANxfQTswHAADMBwAAJAAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21ha2Vycy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZU1hcCIsIm1ha2VQcm9taXNlIiwibWFrZVNldCIsIm1ha2VXZWFrTWFwIiwibWFrZVdlYWtTZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVByb21pc2U9KGV4ZWN1dG9yKT0+aGFyZGVuKG5ldyBQcm9taXNlKGV4ZWN1dG9yKSk7JGjNj19vbmNlLm1ha2VQcm9taXNlKG1ha2VQcm9taXNlKTtcbmhhcmRlbihtYWtlUHJvbWlzZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlTWFwPShlbnRyaWVzT3JJdGVyYWJsZSk9PmhhcmRlbihuZXcgTWFwKGVudHJpZXNPckl0ZXJhYmxlKSk7JGjNj19vbmNlLm1ha2VNYXAobWFrZU1hcCk7XG5oYXJkZW4obWFrZU1hcCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVNldD0odmFsdWVzKT0+aGFyZGVuKG5ldyBTZXQodmFsdWVzKSk7JGjNj19vbmNlLm1ha2VTZXQobWFrZVNldCk7XG5oYXJkZW4obWFrZVNldCk7XG5cbi8qXG5cblxuXG4gKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha01hcD0oZW50cmllcyk9PmhhcmRlbihuZXcgV2Vha01hcChlbnRyaWVzKSk7JGjNj19vbmNlLm1ha2VXZWFrTWFwKG1ha2VXZWFrTWFwKTtcbmhhcmRlbihtYWtlV2Vha01hcCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrU2V0PSh2YWx1ZXMpPT5oYXJkZW4obmV3IFdlYWtTZXQodmFsdWVzKSk7JGjNj19vbmNlLm1ha2VXZWFrU2V0KG1ha2VXZWFrU2V0KTtcbmhhcmRlbihtYWtlV2Vha1NldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZSI6WyJtYWtlUHJvbWlzZSJdLCJtYWtlTWFwIjpbIm1ha2VNYXAiXSwibWFrZVNldCI6WyJtYWtlU2V0Il0sIm1ha2VXZWFrTWFwIjpbIm1ha2VXZWFrTWFwIl0sIm1ha2VXZWFrU2V0IjpbIm1ha2VXZWFrU2V0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIo2475JAwAASQMAACkAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9hc3luYy10b29scy5qc3siaW1wb3J0cyI6WyIuLi9yaW5nMC9tYWluLmpzIl0sImV4cG9ydHMiOlsiYXN5bmNEb1doaWxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VQcm9taXNlOyRozY9faW1wb3J0cyhbW1wiLi4vcmluZzAvbWFpbi5qc1wiLCBbW1wibWFrZVByb21pc2VcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2UgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3luY0RvV2hpbGU9KGJvZHkpPT57XG5yZXR1cm4gbWFrZVByb21pc2UoKHJlc29sdmUscmVqZWN0KT0+e1xuY29uc3QgbG9vcD1hc3luYygpPT57XG5jb25zdCBkb0NvbnRpbnVlPWF3YWl0IGJvZHkoKTtcbmlmKCFkb0NvbnRpbnVlKXtcbi8vXG5yZXNvbHZlKHVuZGVmaW5lZCk7XG5yZXR1cm47XG4gfVxuXG4vL1xuLy9cbmxvb3AoKS5jYXRjaChyZWplY3QpO1xuIH07XG5cbmxvb3AoKS5jYXRjaChyZWplY3QpO1xuIH0pO1xuIH07JGjNj19vbmNlLmFzeW5jRG9XaGlsZShhc3luY0RvV2hpbGUpO1xuaGFyZGVuKGFzeW5jRG9XaGlsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3luY0RvV2hpbGUiOlsiYXN5bmNEb1doaWxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAZvJkKIAQAAiAEAACIAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9tYWluLmpzeyJpbXBvcnRzIjpbIi4vYXN5bmMtdG9vbHMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2FzeW5jLXRvb2xzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2FzeW5jLXRvb2xzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwECHgMKAAAAAAAAAAAANQh9qv7IAQD+yAEAFAAAAAAAAAAAAAAApIEAAAAAY29tcGFydG1lbnQtbWFwLmpzb25QSwECHgMKAAAAAAAAAAAABQu9oH8BAAB/AQAAIAAAAAAAAAAAAAAApIEwyQEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL2hlYXAuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJwAAAAAAAAAAAAAApIHtygEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9leHBvcnRzLmpzUEsBAh4DCgAAAAAAAAAAABLcf+RZCgAAWQoAACQAAAAAAAAAAAAAAKSBfMwBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaGVhcC5qc1BLAQIeAwoAAAAAAAAAAADuWrfPawIAAGsCAAAlAAAAAAAAAAAAAACkgRfXAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAHXpQa5YAgAAWAIAACsAAAAAAAAAAAAAAKSBxdkBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaXMtcGFzc2FibGUuanNQSwECHgMKAAAAAAAAAAAAHmlMGXUDAAB1AwAAJAAAAAAAAAAAAAAApIFm3AEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9rZXlzLmpzUEsBAh4DCgAAAAAAAAAAAB9ChiniBgAA4gYAACkAAAAAAAAAAAAAAKSBHeABAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvbWFrZS1vbmNlLmpzUEsBAh4DCgAAAAAAAAAAAO9qtJJfCQAAXwkAAC0AAAAAAAAAAAAAAKSBRucBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvd2F0Y2gtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAABczaqHAB0AAAAdAAAmAAAAAAAAAAAAAACkgfDwAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvYW1vdW50TWF0aC5qc1BLAQIeAwoAAAAAAAAAAACPlcvKGwQAABsEAAAnAAAAAAAAAAAAAACkgTQOAgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvYW1vdW50U3RvcmUuanNQSwECHgMKAAAAAAAAAAAA6KHdGscFAADHBQAAJwAAAAAAAAAAAAAApIGUEgIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Rpc3BsYXlJbmZvLmpzUEsBAh4DCgAAAAAAAAAAACOOMmo/AgAAPwIAACEAAAAAAAAAAAAAAKSBoBgCAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABolNPJahYAAGoWAAAlAAAAAAAAAAAAAACkgR4bAgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaXNzdWVyS2l0LmpzUEsBAh4DCgAAAAAAAAAAAOSrY+7hBQAA4QUAADoAAAAAAAAAAAAAAKSByzECAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAQYWPeJ8FAACfBQAAOgAAAAAAAAAAAAAApIEEOAIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAACVK3DJZwQAAGcEAAA2AAAAAAAAAAAAAACkgfs9AgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAARwq540gGAABIBgAANgAAAAAAAAAAAAAApIG2QgIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAADY/StV/AwAAfwMAACMAAAAAAAAAAAAAAKSBUkkCAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50LmpzUEsBAh4DCgAAAAAAAAAAALjETWbtHwAA7R8AACkAAAAAAAAAAAAAAKSBEk0CAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50TGVkZ2VyLmpzUEsBAh4DCgAAAAAAAAAAAPgBSFziEAAA4hAAACEAAAAAAAAAAAAAAKSBRm0CAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wdXJzZS5qc1BLAQIeAwoAAAAAAAAAAACKmWPI1gUAANYFAAAtAAAAAAAAAAAAAACkgWd+AgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvdHJhbnNpZW50Tm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAhtF5ddkYAADZGAAAJgAAAAAAAAAAAAAApIGIhAIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJwAAAAAAAAAAAAAApIGlnQIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAAFbRVxHpGQAA6RkAACcAAAAAAAAAAAAAAKSBNJ8CAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9jYWxsYmFjay5qc1BLAQIeAwoAAAAAAAAAAAAyA/0ZzQUAAM0FAAAlAAAAAAAAAAAAAACkgWK5AgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY29uZmlnLmpzUEsBAh4DCgAAAAAAAAAAAJyotJdIBAAASAQAACQAAAAAAAAAAAAAAKSBcr8CAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9kZWJ1Zy5qc1BLAQIeAwoAAAAAAAAAAAAC1eDCjgIAAI4CAAAlAAAAAAAAAAAAAACkgfzDAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZXJyb3JzLmpzUEsBAh4DCgAAAAAAAAAAAPZM/KHHBAAAxwQAACQAAAAAAAAAAAAAAKSBzcYCAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAmbRSr0xUAANMVAAAvAAAAAAAAAAAAAACkgdbLAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbGliLWNoYWluU3RvcmFnZS5qc1BLAQIeAwoAAAAAAAAAAAC2vSFeawgAAGsIAAArAAAAAAAAAAAAAACkgfbhAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbWV0aG9kLXRvb2xzLmpzUEsBAh4DCgAAAAAAAAAAAIeqWiD9AgAA/QIAACgAAAAAAAAAAAAAAKSBquoCAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlQ2hlY2suanNQSwECHgMKAAAAAAAAAAAAopUBEE4DAABOAwAAKQAAAAAAAAAAAAAApIHt7QIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKgAAAAAAAAAAAAAApIGC8QIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJuHQWoSBwAAEgcAACoAAAAAAAAAAAAAAKSBFPMCAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy91cGdyYWRlLWFwaS5qc1BLAQIeAwoAAAAAAAAAAADV/yCVASMAAAEjAAAkAAAAAAAAAAAAAACkgW76AgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdXRpbHMuanNQSwECHgMKAAAAAAAAAAAArvhjAwcIAAAHCAAAMwAAAAAAAAAAAAAApIGxHQMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzUEsBAh4DCgAAAAAAAAAAALUW0pDdBwAA3QcAACQAAAAAAAAAAAAAAKSBCSYDAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADZW6LCcRAAAHEQAAAnAAAAAAAAAAAAAACkgSguAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAdHozoS0rAAAtKwAAKgAAAAAAAAAAAAAApIHePgMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3B1Ymxpc2gta2l0LmpzUEsBAh4DCgAAAAAAAAAAAKidGFwRCAAAEQgAAC4AAAAAAAAAAAAAAKSBU2oDAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdG9yZWQtbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAApxMCM+0VAADtFQAAJwAAAAAAAAAAAAAApIGwcgMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N0b3Jlc3ViLmpzUEsBAh4DCgAAAAAAAAAAABUHXvMhEgAAIRIAACgAAAAAAAAAAAAAAKSB4ogDAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmUuanNQSwECHgMKAAAAAAAAAAAAh2h7X9EHAADRBwAAKQAAAAAAAAAAAAAApIFJmwMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N1YnNjcmliZXIuanNQSwECHgMKAAAAAAAAAAAAR1oa2u0DAADtAwAAJAAAAAAAAAAAAAAApIFhowMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3RvcGljLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACoAAAAAAAAAAAAAAKSBkKcDAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy90eXBlcy1pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADIQNAGlA0AAJQNAAAhAAAAAAAAAAAAAACkgSKpAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA8CKrrjUFAAA1BQAALAAAAAAAAAAAAAAApIH1tgMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanNQSwECHgMKAAAAAAAAAAAAusRN7fcEAAD3BAAAMAAAAAAAAAAAAAAApIF0vAMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzUEsBAh4DCgAAAAAAAAAAADtePIKcEAAAnBAAADEAAAAAAAAAAAAAAKSBucEDAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanNQSwECHgMKAAAAAAAAAAAAmCzfJc0LAADNCwAAMQAAAAAAAAAAAAAApIGk0gMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADpDjncsA0AALANAAA1AAAAAAAAAAAAAACkgcDeAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAABUfScVcwoAAHMKAAA1AAAAAAAAAAAAAACkgcPsAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAAB52wuHqw4AAKsOAAAuAAAAAAAAAAAAAACkgYn3AwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACEAAAAAAAAAAAAAAKSBgAYEAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADfeBBmIgIAACICAAAcAAAAAAAAAAAAAACkgQkIBABAYWdvcmljL3RpbWUtdjAuMy4yL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAADGdYs5xEwAAcRMAACMAAAAAAAAAAAAAAKSBZQoEAEBhZ29yaWMvdGltZS12MC4zLjIvc3JjL3RpbWVNYXRoLmpzUEsBAh4DCgAAAAAAAAAAACGisRLUCAAA1AgAACUAAAAAAAAAAAAAAKSBFx4EAEBhZ29yaWMvdGltZS12MC4zLjIvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJgAAAAAAAAAAAAAApIEuJwQAQGFnb3JpYy90aW1lLXYwLjMuMi9zcmMvdHlwZXMtaW5kZXguanNQSwECHgMKAAAAAAAAAAAA5FColZoWAACaFgAAKAAAAAAAAAAAAAAApIG8KAQAQGFnb3JpYy92YXQtZGF0YS12MC41LjIvc3JjL2V4by11dGlscy5qc1BLAQIeAwoAAAAAAAAAAAC49RYwqAgAAKgIAAAkAAAAAAAAAAAAAACkgZw/BABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAADBFy6awWAACsFgAAMAAAAAAAAAAAAAAApIGGSAQAQGFnb3JpYy92YXQtZGF0YS12MC41LjIvc3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzUEsBAh4DCgAAAAAAAAAAACGiVOPRBgAA0QYAACMAAAAAAAAAAAAAAKSBgF8EAEBhZ29yaWMvdmF0cy12MC4xNS4xL3NyYy92YXQtem9lLmpzUEsBAh4DCgAAAAAAAAAAAJmiqMSSEwAAkhMAACgAAAAAAAAAAAAAAKSBkmYEAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NsZWFuUHJvcG9zYWwuanNQSwECHgMKAAAAAAAAAAAAi6WVmvoFAAD6BQAANAAAAAAAAAAAAAAApIFqegQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9vZmZlclNhZmV0eS5qc1BLAQIeAwoAAAAAAAAAAADTJzWj+A4AAPgOAAAwAAAAAAAAAAAAAACkgbaABABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9pbnN0YW5jZVJlY29yZFN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAAm3L50W0EAABtBAAAKQAAAAAAAAAAAAAApIH8jwQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaW50ZXJuYWwtdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAiZe2OdcDAADXAwAAJwAAAAAAAAAAAAAApIGwlAQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaXNzdWVyUmVjb3JkLmpzUEsBAh4DCgAAAAAAAAAAADJ19CyfEQAAnxEAACgAAAAAAAAAAAAAAKSBzJgEAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2lzc3VlclN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAAM4OyVVEGAABRBgAAJQAAAAAAAAAAAAAApIGxqgQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvbWFrZUhhbmRsZS5qc1BLAQIeAwoAAAAAAAAAAABdjfRL5kIAAOZCAAAlAAAAAAAAAAAAAACkgUWxBABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAHK1n4a5AQAAuQEAACgAAAAAAAAAAAAAAKSBbvQEAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3R5cGVzLWFtYmllbnQuanNQSwECHgMKAAAAAAAAAAAAty0Zg0gEAABIBAAAMgAAAAAAAAAAAAAApIFt9gQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvem9lU2VydmljZS9jcmVhdGVaQ0ZWYXQuanNQSwECHgMKAAAAAAAAAAAAOiPPyt8NAADfDQAAMwAAAAAAAAAAAAAApIEF+wQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvem9lU2VydmljZS9lc2Nyb3dTdG9yYWdlLmpzUEsBAh4DCgAAAAAAAAAAAALbmvywDAAAsAwAAC0AAAAAAAAAAAAAAKSBNQkFAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3pvZVNlcnZpY2UvZmVlTWludC5qc1BLAQIeAwoAAAAAAAAAAADjHPpPixQAAIsUAAA5AAAAAAAAAAAAAACkgTAWBQBAYWdvcmljL3pvZS12MC4yNi4yL3NyYy96b2VTZXJ2aWNlL2luc3RhbGxhdGlvblN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAAHdxAZ1QiAABUIgAAOgAAAAAAAAAAAAAApIESKwUAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvem9lU2VydmljZS9pbnN0YW5jZUFkbWluU3RvcmFnZS5qc1BLAQIeAwoAAAAAAAAAAADZ5FQe0wIAANMCAAA0AAAAAAAAAAAAAACkgb5NBQBAYWdvcmljL3pvZS12MC4yNi4yL3NyYy96b2VTZXJ2aWNlL2ludGVybmFsLXR5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAAAKvzPQBgAA0AYAADcAAAAAAAAAAAAAAKSB41AFAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3pvZVNlcnZpY2UvaW52aXRhdGlvblF1ZXJpZXMuanNQSwECHgMKAAAAAAAAAAAAelULpIEHAACBBwAANAAAAAAAAAAAAAAApIEIWAUAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvem9lU2VydmljZS9tYWtlSW52aXRhdGlvbi5qc1BLAQIeAwoAAAAAAAAAAAAAlGDr+wUAAPsFAAA6AAAAAAAAAAAAAACkgdtfBQBAYWdvcmljL3pvZS12MC4yNi4yL3NyYy96b2VTZXJ2aWNlL29mZmVyL2J1cm5JbnZpdGF0aW9uLmpzUEsBAh4DCgAAAAAAAAAAANeXoN8LCwAACwsAADEAAAAAAAAAAAAAAKSBLmYFAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3pvZVNlcnZpY2Uvb2ZmZXIvb2ZmZXIuanNQSwECHgMKAAAAAAAAAAAAnwYbbfogAAD6IAAANQAAAAAAAAAAAAAApIGIcQUAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvem9lU2VydmljZS9vcmlnaW5hbFpvZVNlYXQuanNQSwECHgMKAAAAAAAAAAAAIM1zeconAADKJwAAMwAAAAAAAAAAAAAApIHVkgUAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvem9lU2VydmljZS9zdGFydEluc3RhbmNlLmpzUEsBAh4DCgAAAAAAAAAAAMue+T8AGwAAABsAACkAAAAAAAAAAAAAAKSB8LoFAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3pvZVNlcnZpY2Uvem9lLmpzUEsBAh4DCgAAAAAAAAAAAFG5LFMuJgAALiYAAC0AAAAAAAAAAAAAAKSBN9YFAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3pvZVNlcnZpY2Uvem9lU2VhdC5qc1BLAQIeAwoAAAAAAAAAAAAqJfOkpS0AAKUtAAA3AAAAAAAAAAAAAACkgbD8BQBAYWdvcmljL3pvZS12MC4yNi4yL3NyYy96b2VTZXJ2aWNlL3pvZVN0b3JhZ2VNYW5hZ2VyLmpzUEsBAh4DCgAAAAAAAAAAANt1Ov+IAQAAiAEAAB4AAAAAAAAAAAAAAKSBqioGAEBhZ29yaWMvem9uZS12MC4yLjIvZHVyYWJsZS5qc1BLAQIeAwoAAAAAAAAAAABx5Y0iDhEAAA4RAAAiAAAAAAAAAAAAAACkgW4sBgBAYWdvcmljL3pvbmUtdjAuMi4yL3NyYy9kdXJhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAFTiW7jHBAAAxwQAACsAAAAAAAAAAAAAAKSBvD0GAEBlbmRvL2NvbW1vbi12MS4yLjcvYXBwbHktbGFiZWxpbmctZXJyb3IuanNQSwECHgMKAAAAAAAAAAAAkAZXhlwEAABcBAAAKgAAAAAAAAAAAAAApIHMQgYAQGVuZG8vY29tbW9uLXYxLjIuNy9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzUEsBAh4DCgAAAAAAAAAAAFFzDaQ3AgAANwIAACQAAAAAAAAAAAAAAKSBcEcGAEBlbmRvL2NvbW1vbi12MS4yLjcvaWRlbnQtY2hlY2tlci5qc1BLAQIeAwoAAAAAAAAAAABhWP6GeAIAAHgCAAAmAAAAAAAAAAAAAACkgelJBgBAZW5kby9jb21tb24tdjEuMi43L2xpc3QtZGlmZmVyZW5jZS5qc1BLAQIeAwoAAAAAAAAAAAAPm8CoXQMAAF0DAAAqAAAAAAAAAAAAAACkgaVMBgBAZW5kby9jb21tb24tdjEuMi43L21ha2UtYXJyYXktaXRlcmF0b3IuanNQSwECHgMKAAAAAAAAAAAAVosJ4zkCAAA5AgAAJAAAAAAAAAAAAAAApIFKUAYAQGVuZG8vY29tbW9uLXYxLjIuNy9tYWtlLWl0ZXJhdG9yLmpzUEsBAh4DCgAAAAAAAAAAAK1XBn4CAwAAAgMAACEAAAAAAAAAAAAAAKSBxVIGAEBlbmRvL2NvbW1vbi12MS4yLjcvb2JqZWN0LW1hcC5qc1BLAQIeAwoAAAAAAAAAAAA7n1+O4QMAAOEDAAAmAAAAAAAAAAAAAACkgQZWBgBAZW5kby9jb21tb24tdjEuMi43L29iamVjdC1tZXRhLW1hcC5qc1BLAQIeAwoAAAAAAAAAAADCAhrL4QMAAOEDAAAkAAAAAAAAAAAAAACkgStaBgBAZW5kby9jb21tb24tdjEuMi43L3Rocm93LWxhYmVsZWQuanNQSwECHgMKAAAAAAAAAAAAxRjnOpQBAACUAQAAIQAAAAAAAAAAAAAApIFOXgYAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJK3R37sDQAA7A0AACsAAAAAAAAAAAAAAKSBIWAGAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNy9zcmMvZW52LW9wdGlvbnMuanNQSwECHgMKAAAAAAAAAAAA/HBpMd8HAADfBwAAHAAAAAAAAAAAAAAApIFWbgYAQGVuZG8vZXJyb3JzLXYxLjIuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAB+XVUrpRAAAKUQAAAjAAAAAAAAAAAAAACkgW92BgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvRS5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAApAAAAAAAAAAAAAACkgVWHBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAAAQIOOsqgwAAKoMAAAnAAAAAAAAAAAAAACkgeaIBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvbG9jYWwuanNQSwECHgMKAAAAAAAAAAAAAY5wTOkMAADpDAAANQAAAAAAAAAAAAAApIHVlQYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanNQSwECHgMKAAAAAAAAAAAAGWy7RTMDAAAzAwAAKQAAAAAAAAAAAAAApIERowYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL25vLXNoaW0uanNQSwECHgMKAAAAAAAAAAAAhqimx18JAABfCQAALQAAAAAAAAAAAAAApIGLpgYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL3RyYWNrLXR1cm5zLmpzUEsBAh4DCgAAAAAAAAAAAD/w5zpWAgAAVgIAACMAAAAAAAAAAAAAAKSBNbAGAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3V0aWxzLmpzUEsBAh4DCgAAAAAAAAAAALFYNphSAgAAUgIAABkAAAAAAAAAAAAAAKSBzLIGAEBlbmRvL2V4by12MS41LjYvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAPoHfvdcUAADXFAAAIgAAAAAAAAAAAAAApIFVtQYAQGVuZG8vZXhvLXYxLjUuNi9zcmMvZXhvLW1ha2Vycy5qc1BLAQIeAwoAAAAAAAAAAADO7lsG5i8AAOYvAAAhAAAAAAAAAAAAAACkgWzKBgBAZW5kby9leG8tdjEuNS42L3NyYy9leG8tdG9vbHMuanNQSwECHgMKAAAAAAAAAAAARpM8bjYCAAA2AgAAJQAAAAAAAAAAAAAApIGR+gYAQGVuZG8vZXhvLXYxLjUuNi9zcmMvZ2V0LWludGVyZmFjZS5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAdAAAAAAAAAAAAAACkgQr9BgBAZW5kby9leG8tdjEuNS42L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAALSpg4VgIAAFYCAAAdAAAAAAAAAAAAAACkgY/+BgBAZW5kby9mYXItdjEuMS44L3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAC4gWnwdAcAAHQHAAAdAAAAAAAAAAAAAACkgSABBwBAZW5kby9tYXJzaGFsLXYxLjYuMS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADXbFulWUMAAFlDAAAqAAAAAAAAAAAAAACkgc8IBwBAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvZW5jb2RlUGFzc2FibGUuanNQSwECHgMKAAAAAAAAAAAAX5zwMlIiAABSIgAAKwAAAAAAAAAAAAAApIFwTAcAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL2VuY29kZVRvQ2FwRGF0YS5qc1BLAQIeAwoAAAAAAAAAAAAPShurLiIAAC4iAAAtAAAAAAAAAAAAAACkgQtvBwBAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvZW5jb2RlVG9TbWFsbGNhcHMuanNQSwECHgMKAAAAAAAAAAAARQsy/RAjAAAQIwAAKgAAAAAAAAAAAAAApIGEkQcAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL21hcnNoYWwtanVzdGluLmpzUEsBAh4DCgAAAAAAAAAAAEQSpudcBgAAXAYAAC0AAAAAAAAAAAAAAKSB3LQHAEBlbmRvL21hcnNoYWwtdjEuNi4xL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qc1BLAQIeAwoAAAAAAAAAAAApw1JOKicAAConAAAjAAAAAAAAAAAAAACkgYO7BwBAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvbWFyc2hhbC5qc1BLAQIeAwoAAAAAAAAAAAC7402JnCcAAJwnAAAlAAAAAAAAAAAAAACkge7iBwBAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvcmFua09yZGVyLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACEAAAAAAAAAAAAAAKSBzQoIAEBlbmRvL21hcnNoYWwtdjEuNi4xL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAABf6k6CWQUAAFkFAAAeAAAAAAAAAAAAAACkgVYMCABAZW5kby9uYXQtdjUuMC4xMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAoSmqvD8KAAA/CgAAIAAAAAAAAAAAAAAApIHrEQgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAl6i/JVQGAABUBgAAKAAAAAAAAAAAAAAApIFoHAgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2NvcHlBcnJheS5qc1BLAQIeAwoAAAAAAAAAAAAyz0q1KQgAACkIAAApAAAAAAAAAAAAAACkgQIjCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvY29weVJlY29yZC5qc1BLAQIeAwoAAAAAAAAAAABwIuV6VgoAAFYKAAAuAAAAAAAAAAAAAACkgXIrCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzUEsBAh4DCgAAAAAAAAAAAEObiqg0EgAANBIAACQAAAAAAAAAAAAAAKSBFDYIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9lcnJvci5qc1BLAQIeAwoAAAAAAAAAAABBT/xPjwUAAI8FAAArAAAAAAAAAAAAAACkgYpICABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvaXRlci1oZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAGTP4m9BEQAAQREAACcAAAAAAAAAAAAAAKSBYk4IAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9tYWtlLWZhci5qc1BLAQIeAwoAAAAAAAAAAAAr0aC/gAQAAIAEAAApAAAAAAAAAAAAAACkgehfCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvbWFrZVRhZ2dlZC5qc1BLAQIeAwoAAAAAAAAAAAANIpJ3FBUAABQVAAAwAAAAAAAAAAAAAACkga9kCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAFAxNfrAkAACwJAAAKgAAAAAAAAAAAAAApIEReggAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3Bhc3NTdHlsZU9mLmpzUEsBAh4DCgAAAAAAAAAAAFKEe3qmFwAAphcAACgAAAAAAAAAAAAAAKSBCZ8IAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9yZW1vdGFibGUuanNQSwECHgMKAAAAAAAAAAAAxRgAzIYMAACGDAAAKwAAAAAAAAAAAAAApIH1tggAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3NhZmUtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAACYl18ssgcAALIHAAAlAAAAAAAAAAAAAACkgcTDCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvc3RyaW5nLmpzUEsBAh4DCgAAAAAAAAAAAGY/WZX8CQAA/AkAACUAAAAAAAAAAAAAAKSBucsIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9zeW1ib2wuanNQSwECHgMKAAAAAAAAAAAAYNVjnhQHAAAUBwAAJQAAAAAAAAAAAAAApIH41QgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3RhZ2dlZC5qc1BLAQIeAwoAAAAAAAAAAAAOvwkt/ggAAP4IAAApAAAAAAAAAAAAAACkgU/dCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAkAAAAAAAAAAAAAACkgZTmCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAxYdX6bcOAAC3DgAAHgAAAAAAAAAAAAAApIEg6AgAQGVuZG8vcGF0dGVybnMtdjEuNC42L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAFulOQw5MgAAOTIAACoAAAAAAAAAAAAAAKSBE/cIAEBlbmRvL3BhdHRlcm5zLXYxLjQuNi9zcmMva2V5cy9jaGVja0tleS5qc1BLAQIeAwoAAAAAAAAAAACEP4sHExUAABMVAAAtAAAAAAAAAAAAAACkgZQpCQBAZW5kby9wYXR0ZXJucy12MS40LjYvc3JjL2tleXMvY29tcGFyZUtleXMuanNQSwECHgMKAAAAAAAAAAAATJtmFscNAADHDQAAKQAAAAAAAAAAAAAApIHyPgkAQGVuZG8vcGF0dGVybnMtdjEuNC42L3NyYy9rZXlzL2NvcHlCYWcuanNQSwECHgMKAAAAAAAAAAAAKZ5nbM4LAADOCwAAKQAAAAAAAAAAAAAApIEATQkAQGVuZG8vcGF0dGVybnMtdjEuNC42L3NyYy9rZXlzL2NvcHlTZXQuanNQSwECHgMKAAAAAAAAAAAATZEiJ+ASAADgEgAAOQAAAAAAAAAAAAAApIEVWQkAQGVuZG8vcGF0dGVybnMtdjEuNC42L3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzUEsBAh4DCgAAAAAAAAAAAFs61ctSFgAAUhYAADUAAAAAAAAAAAAAAKSBTGwJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzUEsBAh4DCgAAAAAAAAAAAH1gizOLHAAAixwAADUAAAAAAAAAAAAAAKSB8YIJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzUEsBAh4DCgAAAAAAAAAAAKRDJyjtGAAA7RgAADYAAAAAAAAAAAAAAKSBz58JAEBlbmRvL3BhdHRlcm5zLXYxLjQuNi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc1BLAQIeAwoAAAAAAAAAAAAdOAyUyK0AAMitAAA1AAAAAAAAAAAAAACkgRC5CQBAZW5kby9wYXR0ZXJucy12MS40LjYvc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAiAAAAAAAAAAAAAACkgStnCgBAZW5kby9wYXR0ZXJucy12MS40LjYvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAANIBosRCBgAAQgYAACEAAAAAAAAAAAAAAKSBtWgKAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACzXVtGVQIAAFUCAAAqAAAAAAAAAAAAAACkgTZvCgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL2lzLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAA+mbwkZwHAACcBwAAKQAAAAAAAAAAAAAApIHTcQoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy9tZW1vLXJhY2UuanNQSwECHgMKAAAAAAAAAAAAnG3EsnwFAAB8BQAANAAAAAAAAAAAAAAApIG2eQoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAlAAAAAAAAAAAAAACkgYR/CgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAANxo90KQEQAAkBEAABwAAAAAAAAAAAAAAKSBEYEKAEBlbmRvL3N0cmVhbS12MS4yLjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAZlcRCcMBAADDAQAAHAAAAAAAAAAAAAAApIHbkgoAamVzc2llLmpzLXYwLjMuNC9zcmMvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAACQYc8DcwEAAHMBAAAfAAAAAAAAAAAAAACkgdiUCgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9FLmpzUEsBAh4DCgAAAAAAAAAAAOD1uR9vAgAAbwIAACwAAAAAAAAAAAAAAKSBiJYKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzUEsBAh4DCgAAAAAAAAAAAP9+H3bmAQAA5gEAACIAAAAAAAAAAAAAAKSBQZkKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21haW4uanNQSwECHgMKAAAAAAAAAAAANxfQTswHAADMBwAAJAAAAAAAAAAAAAAApIFnmwoAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFrZXJzLmpzUEsBAh4DCgAAAAAAAAAAAIo2475JAwAASQMAACkAAAAAAAAAAAAAAKSBdaMKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzUEsBAh4DCgAAAAAAAAAAAAZvJkKIAQAAiAEAACIAAAAAAAAAAAAAAKSBBacKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL21haW4uanNQSwUGAAAAAKUApQD7NwAAzagKAAAA", + "endoZipBase64Sha512": "a6e125677dde1b87dbe7e533d30381d5ae7fc49d2df323923ac0e9912fd01149ee885b9f8be7d76451325ca9c6de8518def0eae366118788b68313e61aa7a1f0" +} \ No newline at end of file diff --git a/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/upgrade-zoe-permit.json b/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/upgrade-zoe-permit.json new file mode 100644 index 000000000..a1ed50b36 --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/upgrade-zoe-permit.json @@ -0,0 +1,18 @@ +{ + "consume": { + "vatAdminSvc": "vatAdminSvc", + "vatStore": "vatStore", + "agoricNamesAdmin": "makeCoreProposalBehavior", + "zoe": "makeCoreProposalBehavior" + }, + "produce": {}, + "evaluateBundleCap": "makeCoreProposalBehavior", + "installation": { + "produce": "makeCoreProposalBehavior" + }, + "modules": { + "utils": { + "runModuleBehaviors": "makeCoreProposalBehavior" + } + } +} \ No newline at end of file diff --git a/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/upgrade-zoe-plan.json b/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/upgrade-zoe-plan.json new file mode 100644 index 000000000..2f4155cfe --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/upgrade-zoe-plan.json @@ -0,0 +1,17 @@ +{ + "name": "upgrade-zoe", + "script": "upgrade-zoe.js", + "permit": "upgrade-zoe-permit.json", + "bundles": [ + { + "entrypoint": "@agoric/vats/src/vat-zoe.js", + "bundleID": "b1-a6e125677dde1b87dbe7e533d30381d5ae7fc49d2df323923ac0e9912fd01149ee885b9f8be7d76451325ca9c6de8518def0eae366118788b68313e61aa7a1f0", + "fileName": "/Users/jorgelopes/.agoric/cache/b1-a6e125677dde1b87dbe7e533d30381d5ae7fc49d2df323923ac0e9912fd01149ee885b9f8be7d76451325ca9c6de8518def0eae366118788b68313e61aa7a1f0.json" + }, + { + "entrypoint": "@agoric/vats/src/proposals/upgrade-zoe-proposal.js", + "bundleID": "b1-09b92c35ba08e8d3625eb04796ab70cd02cf9ef3bfd79e8f256b419afb644e4a9e9e4b06c068abe2ecc2769a53a55024a27851ec7bfeb13e79b3781d0b961597", + "fileName": "/Users/jorgelopes/.agoric/cache/b1-09b92c35ba08e8d3625eb04796ab70cd02cf9ef3bfd79e8f256b419afb644e4a9e9e4b06c068abe2ecc2769a53a55024a27851ec7bfeb13e79b3781d0b961597.json" + } + ] +} diff --git a/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/upgrade-zoe.js b/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/upgrade-zoe.js new file mode 100644 index 000000000..3cd60590f --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/upgrade-zoe/upgrade-zoe.js @@ -0,0 +1,167 @@ +// This is generated by writeCoreEval; please edit! +/* eslint-disable */ + +const manifestBundleRef = {bundleID:"b1-09b92c35ba08e8d3625eb04796ab70cd02cf9ef3bfd79e8f256b419afb644e4a9e9e4b06c068abe2ecc2769a53a55024a27851ec7bfeb13e79b3781d0b961597"}; +const getManifestCall = harden([ + "getManifestForUpgradingZoe", + { + zoeRef: { + bundleID: "b1-a6e125677dde1b87dbe7e533d30381d5ae7fc49d2df323923ac0e9912fd01149ee885b9f8be7d76451325ca9c6de8518def0eae366118788b68313e61aa7a1f0", + }, + }, +]); +const customManifest = { + upgradeZoe: { + consume: { + vatAdminSvc: "vatAdminSvc", + vatStore: "vatStore", + }, + produce: {}, + }, +}; + +// Make a behavior function and "export" it by way of script completion value. +// It is constructed by an anonymous invocation to ensure the absence of a global binding +// for makeCoreProposalBehavior, which may not be necessary but preserves behavior pre-dating +// https://github.com/Agoric/agoric-sdk/pull/8712 . +const behavior = (({ + manifestBundleRef, + getManifestCall: [manifestGetterName, ...manifestGetterArgs], + customManifest, + E, + log = console.info, + customRestoreRef, +}) => { + const { entries, fromEntries } = Object; + + /** + * Given an object whose properties may be promise-valued, return a promise + * for an analogous object in which each such value has been replaced with its + * fulfillment. + * This is a non-recursive form of endo `deeplyFulfilled`. + * + * @template T + * @param {{[K in keyof T]: (T[K] | Promise)}} obj + * @returns {Promise} + */ + const shallowlyFulfilled = async obj => { + if (!obj) { + return obj; + } + const awaitedEntries = await Promise.all( + entries(obj).map(async ([key, valueP]) => { + const value = await valueP; + return [key, value]; + }), + ); + return fromEntries(awaitedEntries); + }; + + const makeRestoreRef = (vatAdminSvc, zoe) => { + /** @type {(ref: import\('./externalTypes.js').ManifestBundleRef) => Promise>} */ + const defaultRestoreRef = async bundleRef => { + // extract-proposal.js creates these records, and bundleName is + // the optional name under which the bundle was installed into + // config.bundles + const bundleIdP = + 'bundleName' in bundleRef + ? E(vatAdminSvc).getBundleIDByName(bundleRef.bundleName) + : bundleRef.bundleID; + const bundleID = await bundleIdP; + const label = bundleID.slice(0, 8); + return E(zoe).installBundleID(bundleID, label); + }; + return defaultRestoreRef; + }; + + /** @param {ChainBootstrapSpace & BootstrapPowers & { evaluateBundleCap: any }} powers */ + const coreProposalBehavior = async powers => { + // NOTE: `powers` is expected to match or be a superset of the above `permits` export, + // which should therefore be kept in sync with this deconstruction code. + // HOWEVER, do note that this function is invoked with at least the *union* of powers + // required by individual moduleBehaviors declared by the manifest getter, which is + // necessary so it can use `runModuleBehaviors` to provide the appropriate subset to + // each one (see ./writeCoreEvalParts.js). + // Handle `powers` with the requisite care. + const { + consume: { vatAdminSvc, zoe, agoricNamesAdmin }, + evaluateBundleCap, + installation: { produce: produceInstallations }, + modules: { + utils: { runModuleBehaviors }, + }, + } = powers; + + // Get the on-chain installation containing the manifest and behaviors. + log('evaluateBundleCap', { + manifestBundleRef, + manifestGetterName, + vatAdminSvc, + }); + let bcapP; + if ('bundleName' in manifestBundleRef) { + bcapP = E(vatAdminSvc).getNamedBundleCap(manifestBundleRef.bundleName); + } else if ('bundleID' in manifestBundleRef) { + bcapP = E(vatAdminSvc).getBundleCap(manifestBundleRef.bundleID); + } else { + const keys = Reflect.ownKeys(manifestBundleRef).map(key => + typeof key === 'string' ? JSON.stringify(key) : String(key), + ); + const keysStr = `[${keys.join(', ')}]`; + throw Error( + `bundleRef must have own bundleName or bundleID, missing in ${keysStr}`, + ); + } + const bundleCap = await bcapP; + + const proposalNS = await evaluateBundleCap(bundleCap); + + // Get the manifest and its metadata. + log('execute', { + manifestGetterName, + bundleExports: Object.keys(proposalNS), + }); + const restoreRef = customRestoreRef || makeRestoreRef(vatAdminSvc, zoe); + const { + manifest, + options: rawOptions, + installations: rawInstallations, + } = await proposalNS[manifestGetterName]( + harden({ restoreRef }), + ...manifestGetterArgs, + ); + + // Await promises in the returned options and installations records. + const [options, installations] = await Promise.all( + [rawOptions, rawInstallations].map(shallowlyFulfilled), + ); + + // Publish the installations for our dependencies. + const installationEntries = entries(installations || {}); + if (installationEntries.length > 0) { + const installAdmin = E(agoricNamesAdmin).lookupAdmin('installation'); + await Promise.all( + installationEntries.map(([key, value]) => { + produceInstallations[key].reset(); + produceInstallations[key].resolve(value); + return E(installAdmin).update(key, value); + }), + ); + } + + // Evaluate the manifest. + return runModuleBehaviors({ + // Remember that `powers` may be arbitrarily broad. + allPowers: powers, + behaviors: proposalNS, + manifest: customManifest || manifest, + makeConfig: (name, _permit) => { + log('coreProposal:', name); + return { options }; + }, + }); + }; + + return coreProposalBehavior; +})({ manifestBundleRef, getManifestCall, customManifest, E }); +behavior; diff --git a/agoric/a3p-integration/proposals/k:kread/use.sh b/agoric/a3p-integration/proposals/k:kread/use.sh new file mode 100755 index 000000000..0248a57cf --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/use.sh @@ -0,0 +1,5 @@ +#!/bin/bash +source /usr/src/upgrade-test-scripts/env_setup.sh + +yarn ava kread.test.js + \ No newline at end of file diff --git a/agoric/a3p-integration/proposals/k:kread/yarn.lock b/agoric/a3p-integration/proposals/k:kread/yarn.lock new file mode 100644 index 000000000..423bc163b --- /dev/null +++ b/agoric/a3p-integration/proposals/k:kread/yarn.lock @@ -0,0 +1,5641 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@agoric/access-token@npm:0.4.22-dev-493b453.0+493b453": + version: 0.4.22-dev-493b453.0 + resolution: "@agoric/access-token@npm:0.4.22-dev-493b453.0" + dependencies: + n-readlines: "npm:^1.0.0" + proper-lockfile: "npm:^4.1.2" + tmp: "npm:^0.2.1" + checksum: 10c0/c769015a2a616a9fd3a39f8795f212ef5af34c4ebdc06543a8911ea6a643e17d59312a338b0991c3c60b20112f24de11a78c54edc03d089000d6ed172b84d092 + languageName: node + linkType: hard + +"@agoric/babel-generator@npm:^7.17.6": + version: 7.17.6 + resolution: "@agoric/babel-generator@npm:7.17.6" + dependencies: + "@babel/types": "npm:^7.17.0" + jsesc: "npm:^2.5.1" + source-map: "npm:^0.5.0" + checksum: 10c0/59db151ae737bd9b1f21c1589df4c7da9cbf484de5b5cc8352052825c2d977283d975303f55acb54d0210c176cb405da263073ceba1d3a6db65c6e21cc6e663f + languageName: node + linkType: hard + +"@agoric/base-zone@npm:0.1.1-dev-493b453.0+493b453": + version: 0.1.1-dev-493b453.0 + resolution: "@agoric/base-zone@npm:0.1.1-dev-493b453.0" + dependencies: + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/far": "npm:^1.1.8" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/80532072af8139059532deeac2ed88006ae7ccf46dbf93dd4a1686b8e81c165b23421c5e88922c10e117cc4451296753c1b4257f68a106c746648a7b84a3ea8a + languageName: node + linkType: hard + +"@agoric/cache@npm:0.3.3-dev-493b453.0+493b453": + version: 0.3.3-dev-493b453.0 + resolution: "@agoric/cache@npm:0.3.3-dev-493b453.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/notifier": "npm:0.6.3-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + checksum: 10c0/1e916995681db2da0a5f27dddb32e8dbca5020f6d60cdb3dee5eba1a4f1362440e13c00b17e4da87df6e346048434eef1263d4c46f3fef07732dcaa491e2e9fd + languageName: node + linkType: hard + +"@agoric/casting@npm:0.4.3-dev-493b453.0+493b453": + version: 0.4.3-dev-493b453.0 + resolution: "@agoric/casting@npm:0.4.3-dev-493b453.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/notifier": "npm:0.6.3-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@cosmjs/encoding": "npm:^0.32.3" + "@cosmjs/proto-signing": "npm:^0.32.3" + "@cosmjs/stargate": "npm:^0.32.3" + "@cosmjs/tendermint-rpc": "npm:^0.32.3" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/init": "npm:^1.1.6" + "@endo/lockdown": "npm:^1.0.12" + "@endo/marshal": "npm:^1.6.1" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/d1d9d55bc7cc9083a9f7e720b5e0d86c4324931e38d11e6d56fcd3858a6351b7afed92d2fec4d73a336f9bf8522c68c6afc8c04ea57cbf304a8545189bfcc60d + languageName: node + linkType: hard + +"@agoric/client-utils@npm:0.1.1-dev-493b453.0+493b453, @agoric/client-utils@npm:dev": + version: 0.1.1-dev-493b453.0 + resolution: "@agoric/client-utils@npm:0.1.1-dev-493b453.0" + dependencies: + "@agoric/casting": "npm:0.4.3-dev-493b453.0+493b453" + "@agoric/ertp": "npm:0.16.3-dev-493b453.0+493b453" + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/smart-wallet": "npm:0.5.4-dev-493b453.0+493b453" + "@agoric/vats": "npm:0.15.2-dev-493b453.0+493b453" + "@cosmjs/stargate": "npm:^0.32.3" + "@cosmjs/tendermint-rpc": "npm:^0.32.3" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/marshal": "npm:^1.6.1" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/591129f8a6a597a473ccababcb5912dc2324163524f40442f8219b39489fa320f917a996d34ee1c27449fb5bc9ffc72adf4155bec0e7fc4edafc2cd966cf96b3 + languageName: node + linkType: hard + +"@agoric/cosmic-proto@npm:0.4.1-dev-493b453.0+493b453": + version: 0.4.1-dev-493b453.0 + resolution: "@agoric/cosmic-proto@npm:0.4.1-dev-493b453.0" + dependencies: + "@endo/base64": "npm:^1.0.8" + "@endo/init": "npm:^1.1.6" + checksum: 10c0/b18d83c8d7543aa1c00bbdf487d0ffacb453bc614df9a3331f2d557e0a06438b74c0ca07ef374e98d16cd3959052d9507b789636e5818b452da6cd9df8860ee7 + languageName: node + linkType: hard + +"@agoric/ertp@npm:0.16.3-dev-493b453.0+493b453, @agoric/ertp@npm:dev": + version: 0.16.3-dev-493b453.0 + resolution: "@agoric/ertp@npm:0.16.3-dev-493b453.0" + dependencies: + "@agoric/notifier": "npm:0.6.3-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@agoric/zone": "npm:0.2.3-dev-493b453.0+493b453" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/d7b94280ba4bdeb8577c30461b3d4d09d9f08bb5d21c1421f8b4fdcbc6f24945d83d41686c60584438ca4fb7cb6cdd62f30ffdab6796fe7520efefebbe675b60 + languageName: node + linkType: hard + +"@agoric/governance@npm:0.10.4-dev-493b453.0+493b453": + version: 0.10.4-dev-493b453.0 + resolution: "@agoric/governance@npm:0.10.4-dev-493b453.0" + dependencies: + "@agoric/ertp": "npm:0.16.3-dev-493b453.0+493b453" + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/notifier": "npm:0.6.3-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/time": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@agoric/zoe": "npm:0.26.3-dev-493b453.0+493b453" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/captp": "npm:^4.4.2" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/promise-kit": "npm:^1.1.7" + import-meta-resolve: "npm:^2.2.1" + checksum: 10c0/93b032d653914b546183d8db38248877a39b32734ff4f3a72ffb50248634cfa3e5eae387c7b926394a52a56216d0184b6b86cc0ef9ae718b3b85ac95493946db + languageName: node + linkType: hard + +"@agoric/inter-protocol@npm:0.16.2-dev-493b453.0+493b453": + version: 0.16.2-dev-493b453.0 + resolution: "@agoric/inter-protocol@npm:0.16.2-dev-493b453.0" + dependencies: + "@agoric/ertp": "npm:0.16.3-dev-493b453.0+493b453" + "@agoric/governance": "npm:0.10.4-dev-493b453.0+493b453" + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/notifier": "npm:0.6.3-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/time": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@agoric/vats": "npm:0.15.2-dev-493b453.0+493b453" + "@agoric/zoe": "npm:0.26.3-dev-493b453.0+493b453" + "@endo/captp": "npm:^4.4.2" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/promise-kit": "npm:^1.1.7" + jessie.js: "npm:^0.3.4" + checksum: 10c0/ca2cb382280c509e186834624ef8d867b47313567bfb450460d9a194f7f709b6b390ed1559bbeab32ef6ba7095b029bfa8af587d74eabbd0f6313626926317b0 + languageName: node + linkType: hard + +"@agoric/internal@npm:0.3.3-dev-493b453.0+493b453, @agoric/internal@npm:dev": + version: 0.3.3-dev-493b453.0 + resolution: "@agoric/internal@npm:0.3.3-dev-493b453.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-493b453.0+493b453" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + "@endo/stream": "npm:^1.2.7" + anylogger: "npm:^0.21.0" + jessie.js: "npm:^0.3.4" + checksum: 10c0/e587d74d983ef67c7b5ff576252f107d3dd88b35d9602f0012fd8b0f841a9eccedc6fbfe42a22db7aa650dc156976cd16a472c1d7126dc95e6d0c800f1558891 + languageName: node + linkType: hard + +"@agoric/kmarshal@npm:0.1.1-dev-493b453.0+493b453": + version: 0.1.1-dev-493b453.0 + resolution: "@agoric/kmarshal@npm:0.1.1-dev-493b453.0" + dependencies: + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + checksum: 10c0/2ecf6b5b0f6097011f8f1ea93923010dfed95607ff5f43d76a8cea9d063853c54fd788bdc8bd8ebfa9463f1ad1e3d33a900c31743c428bf6f3aefaf1633ed577 + languageName: node + linkType: hard + +"@agoric/network@npm:0.1.1-dev-493b453.0+493b453": + version: 0.1.1-dev-493b453.0 + resolution: "@agoric/network@npm:0.1.1-dev-493b453.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@endo/base64": "npm:^1.0.8" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/f313f87a7a9bf1fb588801719922fd1dca2e4b7e7e2dd767a3c682ca14aa6bccc99e204e973c3ed7a2ddb9ff5bbde89b762c02233214b8fd4955ebee6a57a817 + languageName: node + linkType: hard + +"@agoric/notifier@npm:0.6.3-dev-493b453.0+493b453": + version: 0.6.3-dev-493b453.0 + resolution: "@agoric/notifier@npm:0.6.3-dev-493b453.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/791d0c73b4bc266e8856857fcd2955051fcc6a5a27507f7c4bcb9b319601813c20a0254b87890db020c0386c0d212231423dd69a4cba33587781f08ba731cf77 + languageName: node + linkType: hard + +"@agoric/smart-wallet@npm:0.5.4-dev-493b453.0+493b453": + version: 0.5.4-dev-493b453.0 + resolution: "@agoric/smart-wallet@npm:0.5.4-dev-493b453.0" + dependencies: + "@agoric/ertp": "npm:0.16.3-dev-493b453.0+493b453" + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/notifier": "npm:0.6.3-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@agoric/vats": "npm:0.15.2-dev-493b453.0+493b453" + "@agoric/vow": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/zoe": "npm:0.26.3-dev-493b453.0+493b453" + "@agoric/zone": "npm:0.2.3-dev-493b453.0+493b453" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/8cdd449da5335c36c487fae8fa2a4c946f372d789771782c91e7fc0a407d7f5cad8302ac08c82277ac85ff3c986e6c057a5ee1e58e1cb012eba8382cba719bc2 + languageName: node + linkType: hard + +"@agoric/store@npm:0.9.3-dev-493b453.0+493b453, @agoric/store@npm:dev": + version: 0.9.3-dev-493b453.0 + resolution: "@agoric/store@npm:0.9.3-dev-493b453.0" + dependencies: + "@endo/errors": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/6461a338f1e8fe0af1e2ffcad86c6ce1df6ac82c4f5c4e555e6c83ec4e43eea7e8523e1b01a6855d4b9ac59d2cf4c18be33ef7ac84642025f407dea53290b46b + languageName: node + linkType: hard + +"@agoric/swing-store@npm:0.9.2-dev-493b453.0+493b453": + version: 0.9.2-dev-493b453.0 + resolution: "@agoric/swing-store@npm:0.9.2-dev-493b453.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@endo/base64": "npm:^1.0.8" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/check-bundle": "npm:^1.0.11" + "@endo/errors": "npm:^1.2.7" + "@endo/nat": "npm:^5.0.12" + better-sqlite3: "npm:^9.1.1" + checksum: 10c0/cd802dedb12ed36c3587dfb9af16e2d2879cc306908949bbcd8f9f105273dfbce3618e17ff68639990c599cf46ac11f7158a29c3d95f100049cd4b9fcb811d26 + languageName: node + linkType: hard + +"@agoric/swingset-liveslots@npm:0.10.3-dev-493b453.0+493b453": + version: 0.10.3-dev-493b453.0 + resolution: "@agoric/swingset-liveslots@npm:0.10.3-dev-493b453.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@endo/env-options": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/far": "npm:^1.1.8" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/d74e64f5c3c30a9989c8c6e61f21028a808db009a48fd1266d3702c3c6a0bb1a1b84cce97a84eddf6cb78ca1f132dd1ec31566e48f1ab980fc45e6fb1ed9acc9 + languageName: node + linkType: hard + +"@agoric/swingset-vat@npm:0.32.3-dev-493b453.0+493b453": + version: 0.32.3-dev-493b453.0 + resolution: "@agoric/swingset-vat@npm:0.32.3-dev-493b453.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/kmarshal": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/swing-store": "npm:0.9.2-dev-493b453.0+493b453" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-493b453.0+493b453" + "@agoric/swingset-xsnap-supervisor": "npm:0.10.3-dev-493b453.0+493b453" + "@agoric/time": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@agoric/xsnap-lockdown": "npm:0.14.1-dev-493b453.0+493b453" + "@endo/base64": "npm:^1.0.8" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/captp": "npm:^4.4.2" + "@endo/check-bundle": "npm:^1.0.11" + "@endo/compartment-mapper": "npm:^1.3.1" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/import-bundle": "npm:^1.3.1" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + "@endo/ses-ava": "npm:^1.2.7" + "@endo/stream": "npm:^1.2.7" + "@endo/zip": "npm:^1.0.8" + ansi-styles: "npm:^6.2.1" + anylogger: "npm:^0.21.0" + better-sqlite3: "npm:^9.1.1" + import-meta-resolve: "npm:^2.2.1" + microtime: "npm:^3.1.0" + semver: "npm:^6.3.0" + tmp: "npm:^0.2.1" + yargs-parser: "npm:^21.1.1" + peerDependencies: + "@agoric/xsnap": ^0.14.2 + ava: ^5.3.0 + bin: + vat: bin/vat + checksum: 10c0/c8e058b894525a5bd3f0b714d2d3588a9c26803634cfbd609c8ce50ab95cbd2a7c380dac583cc79c93414bfb48b18771a30d757f6060f39aaecc7285787e9209 + languageName: node + linkType: hard + +"@agoric/swingset-xsnap-supervisor@npm:0.10.3-dev-493b453.0+493b453": + version: 0.10.3-dev-493b453.0 + resolution: "@agoric/swingset-xsnap-supervisor@npm:0.10.3-dev-493b453.0" + checksum: 10c0/d2f6a0b1d609a059aaec185f8bcf2f107973a95eaba14d6e2719b8e0d74e1431ce3948d808300a2ce02290dbd75b7ee0707a731b4a2b1f54abb61882b0e49aa0 + languageName: node + linkType: hard + +"@agoric/synthetic-chain@npm:^0.3.0": + version: 0.3.0 + resolution: "@agoric/synthetic-chain@npm:0.3.0" + dependencies: + "@endo/zip": "npm:^1.0.7" + better-sqlite3: "npm:^9.6.0" + chalk: "npm:^5.3.0" + cosmjs-types: "npm:^0.9.0" + execa: "npm:^9.3.1" + bin: + synthetic-chain: dist/cli/cli.js + checksum: 10c0/17c6241bdc48b8a2a7608c9d4d7c0a0c76fb10d4ee44a31a1150104a792bcd1133f4b1a7e8ab26673a07450b3ceabccd9911999117568221b49221b6ee4306a1 + languageName: node + linkType: hard + +"@agoric/time@npm:0.3.3-dev-493b453.0+493b453": + version: 0.3.3-dev-493b453.0 + resolution: "@agoric/time@npm:0.3.3-dev-493b453.0" + dependencies: + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@endo/errors": "npm:^1.2.7" + "@endo/nat": "npm:^5.0.12" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/a5fd2a51d9a5ab6e3bd1ccca81b814cf9c702a16719d859fac7b2389860d3a13a76b8cced7d2eaf95bc0038c39ea5a2a42f65e5ede597859ee690cb99633d137 + languageName: node + linkType: hard + +"@agoric/vat-data@npm:0.5.3-dev-493b453.0+493b453": + version: 0.5.3-dev-493b453.0 + resolution: "@agoric/vat-data@npm:0.5.3-dev-493b453.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-493b453.0+493b453" + "@endo/errors": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/23871cd5d881ddeebb7d8d00cd1e7069139988de75cabf53aeda0211d99a2ba17b081de074f5f88eaaf093b783cdcc09050b5fbd9f3209ae1e96db9bd151aa51 + languageName: node + linkType: hard + +"@agoric/vats@npm:0.15.2-dev-493b453.0+493b453": + version: 0.15.2-dev-493b453.0 + resolution: "@agoric/vats@npm:0.15.2-dev-493b453.0" + dependencies: + "@agoric/cosmic-proto": "npm:0.4.1-dev-493b453.0+493b453" + "@agoric/ertp": "npm:0.16.3-dev-493b453.0+493b453" + "@agoric/governance": "npm:0.10.4-dev-493b453.0+493b453" + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/network": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/notifier": "npm:0.6.3-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/swingset-vat": "npm:0.32.3-dev-493b453.0+493b453" + "@agoric/time": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@agoric/vow": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/zoe": "npm:0.26.3-dev-493b453.0+493b453" + "@agoric/zone": "npm:0.2.3-dev-493b453.0+493b453" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/import-bundle": "npm:^1.3.1" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + import-meta-resolve: "npm:^2.2.1" + jessie.js: "npm:^0.3.4" + checksum: 10c0/dab362993b9a3e26d7d84d66cf0604b1d43bd1fc0d02cf6a900bc38c1f6278eb9dd5db7d6e0cc13239269a199bf024c7dc1ec78071d1c3c6272523cbec864cda + languageName: node + linkType: hard + +"@agoric/vow@npm:0.1.1-dev-493b453.0+493b453": + version: 0.1.1-dev-493b453.0 + resolution: "@agoric/vow@npm:0.1.1-dev-493b453.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@endo/env-options": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/b3088faedc74771b8756daefe38c98bfa155e5e5fecfa32c93d488d4e27b69752c57bdf22dda195e4f5e4f4ecd045c0d6adddc3c8f1858eecc717d8a2c437694 + languageName: node + linkType: hard + +"@agoric/xsnap-lockdown@npm:0.14.1-dev-493b453.0+493b453": + version: 0.14.1-dev-493b453.0 + resolution: "@agoric/xsnap-lockdown@npm:0.14.1-dev-493b453.0" + checksum: 10c0/f96425955250af725870b629769afb8c3402ffeaac6efd7d46c2ef1d22b556fe61a3540dec57df1d96c74889555e0de883f69dda948d7d46b8fd887831228d87 + languageName: node + linkType: hard + +"@agoric/zoe@npm:0.26.3-dev-493b453.0+493b453, @agoric/zoe@npm:dev": + version: 0.26.3-dev-493b453.0 + resolution: "@agoric/zoe@npm:0.26.3-dev-493b453.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/ertp": "npm:0.16.3-dev-493b453.0+493b453" + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/notifier": "npm:0.6.3-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-493b453.0+493b453" + "@agoric/swingset-vat": "npm:0.32.3-dev-493b453.0+493b453" + "@agoric/time": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@agoric/vow": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/zone": "npm:0.2.3-dev-493b453.0+493b453" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/captp": "npm:^4.4.2" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/far": "npm:^1.1.8" + "@endo/import-bundle": "npm:^1.3.1" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/84913008b0b3f133442528fd9f5db212291975ebc1bc34db047fa1badd473b68f614278a1d9aade778387a75df7290cda772a51e989be5f8100c8a2307d86235 + languageName: node + linkType: hard + +"@agoric/zone@npm:0.2.3-dev-493b453.0+493b453": + version: 0.2.3-dev-493b453.0 + resolution: "@agoric/zone@npm:0.2.3-dev-493b453.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/vat-data": "npm:0.5.3-dev-493b453.0+493b453" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/pass-style": "npm:^1.4.6" + checksum: 10c0/e2db32502a5a2fd02f4419d00f40dcc06f34c5ce5e91aa65fdeebc2e507a13fe6ee8e7ad23ca9e143875592e0b5a52abe04eb75ea9a03dc1a119aeaf45e0ba66 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/generator@npm:7.26.2" + dependencies: + "@babel/parser": "npm:^7.26.2" + "@babel/types": "npm:^7.26.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/167ebce8977142f5012fad6bd91da51ac52bcd752f2261a54b7ab605d928aebe57e21636cdd2a9c7757e552652c68d9fcb5d40b06fcb66e02d9ee7526e118a5c + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + +"@babel/parser@npm:^7.23.6, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/parser@npm:7.26.2" + dependencies: + "@babel/types": "npm:^7.26.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/751a743087b3a9172a7599f1421830d44c38f065ef781588d2bfb1c98f9b461719a226feb13c868d7a284783eee120c88ea522593118f2668f46ebfb1105c4d7 + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.6": + version: 7.25.9 + resolution: "@babel/traverse@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/e90be586a714da4adb80e6cb6a3c5cfcaa9b28148abdafb065e34cc109676fc3db22cf98cd2b2fff66ffb9b50c0ef882cab0f466b6844be0f6c637b82719bba1 + languageName: node + linkType: hard + +"@babel/types@npm:^7.17.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/types@npm:7.26.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/b694f41ad1597127e16024d766c33a641508aad037abd08d0d1f73af753e1119fa03b4a107d04b5f92cc19c095a594660547ae9bead1db2299212d644b0a5cb8 + languageName: node + linkType: hard + +"@colors/colors@npm:1.6.0": + version: 1.6.0 + resolution: "@colors/colors@npm:1.6.0" + checksum: 10c0/9328a0778a5b0db243af54455b79a69e3fb21122d6c15ef9e9fcc94881d8d17352d8b2b2590f9bdd46fac5c2d6c1636dcfc14358a20c70e22daf89e1a759b629 + languageName: node + linkType: hard + +"@confio/ics23@npm:^0.6.8": + version: 0.6.8 + resolution: "@confio/ics23@npm:0.6.8" + dependencies: + "@noble/hashes": "npm:^1.0.0" + protobufjs: "npm:^6.8.8" + checksum: 10c0/2f3f5032cd6a34c9b2fbd64bbf7e1cdec75ca71f348a770f7b5474b5027b12202bfbcd404eca931efddb5901f769af035a87cb8bddbf3f23d7e5d93c9d3d7f6f + languageName: node + linkType: hard + +"@confio/relayer@npm:^0.11.3": + version: 0.11.3 + resolution: "@confio/relayer@npm:0.11.3" + dependencies: + "@cosmjs/cosmwasm-stargate": "npm:^0.32.1" + "@cosmjs/crypto": "npm:^0.32.1" + "@cosmjs/encoding": "npm:^0.32.1" + "@cosmjs/faucet-client": "npm:^0.32.1" + "@cosmjs/math": "npm:^0.32.1" + "@cosmjs/proto-signing": "npm:^0.32.1" + "@cosmjs/stargate": "npm:^0.32.1" + "@cosmjs/stream": "npm:^0.32.1" + "@cosmjs/tendermint-rpc": "npm:^0.32.1" + "@cosmjs/utils": "npm:^0.32.1" + ajv: "npm:7.1.1" + axios: "npm:^1.6.7" + commander: "npm:7.1.0" + cosmjs-types: "npm:^0.9.0" + fast-safe-stringify: "npm:2.0.4" + js-yaml: "npm:4.0.0" + lodash: "npm:4.17.21" + prom-client: "npm:13.1.0" + table: "npm:^6.7.1" + triple-beam: "npm:1.3.0" + winston: "npm:3.3.3" + bin: + ibc-relayer: build/binary/ibc-relayer/index.js + ibc-setup: build/binary/ibc-setup/index.js + checksum: 10c0/f6519a21a7e2b7d79835558305bbac6f6712b90f0e10f2c156ae74583ca170da0b97ec456272c25a2ffdcbe0343ad425e67886b792f2aed1f5303e34b93edf40 + languageName: node + linkType: hard + +"@cosmjs/amino@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/amino@npm:0.32.4" + dependencies: + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + checksum: 10c0/cd8e215b0406f5c7b73ab0a21106d06b6f76b1da12f1ab7b612884e1dd8bc626966dc67d4e7580090ade131546cbec70000f854e6596935299d054b788929a7e + languageName: node + linkType: hard + +"@cosmjs/cosmwasm-stargate@npm:^0.32.1": + version: 0.32.4 + resolution: "@cosmjs/cosmwasm-stargate@npm:0.32.4" + dependencies: + "@cosmjs/amino": "npm:^0.32.4" + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/proto-signing": "npm:^0.32.4" + "@cosmjs/stargate": "npm:^0.32.4" + "@cosmjs/tendermint-rpc": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + cosmjs-types: "npm:^0.9.0" + pako: "npm:^2.0.2" + checksum: 10c0/f7e285c51ef8b1098a9ea5ca2546a1e226b4fa0a990d95faa6f3b752f3638b6c55f36a56b6f4b11f0a66fd61e3ae8772921d8e99418218df0b2205efe1c82f37 + languageName: node + linkType: hard + +"@cosmjs/crypto@npm:^0.32.1, @cosmjs/crypto@npm:^0.32.3, @cosmjs/crypto@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/crypto@npm:0.32.4" + dependencies: + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + "@noble/hashes": "npm:^1" + bn.js: "npm:^5.2.0" + elliptic: "npm:^6.5.4" + libsodium-wrappers-sumo: "npm:^0.7.11" + checksum: 10c0/94e742285eb8c7c5393055ba0635f10c06bf87710e953aedc71e3edc2b8e21a12a0d9b5e8eff37e326765f57c9eb3c7fd358f24f639efad4f1a6624eb8189534 + languageName: node + linkType: hard + +"@cosmjs/encoding@npm:^0.32.1, @cosmjs/encoding@npm:^0.32.3, @cosmjs/encoding@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/encoding@npm:0.32.4" + dependencies: + base64-js: "npm:^1.3.0" + bech32: "npm:^1.1.4" + readonly-date: "npm:^1.0.0" + checksum: 10c0/4a30d5ae1a2d1247d44bda46101ce208c7666d8801ca9a33de94edc35cc22460c16b4834ec84d5a65ffef5e2a4b58605e0a0a056c46bc0a042979ec84acf20cd + languageName: node + linkType: hard + +"@cosmjs/faucet-client@npm:^0.32.1": + version: 0.32.4 + resolution: "@cosmjs/faucet-client@npm:0.32.4" + dependencies: + axios: "npm:^1.6.0" + checksum: 10c0/1651cb370eb5fa2b12b6f94e06d1dc9a6306e34cad3fc87d9263d8b8a225d500449e10a9f6e326534f65261778208dab7fada6a70efb63195589ad08f58e1008 + languageName: node + linkType: hard + +"@cosmjs/json-rpc@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/json-rpc@npm:0.32.4" + dependencies: + "@cosmjs/stream": "npm:^0.32.4" + xstream: "npm:^11.14.0" + checksum: 10c0/b3ebd240f4fb21260e284d2e503ecc61bac898842187ab717f0efb9a5f21272f161f267cc145629caeb9735f80946844384e2bd410275a4744147a44518c0fa0 + languageName: node + linkType: hard + +"@cosmjs/math@npm:^0.32.1, @cosmjs/math@npm:^0.32.3, @cosmjs/math@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/math@npm:0.32.4" + dependencies: + bn.js: "npm:^5.2.0" + checksum: 10c0/91e47015be5634d27d71d14c5a05899fb4992b69db02cab1558376dedf8254f96d5e24f097c5601804ae18ed33c7c25d023653ac2bf9d20250fd3e5637f6b101 + languageName: node + linkType: hard + +"@cosmjs/proto-signing@npm:^0.32.1, @cosmjs/proto-signing@npm:^0.32.3, @cosmjs/proto-signing@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/proto-signing@npm:0.32.4" + dependencies: + "@cosmjs/amino": "npm:^0.32.4" + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + cosmjs-types: "npm:^0.9.0" + checksum: 10c0/6915059d2e6dbe1abda4a747c3b1abd47a9eff4f8cb2cf9a5545f939b656b4a15bbde2bfc1364357f9b2a081a066280c3b469f6d13dd5fc51b429b0f90a54913 + languageName: node + linkType: hard + +"@cosmjs/socket@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/socket@npm:0.32.4" + dependencies: + "@cosmjs/stream": "npm:^0.32.4" + isomorphic-ws: "npm:^4.0.1" + ws: "npm:^7" + xstream: "npm:^11.14.0" + checksum: 10c0/2d94c1fb39016bea3c7c145f4565c8a0fed20c805ac569ea604cd3646c15147b82b8db18a4e3c832d6ae0c3dd14363d4db3d91bcacac922679efba164ed49386 + languageName: node + linkType: hard + +"@cosmjs/stargate@npm:^0.32.1, @cosmjs/stargate@npm:^0.32.3, @cosmjs/stargate@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/stargate@npm:0.32.4" + dependencies: + "@confio/ics23": "npm:^0.6.8" + "@cosmjs/amino": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/proto-signing": "npm:^0.32.4" + "@cosmjs/stream": "npm:^0.32.4" + "@cosmjs/tendermint-rpc": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + cosmjs-types: "npm:^0.9.0" + xstream: "npm:^11.14.0" + checksum: 10c0/c30a3519516aaa7eae58ba827c80fcf74c7fe7a9d3aa5cc8138c3a2768f5f241f59c2f5cec27e9037b4df12b1c6605b4fac9eadb4de97bd84edddc3a80a02e24 + languageName: node + linkType: hard + +"@cosmjs/stream@npm:^0.32.1, @cosmjs/stream@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/stream@npm:0.32.4" + dependencies: + xstream: "npm:^11.14.0" + checksum: 10c0/c677c53f9101c2a36fa03a475d92dea2fa69c475f896751b5e18a5d07087eeecbf6bca2e62a8940003da53fa235a9b2dd78c8257bf19c3f96e3f69fa8d5f183d + languageName: node + linkType: hard + +"@cosmjs/tendermint-rpc@npm:^0.32.1, @cosmjs/tendermint-rpc@npm:^0.32.3, @cosmjs/tendermint-rpc@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/tendermint-rpc@npm:0.32.4" + dependencies: + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/json-rpc": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/socket": "npm:^0.32.4" + "@cosmjs/stream": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + axios: "npm:^1.6.0" + readonly-date: "npm:^1.0.0" + xstream: "npm:^11.14.0" + checksum: 10c0/5fae7afcdf98cc7dd36922aa1586254cc8c202cf8fe66804e61d793d31dcff816f40d33f7a0eb72c1b9226c7c361d4848e4ff12d0489f6fa66f47f0c86ae18dd + languageName: node + linkType: hard + +"@cosmjs/utils@npm:^0.32.1, @cosmjs/utils@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/utils@npm:0.32.4" + checksum: 10c0/d5ff8b235094be1150853a715116049f73eb5cdfeea8ce8e22ecccc61ec99792db457404d4307782b1a2f935dcf438f5c485beabfcfbc1dc5df26eb6e6da9062 + languageName: node + linkType: hard + +"@dabh/diagnostics@npm:^2.0.2": + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" + dependencies: + colorspace: "npm:1.1.x" + enabled: "npm:2.0.x" + kuler: "npm:^2.0.0" + checksum: 10c0/a5133df8492802465ed01f2f0a5784585241a1030c362d54a602ed1839816d6c93d71dde05cf2ddb4fd0796238c19774406bd62fa2564b637907b495f52425fe + languageName: node + linkType: hard + +"@endo/base64@npm:^1.0.8, @endo/base64@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/base64@npm:1.0.9" + checksum: 10c0/63e487cf59b50a080fab389a8ab24d66264910ecf375dc19677c2ee7421d92a4be9c85e435b216b4adc9983384073a7eb753223f85ba77aec8d9fd3e0c1fe090 + languageName: node + linkType: hard + +"@endo/bundle-source@npm:^3.4.2": + version: 3.5.0 + resolution: "@endo/bundle-source@npm:3.5.0" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/evasive-transform": "npm:^1.3.3" + "@endo/init": "npm:^1.1.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/where": "npm:^1.0.9" + "@rollup/plugin-commonjs": "npm:^19.0.0" + "@rollup/plugin-json": "npm:^6.1.0" + "@rollup/plugin-node-resolve": "npm:^13.0.0" + acorn: "npm:^8.2.4" + rollup: "npm:^2.79.1" + ts-blank-space: "npm:^0.4.1" + bin: + bundle-source: ./src/tool.js + checksum: 10c0/7f97194c97eb28abbde6655f7de4410d5aae5d6a2a3d712e1418b9b4fd20823333b7fe8956401c2f201280340731e51e28d9c4fbe3b5a787b0abd00e3ac13b52 + languageName: node + linkType: hard + +"@endo/captp@npm:^4.4.2": + version: 4.4.3 + resolution: "@endo/captp@npm:4.4.3" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/0647dd6acc39c7a54a42d9f168861d11dc28248321be72529dd8574b52989957be8f7a5ec9985fc76a24b37cd6b6d190e5bfbbc1481594e367c8517c31fce0e2 + languageName: node + linkType: hard + +"@endo/check-bundle@npm:^1.0.11": + version: 1.0.12 + resolution: "@endo/check-bundle@npm:1.0.12" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + checksum: 10c0/73e146d9d4d5ee23936b0df368e51ebb3658eecc5efe308a1894f70339502e6de8fa065185e8518d1445bf8fbc4c5fae54fc7dab8794f02397f6694a7ab9af9c + languageName: node + linkType: hard + +"@endo/cjs-module-analyzer@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/cjs-module-analyzer@npm:1.0.9" + checksum: 10c0/cb8c56d108b175f2f211c8292bac6cda35c44b9c16fb2763ab9a32b545895e1721633938b440bfe7a06f69e1f168e9b248ef103631a1d4c63fda8cbe580ca185 + languageName: node + linkType: hard + +"@endo/common@npm:^1.2.7, @endo/common@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/common@npm:1.2.8" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/c9465721095d9f06278b6550909a02c330c7a69223f11aff29759067586d41b86054127639fa2c2c0345d0d0aa43518e5b72d5c547b67bfe8e802cd21756d87b + languageName: node + linkType: hard + +"@endo/compartment-mapper@npm:^1.3.1, @endo/compartment-mapper@npm:^1.4.0": + version: 1.4.0 + resolution: "@endo/compartment-mapper@npm:1.4.0" + dependencies: + "@endo/cjs-module-analyzer": "npm:^1.0.9" + "@endo/module-source": "npm:^1.1.2" + "@endo/trampoline": "npm:^1.0.3" + "@endo/zip": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/2c4999962016f57c0f3a40ce1445a064b826eb101a972d26ba56d9dba6d3d8f66744912e3f7e24754018bd2c633663a00ea5ab0d7658c4907c9372ddd3e56464 + languageName: node + linkType: hard + +"@endo/env-options@npm:^1.1.7, @endo/env-options@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/env-options@npm:1.1.8" + checksum: 10c0/2f519f48a5b966dbd9e66134d4abc89ff02b9791d21146b49031ceb694584f3f41c6119125b6bb4eb0d347f5bcd846473b5f3c4ae6bae3dac19402fcaf522520 + languageName: node + linkType: hard + +"@endo/errors@npm:^1.2.2, @endo/errors@npm:^1.2.7, @endo/errors@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/errors@npm:1.2.8" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/3f33fc7119ab840ad0f5bdfb70e73cc99630f09593c31928e30de4d9c8e898c85397c5170964d54c819a757a74d3b005f6275480ff8d0f1aa2aa8ef872852e97 + languageName: node + linkType: hard + +"@endo/evasive-transform@npm:^1.3.3": + version: 1.3.3 + resolution: "@endo/evasive-transform@npm:1.3.3" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + source-map-js: "npm:^1.2.0" + checksum: 10c0/34fae4789ab3142ab73a5c94a46954908737bbc72f1e302c338941ca2556ab2127505ecee57a1c0d11e0b9c7070b4a579ce4e7e60585990161cec64ce0955211 + languageName: node + linkType: hard + +"@endo/eventual-send@npm:^1.2.7, @endo/eventual-send@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/eventual-send@npm:1.2.8" + dependencies: + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/d7c16c935441b67d029fcb6785f425a1194fb7f936e4b20dde21eb393266cb7366edf7a95d3fdfa96cd4a3246a3659a06d0dbb3c1217045e1718e1cf34c7a3bd + languageName: node + linkType: hard + +"@endo/exo@npm:^1.5.6": + version: 1.5.7 + resolution: "@endo/exo@npm:1.5.7" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/0193de0606a7f07f207f3dd8bb71ec6be0acfb0ff5ef570f03cbbcaed888db68e451082c34764de8ee301f8d2d175e6c5a5405e76367c27151d644536bdf57a4 + languageName: node + linkType: hard + +"@endo/far@npm:^1.0.0, @endo/far@npm:^1.1.5, @endo/far@npm:^1.1.8, @endo/far@npm:^1.1.9": + version: 1.1.9 + resolution: "@endo/far@npm:1.1.9" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/pass-style": "npm:^1.4.7" + checksum: 10c0/e0d95743c25183b961aa1f11dd81c067739fd2fb3deeab58520e949961eacba9ed109bb01b9ed820d596e8a043b6721d650d9624abf0263296cca647e7286a2e + languageName: node + linkType: hard + +"@endo/import-bundle@npm:^1.3.1": + version: 1.3.2 + resolution: "@endo/import-bundle@npm:1.3.2" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/where": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/cc38bb7858c4b3a3d1cfbf70b0af3b05b527019452eb922313b4adf87e5590f5cacf4ff5dbd7a44c172d3c220de41edc3fa8895551f76071c85f1450ff94b09a + languageName: node + linkType: hard + +"@endo/init@npm:^1.1.4, @endo/init@npm:^1.1.6, @endo/init@npm:^1.1.7": + version: 1.1.7 + resolution: "@endo/init@npm:1.1.7" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/lockdown": "npm:^1.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/6cfcc244f02da9883f65a8f34da9483a628d5350192983c53d5116b12403dc5693145c6349b6c3ca381b6b8d9590cee16f90440dc0e2da5f525e13079d6c9a2f + languageName: node + linkType: hard + +"@endo/lockdown@npm:^1.0.12, @endo/lockdown@npm:^1.0.13": + version: 1.0.13 + resolution: "@endo/lockdown@npm:1.0.13" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/9df04cc477595b368088a1d445f2241d8a152cb4dcf6a79d39d4804594dd8ff472380ab2bdf262adeb5b4b7cfc73effb6cc716c5a3aeca282801d57fe8a018a0 + languageName: node + linkType: hard + +"@endo/marshal@npm:^1.5.3, @endo/marshal@npm:^1.6.1, @endo/marshal@npm:^1.6.2": + version: 1.6.2 + resolution: "@endo/marshal@npm:1.6.2" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/bdb634a77c2147c1359792531822aabe642a5e4d39f496dd57bb97367617a2f2d72edaaa50c51ed6a2ec1f2c08deab6a571c3dd8ffa260d441d25f53606902b1 + languageName: node + linkType: hard + +"@endo/module-source@npm:^1.1.2": + version: 1.1.2 + resolution: "@endo/module-source@npm:1.1.2" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + "@babel/types": "npm:^7.24.0" + ses: "npm:^1.10.0" + checksum: 10c0/3d64ff5430f288531a00e124ae0620e137dab0fdaba00f2d41066b8307eb2da30e3987d84fe450d55d844e0f96feafa36a825cecc615c05d96224a209832c95c + languageName: node + linkType: hard + +"@endo/nat@npm:^5.0.12, @endo/nat@npm:^5.0.13": + version: 5.0.13 + resolution: "@endo/nat@npm:5.0.13" + checksum: 10c0/78578de4567c9bc4c6f50638c688886c07c38177a8d44192230d344221da06ccffc6d9ef8d423e27198d864ed7c57ef5ced9b1d05922eaa4e40bf82856b1aa11 + languageName: node + linkType: hard + +"@endo/pass-style@npm:^1.4.6, @endo/pass-style@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/pass-style@npm:1.4.7" + dependencies: + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + "@fast-check/ava": "npm:^1.1.5" + checksum: 10c0/ee30e011fb08c292718a315f2ebd5ee2da6d918bf2cdaf2b269e123207c642fa1525493c41180db8c941e1a1959369730114b116656c99e8bb107ca5917f3f4e + languageName: node + linkType: hard + +"@endo/patterns@npm:^1.4.6, @endo/patterns@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/patterns@npm:1.4.7" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/358720438a019847406dfad9f23fc9b565c955ffd86d75693cea994c492dd46efaf189502f04b04f8870e6d50ffcb44ffa1e1dd3a0d6b2dfbbe57edeb994b83b + languageName: node + linkType: hard + +"@endo/promise-kit@npm:^1.1.7, @endo/promise-kit@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/promise-kit@npm:1.1.8" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/3a51755822bd4112474bec584005b81f9ffe6a6b590faa16cff7a4994010d001d6d190f58a1e890d85b0feb0eb052d79ed2c5ed88977afb0e47ca53b6b199196 + languageName: node + linkType: hard + +"@endo/ses-ava@npm:^1.2.7": + version: 1.2.8 + resolution: "@endo/ses-ava@npm:1.2.8" + dependencies: + "@endo/env-options": "npm:^1.1.8" + "@endo/init": "npm:^1.1.7" + ses: "npm:^1.10.0" + peerDependencies: + ava: ^5.3.0 || ^6.1.2 + checksum: 10c0/c1ef65d182f3bfa1ec0d5d0434da9d28bb0925f485629fcd5c42dc89db99e65a5b44e352e1fd2a577778b2905d6f36b009e4f2953aa0257ec1b049019e37b2cf + languageName: node + linkType: hard + +"@endo/stream@npm:^1.2.7": + version: 1.2.8 + resolution: "@endo/stream@npm:1.2.8" + dependencies: + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + ses: "npm:^1.10.0" + checksum: 10c0/f435f7650020b32c10bb4cb139910b363b4d4f22bcf9e7a659d3d2eae694a3ea43c3af49c80370760a573370429e5fbe1619dec631251578d4c5eba9ff161613 + languageName: node + linkType: hard + +"@endo/trampoline@npm:^1.0.3": + version: 1.0.3 + resolution: "@endo/trampoline@npm:1.0.3" + checksum: 10c0/be0c3784b17f422ae04e28a6722e2abd193a5585a82acf5eb388476094c026aa5e76a383db887bdf6a032ccf0a12c38a967f5f1e71cef44a4659606be789b548 + languageName: node + linkType: hard + +"@endo/where@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/where@npm:1.0.9" + checksum: 10c0/dd8f8fb601fb54e7cef64d7b32f91595d01151acf1e63c46257c905afb75760d80f2eec5d71cfb1f9251e435990256d56f35d6f8b4851f5e6fbe6b393b535028 + languageName: node + linkType: hard + +"@endo/zip@npm:^1.0.7, @endo/zip@npm:^1.0.8, @endo/zip@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/zip@npm:1.0.9" + checksum: 10c0/3fccea31bd5dad938a3b5f531454d3c49513892d6d5aba1f0af1034ff0ae54c3e28a346a9df08bd9e5201354acccd631e45c9c0e68fa2848a876a3919f3830dc + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/aix-ppc64@npm:0.23.1" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/android-arm64@npm:0.23.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/android-arm@npm:0.23.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/android-x64@npm:0.23.1" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/darwin-arm64@npm:0.23.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/darwin-x64@npm:0.23.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/freebsd-arm64@npm:0.23.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/freebsd-x64@npm:0.23.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-arm64@npm:0.23.1" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-arm@npm:0.23.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-ia32@npm:0.23.1" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-loong64@npm:0.23.1" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-mips64el@npm:0.23.1" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-ppc64@npm:0.23.1" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-riscv64@npm:0.23.1" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-s390x@npm:0.23.1" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-x64@npm:0.23.1" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/netbsd-x64@npm:0.23.1" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/openbsd-arm64@npm:0.23.1" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/openbsd-x64@npm:0.23.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/sunos-x64@npm:0.23.1" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/win32-arm64@npm:0.23.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/win32-ia32@npm:0.23.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/win32-x64@npm:0.23.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@fast-check/ava@npm:^1.1.5": + version: 1.2.1 + resolution: "@fast-check/ava@npm:1.2.1" + dependencies: + fast-check: "npm:^3.0.0" + peerDependencies: + ava: ^4 || ^5 || ^6 + checksum: 10c0/3800098fd7e8098102544a2f7a595351d063a7ebaeca18ed4901df5ec2679da2330ba8c0db2c820721d4cbb3e23d817ba22fec6d058957930e229f44fa71a684 + languageName: node + linkType: hard + +"@iarna/toml@npm:^2.2.3": + version: 2.2.5 + resolution: "@iarna/toml@npm:2.2.5" + checksum: 10c0/d095381ad4554aca233b7cf5a91f243ef619e5e15efd3157bc640feac320545450d14b394aebbf6f02a2047437ced778ae598d5879a995441ab7b6c0b2c2f201 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@mapbox/node-pre-gyp@npm:^1.0.11": + version: 1.0.11 + resolution: "@mapbox/node-pre-gyp@npm:1.0.11" + dependencies: + detect-libc: "npm:^2.0.0" + https-proxy-agent: "npm:^5.0.0" + make-dir: "npm:^3.1.0" + node-fetch: "npm:^2.6.7" + nopt: "npm:^5.0.0" + npmlog: "npm:^5.0.1" + rimraf: "npm:^3.0.2" + semver: "npm:^7.3.5" + tar: "npm:^6.1.11" + bin: + node-pre-gyp: bin/node-pre-gyp + checksum: 10c0/2b24b93c31beca1c91336fa3b3769fda98e202fb7f9771f0f4062588d36dcc30fcf8118c36aa747fa7f7610d8cf601872bdaaf62ce7822bb08b545d1bbe086cc + languageName: node + linkType: hard + +"@noble/hashes@npm:^1, @noble/hashes@npm:^1.0.0": + version: 1.5.0 + resolution: "@noble/hashes@npm:1.5.0" + checksum: 10c0/1b46539695fbfe4477c0822d90c881a04d4fa2921c08c552375b444a48cac9930cb1ee68de0a3c7859e676554d0f3771999716606dc4d8f826e414c11692cdd9 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 10c0/a83343a468ff5b5ec6bff36fd788a64c839e48a07ff9f4f813564f58caf44d011cd6504ed2147bf34835bd7a7dd2107052af755961c6b098fd8902b4f6500d0f + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 10c0/eec925e681081af190b8ee231f9bad3101e189abbc182ff279da6b531e7dbd2a56f1f306f37a80b1be9e00aa2d271690d08dcc5f326f71c9eed8546675c8caf6 + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 10c0/26ae337c5659e41f091606d16465bbcc1df1f37cc1ed462438b1f67be0c1e28dfb2ca9f294f39100c52161aef82edf758c95d6d75650a1ddf31f7ddee1440b43 + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 10c0/1eb0a75180e5206d1033e4138212a8c7089a3d418c6dfa5a6ce42e593a4ae2e5892c4ef7421f38092badba4040ea6a45f0928869989411001d8c1018ea9a6e70 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.1" + "@protobufjs/inquire": "npm:^1.1.0" + checksum: 10c0/cda6a3dc2d50a182c5865b160f72077aac197046600091dbb005dd0a66db9cce3c5eaed6d470ac8ed49d7bcbeef6ee5f0bc288db5ff9a70cbd003e5909065233 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 10c0/18f2bdede76ffcf0170708af15c9c9db6259b771e6b84c51b06df34a9c339dbbeec267d14ce0bddd20acc142b1d980d983d31434398df7f98eb0c94a0eb79069 + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: 10c0/64372482efcba1fb4d166a2664a6395fa978b557803857c9c03500e0ac1013eb4b1aacc9ed851dd5fc22f81583670b4f4431bae186f3373fedcfde863ef5921a + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 10c0/cece0a938e7f5dfd2fa03f8c14f2f1cf8b0d6e13ac7326ff4c96ea311effd5fb7ae0bba754fbf505312af2e38500250c90e68506b97c02360a43793d88a0d8b4 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: 10c0/eda2718b7f222ac6e6ad36f758a92ef90d26526026a19f4f17f668f45e0306a5bd734def3f48f51f8134ae0978b6262a5c517c08b115a551756d1a3aadfcf038 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: 10c0/a3fe31fe3fa29aa3349e2e04ee13dc170cc6af7c23d92ad49e3eeaf79b9766264544d3da824dba93b7855bd6a2982fb40032ef40693da98a136d835752beb487 + languageName: node + linkType: hard + +"@rollup/plugin-commonjs@npm:^19.0.0": + version: 19.0.2 + resolution: "@rollup/plugin-commonjs@npm:19.0.2" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + commondir: "npm:^1.0.1" + estree-walker: "npm:^2.0.1" + glob: "npm:^7.1.6" + is-reference: "npm:^1.2.1" + magic-string: "npm:^0.25.7" + resolve: "npm:^1.17.0" + peerDependencies: + rollup: ^2.38.3 + checksum: 10c0/9adccf77ad835cbe565da4385212f1e54c3e0dca2be174b5c2cfe89cfaeb240f42c7673e97e49b21b7c66ed901cc1c711552b6727f60b43a953ce996eb2868a7 + languageName: node + linkType: hard + +"@rollup/plugin-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/9400c431b5e0cf3088ba2eb2d038809a2b0fb2a84ed004997da85582f48cd64958ed3168893c4f2c8109e38652400ed68282d0c92bf8ec07a3b2ef2e1ceab0b7 + languageName: node + linkType: hard + +"@rollup/plugin-node-resolve@npm:^13.0.0": + version: 13.3.0 + resolution: "@rollup/plugin-node-resolve@npm:13.3.0" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + "@types/resolve": "npm:1.17.1" + deepmerge: "npm:^4.2.2" + is-builtin-module: "npm:^3.1.0" + is-module: "npm:^1.0.0" + resolve: "npm:^1.19.0" + peerDependencies: + rollup: ^2.42.0 + checksum: 10c0/6caa32a8304a20f1c9953111b25e9543f4de7d254958d81ce0158ad909e4493946bc2060c4ace23d9748b560ebc84c920ee7bc1b7d50dbf8ba852ef13c91af58 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^3.1.0": + version: 3.1.0 + resolution: "@rollup/pluginutils@npm:3.1.0" + dependencies: + "@types/estree": "npm:0.0.39" + estree-walker: "npm:^1.0.1" + picomatch: "npm:^2.2.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0 + checksum: 10c0/7151753160d15ba2b259461a6c25b3932150994ea52dba8fd3144f634c7647c2e56733d986e2c15de67c4d96a9ee7d6278efa6d2e626a7169898fd64adc0f90c + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^4.0.0": + version: 4.2.1 + resolution: "@rollup/pluginutils@npm:4.2.1" + dependencies: + estree-walker: "npm:^2.0.1" + picomatch: "npm:^2.2.2" + checksum: 10c0/3ee56b2c8f1ed8dfd0a92631da1af3a2dfdd0321948f089b3752b4de1b54dc5076701eadd0e5fc18bd191b77af594ac1db6279e83951238ba16bf8a414c64c48 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.1.0": + version: 5.1.3 + resolution: "@rollup/pluginutils@npm:5.1.3" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^4.0.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/ba46ad588733fb01d184ee3bc7a127d626158bc840b5874a94c129ff62689d12f16f537530709c54da6f3b71f67d705c4e09235b1dc9542e9d47ee8f2d0b8b9e + languageName: node + linkType: hard + +"@sec-ant/readable-stream@npm:^0.4.1": + version: 0.4.1 + resolution: "@sec-ant/readable-stream@npm:0.4.1" + checksum: 10c0/64e9e9cf161e848067a5bf60cdc04d18495dc28bb63a8d9f8993e4dd99b91ad34e4b563c85de17d91ffb177ec17a0664991d2e115f6543e73236a906068987af + languageName: node + linkType: hard + +"@sindresorhus/merge-streams@npm:^2.1.0": + version: 2.3.0 + resolution: "@sindresorhus/merge-streams@npm:2.3.0" + checksum: 10c0/69ee906f3125fb2c6bb6ec5cdd84e8827d93b49b3892bce8b62267116cc7e197b5cccf20c160a1d32c26014ecd14470a72a5e3ee37a58f1d6dadc0db1ccf3894 + languageName: node + linkType: hard + +"@sindresorhus/merge-streams@npm:^4.0.0": + version: 4.0.0 + resolution: "@sindresorhus/merge-streams@npm:4.0.0" + checksum: 10c0/482ee543629aa1933b332f811a1ae805a213681ecdd98c042b1c1b89387df63e7812248bb4df3910b02b3cc5589d3d73e4393f30e197c9dde18046ccd471fc6b + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + languageName: node + linkType: hard + +"@types/estree@npm:0.0.39": + version: 0.0.39 + resolution: "@types/estree@npm:0.0.39" + checksum: 10c0/f0af6c95ac1988c4827964bd9d3b51d24da442e2188943f6dfcb1e1559103d5d024d564b2e9d3f84c53714a02a0a7435c7441138eb63d9af5de4dfc66cdc0d92 + languageName: node + linkType: hard + +"@types/long@npm:^4.0.1": + version: 4.0.2 + resolution: "@types/long@npm:4.0.2" + checksum: 10c0/42ec66ade1f72ff9d143c5a519a65efc7c1c77be7b1ac5455c530ae9acd87baba065542f8847522af2e3ace2cc999f3ad464ef86e6b7352eece34daf88f8c924 + languageName: node + linkType: hard + +"@types/node@npm:*, @types/node@npm:>=13.7.0": + version: 22.9.0 + resolution: "@types/node@npm:22.9.0" + dependencies: + undici-types: "npm:~6.19.8" + checksum: 10c0/3f46cbe0a49bab4ba30494025e4c8a6e699b98ac922857aa1f0209ce11a1313ee46e6808b8f13fe5b8b960a9d7796b77c8d542ad4e9810e85ef897d5593b5d51 + languageName: node + linkType: hard + +"@types/resolve@npm:1.17.1": + version: 1.17.1 + resolution: "@types/resolve@npm:1.17.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/6eeb9c27d99bf4b393bf168d43208f63e78cefca5644662a0bdb2bdbf8352386f4f3aca66add138fc41bce5f66fd48a0de430a1473f11b612fbed0375ae78031 + languageName: node + linkType: hard + +"@types/triple-beam@npm:^1.3.2": + version: 1.3.5 + resolution: "@types/triple-beam@npm:1.3.5" + checksum: 10c0/d5d7f25da612f6d79266f4f1bb9c1ef8f1684e9f60abab251e1261170631062b656ba26ff22631f2760caeafd372abc41e64867cde27fba54fafb73a35b9056a + languageName: node + linkType: hard + +"@vercel/nft@npm:^0.27.5": + version: 0.27.6 + resolution: "@vercel/nft@npm:0.27.6" + dependencies: + "@mapbox/node-pre-gyp": "npm:^1.0.11" + "@rollup/pluginutils": "npm:^4.0.0" + acorn: "npm:^8.6.0" + acorn-import-attributes: "npm:^1.9.5" + async-sema: "npm:^3.1.1" + bindings: "npm:^1.4.0" + estree-walker: "npm:2.0.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + micromatch: "npm:^4.0.8" + node-gyp-build: "npm:^4.2.2" + resolve-from: "npm:^5.0.0" + bin: + nft: out/cli.js + checksum: 10c0/d0b68a7290369a35a4c0a9b8233a59d3f35cf84b8047d12466242d6c4e77ec8865be5cf6cff982e486f74de0405992bbee69f9740152c3027072c1c3de0cf91e + languageName: node + linkType: hard + +"abbrev@npm:1": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"acorn-import-attributes@npm:^1.9.5": + version: 1.9.5 + resolution: "acorn-import-attributes@npm:1.9.5" + peerDependencies: + acorn: ^8 + checksum: 10c0/5926eaaead2326d5a86f322ff1b617b0f698aa61dc719a5baa0e9d955c9885cc71febac3fb5bacff71bbf2c4f9c12db2056883c68c53eb962c048b952e1e013d + languageName: node + linkType: hard + +"acorn-walk@npm:^8.3.4": + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 + languageName: node + linkType: hard + +"acorn@npm:^8.11.0, acorn@npm:^8.13.0, acorn@npm:^8.2.4, acorn@npm:^8.6.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 + languageName: node + linkType: hard + +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: "npm:4" + checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"agoric@npm:dev": + version: 0.21.2-dev-493b453.0 + resolution: "agoric@npm:0.21.2-dev-493b453.0" + dependencies: + "@agoric/access-token": "npm:0.4.22-dev-493b453.0+493b453" + "@agoric/cache": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/casting": "npm:0.4.3-dev-493b453.0+493b453" + "@agoric/client-utils": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/cosmic-proto": "npm:0.4.1-dev-493b453.0+493b453" + "@agoric/ertp": "npm:0.16.3-dev-493b453.0+493b453" + "@agoric/governance": "npm:0.10.4-dev-493b453.0+493b453" + "@agoric/inter-protocol": "npm:0.16.2-dev-493b453.0+493b453" + "@agoric/internal": "npm:0.3.3-dev-493b453.0+493b453" + "@agoric/network": "npm:0.1.1-dev-493b453.0+493b453" + "@agoric/smart-wallet": "npm:0.5.4-dev-493b453.0+493b453" + "@agoric/store": "npm:0.9.3-dev-493b453.0+493b453" + "@agoric/swingset-vat": "npm:0.32.3-dev-493b453.0+493b453" + "@agoric/vats": "npm:0.15.2-dev-493b453.0+493b453" + "@agoric/zoe": "npm:0.26.3-dev-493b453.0+493b453" + "@agoric/zone": "npm:0.2.3-dev-493b453.0+493b453" + "@confio/relayer": "npm:^0.11.3" + "@cosmjs/crypto": "npm:^0.32.3" + "@cosmjs/encoding": "npm:^0.32.3" + "@cosmjs/math": "npm:^0.32.3" + "@cosmjs/proto-signing": "npm:^0.32.3" + "@cosmjs/stargate": "npm:^0.32.3" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/captp": "npm:^4.4.2" + "@endo/compartment-mapper": "npm:^1.3.1" + "@endo/env-options": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + "@endo/zip": "npm:^1.0.8" + "@iarna/toml": "npm:^2.2.3" + anylogger: "npm:^0.21.0" + chalk: "npm:^5.2.0" + commander: "npm:^12.1.0" + deterministic-json: "npm:^1.0.5" + esm: "github:agoric-labs/esm#Agoric-built" + inquirer: "npm:^8.2.2" + opener: "npm:^1.5.2" + tmp: "npm:^0.2.1" + ws: "npm:^7.2.0" + bin: + agops: src/bin-agops.js + agoric: src/entrypoint.js + checksum: 10c0/369a423d07746375e2f98d71b8625541a9100837296fc209c9665d85b0e22f05a174e25762479fec5edbb3ba905c5887351af212a26616733e8084bd6c608ab8 + languageName: node + linkType: hard + +"ajv@npm:7.1.1": + version: 7.1.1 + resolution: "ajv@npm:7.1.1" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.2.2" + checksum: 10c0/328a86011a67dc10eff41e3e2ef412f88f5de546ad2288c8a3d2a563c203dd4dd479660c07f99fd9499e36c723afee212704b25f5599815991409528fd638329 + languageName: node + linkType: hard + +"ajv@npm:^8.0.1": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anylogger@npm:^0.21.0": + version: 0.21.0 + resolution: "anylogger@npm:0.21.0" + checksum: 10c0/1ca7fcf5bc2b78d1e1d9b8c8cc7ce50b5c6cc67a8da5a28c9c975b7b46fff255a04abab02de38a5139190c9d8b34b3d6c59af6724521b077f7d7dfbad9b47a9c + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^2.0.0": + version: 2.0.0 + resolution: "are-we-there-yet@npm:2.0.0" + dependencies: + delegates: "npm:^1.0.0" + readable-stream: "npm:^3.6.0" + checksum: 10c0/375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"array-find-index@npm:^1.0.1": + version: 1.0.2 + resolution: "array-find-index@npm:1.0.2" + checksum: 10c0/86b9485c74ddd324feab807e10a6de3f9c1683856267236fac4bb4d4667ada6463e106db3f6c540ae6b720e0442b590ec701d13676df4c6af30ebf4da09b4f57 + languageName: node + linkType: hard + +"arrgv@npm:^1.0.2": + version: 1.0.2 + resolution: "arrgv@npm:1.0.2" + checksum: 10c0/7e6e782e6b749923ac7cbc4048ef6fe0844c4a59bfc8932fcd4c44566ba25eed46501f94dd7cf3c7297da88f3f599ca056bfb77d0c2484aebc92f04239f69124 + languageName: node + linkType: hard + +"arrify@npm:^3.0.0": + version: 3.0.0 + resolution: "arrify@npm:3.0.0" + checksum: 10c0/2e26601b8486f29780f1f70f7ac05a226755814c2a3ab42e196748f650af1dc310cd575a11dd4b9841c70fd7460b2dd2b8fe6fb7a3375878e2660706efafa58e + languageName: node + linkType: hard + +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 10c0/f63d439cc383db1b9c5c6080d1e240bd14dae745f15d11ec5da863e182bbeca70df6c8191cffef5deba0b566ef98834610a68be79ac6379c95eeb26e1b310e25 + languageName: node + linkType: hard + +"async-sema@npm:^3.1.1": + version: 3.1.1 + resolution: "async-sema@npm:3.1.1" + checksum: 10c0/a16da9f7f2dbdd00a969bf264b7ad331b59df3eac2b38f529b881c5cc8662594e68ed096d927ec2aabdc13454379cdc6d677bcdb0a3d2db338fb4be17957832b + languageName: node + linkType: hard + +"async@npm:^3.1.0": + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"ava@npm:^6.1.2": + version: 6.2.0 + resolution: "ava@npm:6.2.0" + dependencies: + "@vercel/nft": "npm:^0.27.5" + acorn: "npm:^8.13.0" + acorn-walk: "npm:^8.3.4" + ansi-styles: "npm:^6.2.1" + arrgv: "npm:^1.0.2" + arrify: "npm:^3.0.0" + callsites: "npm:^4.2.0" + cbor: "npm:^9.0.2" + chalk: "npm:^5.3.0" + chunkd: "npm:^2.0.1" + ci-info: "npm:^4.0.0" + ci-parallel-vars: "npm:^1.0.1" + cli-truncate: "npm:^4.0.0" + code-excerpt: "npm:^4.0.0" + common-path-prefix: "npm:^3.0.0" + concordance: "npm:^5.0.4" + currently-unhandled: "npm:^0.4.1" + debug: "npm:^4.3.7" + emittery: "npm:^1.0.3" + figures: "npm:^6.1.0" + globby: "npm:^14.0.2" + ignore-by-default: "npm:^2.1.0" + indent-string: "npm:^5.0.0" + is-plain-object: "npm:^5.0.0" + is-promise: "npm:^4.0.0" + matcher: "npm:^5.0.0" + memoize: "npm:^10.0.0" + ms: "npm:^2.1.3" + p-map: "npm:^7.0.2" + package-config: "npm:^5.0.0" + picomatch: "npm:^4.0.2" + plur: "npm:^5.1.0" + pretty-ms: "npm:^9.1.0" + resolve-cwd: "npm:^3.0.0" + stack-utils: "npm:^2.0.6" + strip-ansi: "npm:^7.1.0" + supertap: "npm:^3.0.1" + temp-dir: "npm:^3.0.0" + write-file-atomic: "npm:^6.0.0" + yargs: "npm:^17.7.2" + peerDependencies: + "@ava/typescript": "*" + peerDependenciesMeta: + "@ava/typescript": + optional: true + bin: + ava: entrypoints/cli.mjs + checksum: 10c0/25a37413c9ee1b5322dc5a266f546236ea4b52e5c04ae4b52a7b26db9263eebe2dbcda687bf4d464867e558e9148e4567aa09a7ec91d46e3218ab93204e3c653 + languageName: node + linkType: hard + +"axios@npm:^1.6.0, axios@npm:^1.6.7": + version: 1.7.7 + resolution: "axios@npm:1.7.7" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/4499efc89e86b0b49ffddc018798de05fab26e3bf57913818266be73279a6418c3ce8f9e934c7d2d707ab8c095e837fc6c90608fb7715b94d357720b5f568af7 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"bech32@npm:^1.1.4": + version: 1.1.4 + resolution: "bech32@npm:1.1.4" + checksum: 10c0/5f62ca47b8df99ace9c0e0d8deb36a919d91bf40066700aaa9920a45f86bb10eb56d537d559416fd8703aa0fb60dddb642e58f049701e7291df678b2033e5ee5 + languageName: node + linkType: hard + +"better-sqlite3@npm:^9.1.1, better-sqlite3@npm:^9.6.0": + version: 9.6.0 + resolution: "better-sqlite3@npm:9.6.0" + dependencies: + bindings: "npm:^1.5.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + checksum: 10c0/8db9b38f414e26a56d4c40fc16e94a253118491dae0e2c054338a9e470f1a883c7eb4cb330f2f5737db30f704d4f2e697c59071ca04e03364ee9fe04375aa9c8 + languageName: node + linkType: hard + +"bindings@npm:^1.4.0, bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: "npm:1.0.0" + checksum: 10c0/3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba + languageName: node + linkType: hard + +"bintrees@npm:1.0.2": + version: 1.0.2 + resolution: "bintrees@npm:1.0.2" + checksum: 10c0/132944b20c93c1a8f97bf8aa25980a76c6eb4291b7f2df2dbcd01cb5b417c287d3ee0847c7260c9f05f3d5a4233aaa03dec95114e97f308abe9cc3f72bed4a44 + languageName: node + linkType: hard + +"bl@npm:^4.0.3, bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10c0/02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f + languageName: node + linkType: hard + +"blueimp-md5@npm:^2.10.0": + version: 2.19.0 + resolution: "blueimp-md5@npm:2.19.0" + checksum: 10c0/85d04343537dd99a288c62450341dcce7380d3454c81f8e5a971ddd80307d6f9ef51b5b92ad7d48aaaa92fd6d3a1f6b2f4fada068faae646887f7bfabc17a346 + languageName: node + linkType: hard + +"bn.js@npm:^4.11.9": + version: 4.12.1 + resolution: "bn.js@npm:4.12.1" + checksum: 10c0/b7f37a0cd5e4b79142b6f4292d518b416be34ae55d6dd6b0f66f96550c8083a50ffbbf8bda8d0ab471158cb81aa74ea4ee58fe33c7802e4a30b13810e98df116 + languageName: node + linkType: hard + +"bn.js@npm:^5.2.0": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 10c0/bed3d8bd34ec89dbcf9f20f88bd7d4a49c160fda3b561c7bb227501f974d3e435a48fb9b61bc3de304acab9215a3bda0803f7017ffb4d0016a0c3a740a283caa + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 10c0/6f366d7c4990f82c366e3878492ba9a372a73163c09871e80d82fb4ae0d23f9f8924cb8a662330308206e6b3b76ba1d528b4601c9ef73c2166b440b2ea3b7571 + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: 10c0/2cb3448b4f7306dc853632a4fcddc95e8d4e4b9868c139400027b71938fc6806d4ff44007deffb362ac85724bd40c2c6452fb6a0aa4531650eeddb98d8e5ee8a + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f + languageName: node + linkType: hard + +"call-bind@npm:^1.0.5": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.1" + checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d + languageName: node + linkType: hard + +"callsites@npm:^4.2.0": + version: 4.2.0 + resolution: "callsites@npm:4.2.0" + checksum: 10c0/8f7e269ec09fc0946bb22d838a8bc7932e1909ab4a833b964749f4d0e8bdeaa1f253287c4f911f61781f09620b6925ccd19a5ea4897489c4e59442c660c312a3 + languageName: node + linkType: hard + +"cbor@npm:^9.0.2": + version: 9.0.2 + resolution: "cbor@npm:9.0.2" + dependencies: + nofilter: "npm:^3.1.0" + checksum: 10c0/709d4378067e663107b3d63a02d123a7b33e28946b4c5cc40c102f2f0ba13b072a79adc4369bb87a4e743399fce45deec30463fc84d363ab7cb39192d0fe5f30 + languageName: node + linkType: hard + +"chalk@npm:^4.1.0, chalk@npm:^4.1.1": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chalk@npm:^5.2.0, chalk@npm:^5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 10c0/8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"chunkd@npm:^2.0.1": + version: 2.0.1 + resolution: "chunkd@npm:2.0.1" + checksum: 10c0/4e0c5aac6048ecedfa4cd0a5f6c4f010c70a7b7645aeca7bfeb47cb0733c3463054f0ced3f2667b2e0e67edd75d68a8e05481b01115ba3f8a952a93026254504 + languageName: node + linkType: hard + +"ci-info@npm:^4.0.0": + version: 4.1.0 + resolution: "ci-info@npm:4.1.0" + checksum: 10c0/0f969ce32a974c542bc8abe4454b220d9d9323bb9415054c92a900faa5fdda0bb222eda68c490127c1d78503510d46b6aca614ecaba5a60515b8ac7e170119e6 + languageName: node + linkType: hard + +"ci-parallel-vars@npm:^1.0.1": + version: 1.0.1 + resolution: "ci-parallel-vars@npm:1.0.1" + checksum: 10c0/80952f699cbbc146092b077b4f3e28d085620eb4e6be37f069b4dbb3db0ee70e8eec3beef4ebe70ff60631e9fc743b9d0869678489f167442cac08b260e5ac08 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: "npm:^3.1.0" + checksum: 10c0/92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 10c0/907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 + languageName: node + linkType: hard + +"cli-truncate@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-truncate@npm:4.0.0" + dependencies: + slice-ansi: "npm:^5.0.0" + string-width: "npm:^7.0.0" + checksum: 10c0/d7f0b73e3d9b88cb496e6c086df7410b541b56a43d18ade6a573c9c18bd001b1c3fba1ad578f741a4218fdc794d042385f8ac02c25e1c295a2d8b9f3cb86eb4c + languageName: node + linkType: hard + +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 10c0/125a62810e59a2564268c80fdff56c23159a7690c003e34aeb2e68497dccff26911998ff49c33916fcfdf71e824322cc3953e3f7b48b27267c7a062c81348a9a + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: 10c0/2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b + languageName: node + linkType: hard + +"code-excerpt@npm:^4.0.0": + version: 4.0.0 + resolution: "code-excerpt@npm:4.0.0" + dependencies: + convert-to-spaces: "npm:^2.0.1" + checksum: 10c0/b6c5a06e039cecd2ab6a0e10ee0831de8362107d1f298ca3558b5f9004cb8e0260b02dd6c07f57b9a0e346c76864d2873311ee1989809fdeb05bd5fbbadde773 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.3": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"color-string@npm:^1.6.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: "npm:^1.0.0" + simple-swizzle: "npm:^0.2.2" + checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 + languageName: node + linkType: hard + +"color-support@npm:^1.1.2": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 + languageName: node + linkType: hard + +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.3" + color-string: "npm:^1.6.0" + checksum: 10c0/39345d55825884c32a88b95127d417a2c24681d8b57069413596d9fcbb721459ef9d9ec24ce3e65527b5373ce171b73e38dbcd9c830a52a6487e7f37bf00e83c + languageName: node + linkType: hard + +"colorspace@npm:1.1.x": + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" + dependencies: + color: "npm:^3.1.3" + text-hex: "npm:1.0.x" + checksum: 10c0/af5f91ff7f8e146b96e439ac20ed79b197210193bde721b47380a75b21751d90fa56390c773bb67c0aedd34ff85091883a437ab56861c779bd507d639ba7e123 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:7.1.0": + version: 7.1.0 + resolution: "commander@npm:7.1.0" + checksum: 10c0/1c114cc2e0c7c980068d7f2472f3fc9129ea5d6f2f0a8699671afe5a44a51d5707a6c73daff1aaa919424284dea9fca4017307d30647935a1116518699d54c9d + languageName: node + linkType: hard + +"commander@npm:^12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 + languageName: node + linkType: hard + +"common-path-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "common-path-prefix@npm:3.0.0" + checksum: 10c0/c4a74294e1b1570f4a8ab435285d185a03976c323caa16359053e749db4fde44e3e6586c29cd051100335e11895767cbbd27ea389108e327d62f38daf4548fdb + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"concordance@npm:^5.0.4": + version: 5.0.4 + resolution: "concordance@npm:5.0.4" + dependencies: + date-time: "npm:^3.1.0" + esutils: "npm:^2.0.3" + fast-diff: "npm:^1.2.0" + js-string-escape: "npm:^1.0.1" + lodash: "npm:^4.17.15" + md5-hex: "npm:^3.0.1" + semver: "npm:^7.3.2" + well-known-symbols: "npm:^2.0.0" + checksum: 10c0/59b440f330df3a7c9aa148ba588b3e99aed86acab225b4f01ffcea34ace4cf11f817e31153254e8f38ed48508998dad40b9106951a743c334d751f7ab21afb8a + languageName: node + linkType: hard + +"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 + languageName: node + linkType: hard + +"convert-to-spaces@npm:^2.0.1": + version: 2.0.1 + resolution: "convert-to-spaces@npm:2.0.1" + checksum: 10c0/d90aa0e3b6a27f9d5265a8d32def3c5c855b3e823a9db1f26d772f8146d6b91020a2fdfd905ce8048a73fad3aaf836fef8188c67602c374405e2ae8396c4ac46 + languageName: node + linkType: hard + +"cosmjs-types@npm:^0.9.0": + version: 0.9.0 + resolution: "cosmjs-types@npm:0.9.0" + checksum: 10c0/bc20f4293fb34629d7c5f96bafe533987f753df957ff68eb078d0128ae5a418320cb945024441769a07bb9bc5dde9d22b972fd40d485933e5706ea191c43727b + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": + version: 7.0.5 + resolution: "cross-spawn@npm:7.0.5" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/aa82ce7ac0814a27e6f2b738c5a7cf1fa21a3558a1e42df449fc96541ba3ba731e4d3ecffa4435348808a86212f287c6f20a1ee551ef1ff95d01cfec5f434944 + languageName: node + linkType: hard + +"currently-unhandled@npm:^0.4.1": + version: 0.4.1 + resolution: "currently-unhandled@npm:0.4.1" + dependencies: + array-find-index: "npm:^1.0.1" + checksum: 10c0/32d197689ec32f035910202c1abb0dc6424dce01d7b51779c685119b380d98535c110ffff67a262fc7e367612a7dfd30d3d3055f9a6634b5a9dd1302de7ef11c + languageName: node + linkType: hard + +"date-time@npm:^3.1.0": + version: 3.1.0 + resolution: "date-time@npm:3.1.0" + dependencies: + time-zone: "npm:^1.0.0" + checksum: 10c0/aa3e2e930d74b0b9e90f69de7a16d3376e30f21f1f4ce9a2311d8fec32d760e776efea752dafad0ce188187265235229013036202be053fc2d7979813bfb6ded + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.3.7": + version: 4.3.7 + resolution: "debug@npm:4.3.7" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: "npm:^1.0.2" + checksum: 10c0/9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0": + version: 2.0.3 + resolution: "detect-libc@npm:2.0.3" + checksum: 10c0/88095bda8f90220c95f162bf92cad70bd0e424913e655c20578600e35b91edc261af27531cf160a331e185c0ced93944bc7e09939143225f56312d7fd800fdb7 + languageName: node + linkType: hard + +"deterministic-json@npm:^1.0.5": + version: 1.0.5 + resolution: "deterministic-json@npm:1.0.5" + dependencies: + json-stable-stringify: "npm:^1.0.1" + checksum: 10c0/e29679601cd3b05c73665529dcd0132b48797fd7dfbac6793238a479e82b5f3905114316fbb316332da58b4497e35df9aea77b41ff92fd74fe298a6f31b93d40 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"elliptic@npm:^6.5.4": + version: 6.6.1 + resolution: "elliptic@npm:6.6.1" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/8b24ef782eec8b472053793ea1e91ae6bee41afffdfcb78a81c0a53b191e715cbe1292aa07165958a9bbe675bd0955142560b1a007ffce7d6c765bcaf951a867 + languageName: node + linkType: hard + +"emittery@npm:^1.0.3": + version: 1.0.3 + resolution: "emittery@npm:1.0.3" + checksum: 10c0/91605d044f3891dd1f8ab731aeb94b520488b21e707f7064dcbcf5303bac3b4e7133dfa23c343ede1fc970340bd78a9b1aed522b805bc15104606bba630dd71e + languageName: node + linkType: hard + +"emoji-regex@npm:^10.3.0": + version: 10.4.0 + resolution: "emoji-regex@npm:10.4.0" + checksum: 10c0/a3fcedfc58bfcce21a05a5f36a529d81e88d602100145fcca3dc6f795e3c8acc4fc18fe773fbf9b6d6e9371205edb3afa2668ec3473fa2aa7fd47d2a9d46482d + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"enabled@npm:2.0.x": + version: 2.0.0 + resolution: "enabled@npm:2.0.0" + checksum: 10c0/3b2c2af9bc7f8b9e291610f2dde4a75cf6ee52a68f4dd585482fbdf9a55d65388940e024e56d40bb03e05ef6671f5f53021fa8b72a20e954d7066ec28166713f + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/6bf3191feb7ea2ebda48b577f69bdfac7a2b3c9bcf97307f55fd6ef1bbca0b49f0c219a935aca506c993d8c5d8bddd937766cb760cd5e5a1071351f2df9f9aa4 + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"esbuild@npm:~0.23.0": + version: 0.23.1 + resolution: "esbuild@npm:0.23.1" + dependencies: + "@esbuild/aix-ppc64": "npm:0.23.1" + "@esbuild/android-arm": "npm:0.23.1" + "@esbuild/android-arm64": "npm:0.23.1" + "@esbuild/android-x64": "npm:0.23.1" + "@esbuild/darwin-arm64": "npm:0.23.1" + "@esbuild/darwin-x64": "npm:0.23.1" + "@esbuild/freebsd-arm64": "npm:0.23.1" + "@esbuild/freebsd-x64": "npm:0.23.1" + "@esbuild/linux-arm": "npm:0.23.1" + "@esbuild/linux-arm64": "npm:0.23.1" + "@esbuild/linux-ia32": "npm:0.23.1" + "@esbuild/linux-loong64": "npm:0.23.1" + "@esbuild/linux-mips64el": "npm:0.23.1" + "@esbuild/linux-ppc64": "npm:0.23.1" + "@esbuild/linux-riscv64": "npm:0.23.1" + "@esbuild/linux-s390x": "npm:0.23.1" + "@esbuild/linux-x64": "npm:0.23.1" + "@esbuild/netbsd-x64": "npm:0.23.1" + "@esbuild/openbsd-arm64": "npm:0.23.1" + "@esbuild/openbsd-x64": "npm:0.23.1" + "@esbuild/sunos-x64": "npm:0.23.1" + "@esbuild/win32-arm64": "npm:0.23.1" + "@esbuild/win32-ia32": "npm:0.23.1" + "@esbuild/win32-x64": "npm:0.23.1" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/08c2ed1105cc3c5e3a24a771e35532fe6089dd24a39c10097899072cef4a99f20860e41e9294e000d86380f353b04d8c50af482483d7f69f5208481cce61eec7 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 + languageName: node + linkType: hard + +"esm@github:agoric-labs/esm#Agoric-built": + version: 3.2.25 + resolution: "esm@https://github.com/agoric-labs/esm.git#commit=3603726ad4636b2f865f463188fcaade6375638e" + checksum: 10c0/fc1e112a3a681e7b4152d4f5c76dd5aa9e30496d2020490ffa0fb61aaf57d1e12dae0c1074fdd2e0f08949ab2df7e00e750262356781f072e4119955ee10b754 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + +"estree-walker@npm:2.0.2, estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af + languageName: node + linkType: hard + +"estree-walker@npm:^1.0.1": + version: 1.0.1 + resolution: "estree-walker@npm:1.0.1" + checksum: 10c0/fa9e5f8c1bbe8d01e314c0f03067b64a4f22d4c58410fc5237060d0c15b81e58c23921c41acc60abbdab490f1fdfcbd6408ede2d03ca704454272e0244d61a55 + languageName: node + linkType: hard + +"esutils@npm:^2.0.3": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"execa@npm:^9.3.1": + version: 9.5.1 + resolution: "execa@npm:9.5.1" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.3" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^8.0.0" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^6.0.0" + pretty-ms: "npm:^9.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.0.0" + checksum: 10c0/1a628d535c5a088f9e17a735bb3143efc4198095392b319ba877b2975d5c3c57724536dccb6f68f1cd9b3af331c5a9e8c1aeb338d52ab316b1e008ff453374a7 + languageName: node + linkType: hard + +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: "npm:^0.7.0" + iconv-lite: "npm:^0.4.24" + tmp: "npm:^0.0.33" + checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 + languageName: node + linkType: hard + +"fast-check@npm:^3.0.0": + version: 3.23.1 + resolution: "fast-check@npm:3.23.1" + dependencies: + pure-rand: "npm:^6.1.0" + checksum: 10c0/d61ee4a7a2e1abc5126bf2f1894413f532f686b3d1fc15c67fefb60dcca66024934b69a6454d3eba92e6568ac1abbb9882080e212d255865c3b3bbe52c5bf702 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-diff@npm:^1.2.0": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + languageName: node + linkType: hard + +"fast-safe-stringify@npm:2.0.4": + version: 2.0.4 + resolution: "fast-safe-stringify@npm:2.0.4" + checksum: 10c0/5e4fbafe8b8c4a1681c2ab259ed8ce6672fc209683a141876f020c36a2cbec73bfe25c417c269f439797020996d04ed2d7c4c6b2c5cf393d6febbf7f4d8a5f53 + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.1": + version: 3.0.3 + resolution: "fast-uri@npm:3.0.3" + checksum: 10c0/4b2c5ce681a062425eae4f15cdc8fc151fd310b2f69b1f96680677820a8b49c3cd6e80661a406e19d50f0c40a3f8bffdd458791baf66f4a879d80be28e10a320 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 + languageName: node + linkType: hard + +"fecha@npm:^4.2.0": + version: 4.2.3 + resolution: "fecha@npm:4.2.3" + checksum: 10c0/0e895965959cf6a22bb7b00f0bf546f2783836310f510ddf63f463e1518d4c96dec61ab33fdfd8e79a71b4856a7c865478ce2ee8498d560fe125947703c9b1cf + languageName: node + linkType: hard + +"figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 + languageName: node + linkType: hard + +"figures@npm:^6.1.0": + version: 6.1.0 + resolution: "figures@npm:6.1.0" + dependencies: + is-unicode-supported: "npm:^2.0.0" + checksum: 10c0/9159df4264d62ef447a3931537de92f5012210cf5135c35c010df50a2169377581378149abfe1eb238bd6acbba1c0d547b1f18e0af6eee49e30363cedaffcfe4 + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: 10c0/3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up-simple@npm:^1.0.0": + version: 1.0.0 + resolution: "find-up-simple@npm:1.0.0" + checksum: 10c0/de1ad5e55c8c162f5600fe3297bb55a3da5cd9cb8c6755e463ec1d52c4c15a84e312a68397fb5962d13263b3dbd4ea294668c465ccacc41291d7cc97588769f9 + languageName: node + linkType: hard + +"fn.name@npm:1.x.x": + version: 1.1.0 + resolution: "fn.name@npm:1.1.0" + checksum: 10c0/8ad62aa2d4f0b2a76d09dba36cfec61c540c13a0fd72e5d94164e430f987a7ce6a743112bbeb14877c810ef500d1f73d7f56e76d029d2e3413f20d79e3460a9a + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.6": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.1 + resolution: "form-data@npm:4.0.1" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"gauge@npm:^3.0.0": + version: 3.0.2 + resolution: "gauge@npm:3.0.2" + dependencies: + aproba: "npm:^1.0.3 || ^2.0.0" + color-support: "npm:^1.1.2" + console-control-strings: "npm:^1.0.0" + has-unicode: "npm:^2.0.1" + object-assign: "npm:^4.1.1" + signal-exit: "npm:^3.0.0" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + wide-align: "npm:^1.1.2" + checksum: 10c0/75230ccaf216471e31025c7d5fcea1629596ca20792de50c596eb18ffb14d8404f927cd55535aab2eeecd18d1e11bd6f23ec3c2e9878d2dda1dc74bccc34b913 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-east-asian-width@npm:^1.0.0": + version: 1.3.0 + resolution: "get-east-asian-width@npm:1.3.0" + checksum: 10c0/1a049ba697e0f9a4d5514c4623781c5246982bdb61082da6b5ae6c33d838e52ce6726407df285cdbb27ec1908b333cf2820989bd3e986e37bb20979437fdf34b + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.0" + checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7 + languageName: node + linkType: hard + +"get-stream@npm:^9.0.0": + version: 9.0.1 + resolution: "get-stream@npm:9.0.1" + dependencies: + "@sec-ant/readable-stream": "npm:^0.4.1" + is-stream: "npm:^4.0.1" + checksum: 10c0/d70e73857f2eea1826ac570c3a912757dcfbe8a718a033fa0c23e12ac8e7d633195b01710e0559af574cbb5af101009b42df7b6f6b29ceec8dbdf7291931b948 + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.7.5": + version: 4.8.1 + resolution: "get-tsconfig@npm:4.8.1" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/536ee85d202f604f4b5fb6be81bcd6e6d9a96846811e83e9acc6de4a04fb49506edea0e1b8cf1d5ee7af33e469916ec2809d4c5445ab8ae015a7a51fbd1572f9 + languageName: node + linkType: hard + +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.6": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globalthis@npm:^1.0.1": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 + languageName: node + linkType: hard + +"globby@npm:^14.0.2": + version: 14.0.2 + resolution: "globby@npm:14.0.2" + dependencies: + "@sindresorhus/merge-streams": "npm:^2.1.0" + fast-glob: "npm:^3.3.2" + ignore: "npm:^5.2.4" + path-type: "npm:^5.0.0" + slash: "npm:^5.1.0" + unicorn-magic: "npm:^0.1.0" + checksum: 10c0/3f771cd683b8794db1e7ebc8b6b888d43496d93a82aad4e9d974620f578581210b6c5a6e75ea29573ed16a1345222fab6e9b877a8d1ed56eeb147e09f69c6f78 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.1.3" + checksum: 10c0/505c05487f7944c552cee72087bf1567debb470d4355b1335f2c262d218ebbff805cd3715448fe29b4b380bae6912561d0467233e4165830efd28da241418c63 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c + languageName: node + linkType: hard + +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: "npm:^1.0.3" + minimalistic-assert: "npm:^1.0.0" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/f3d9ba31b40257a573f162176ac5930109816036c59a09f901eb2ffd7e5e705c6832bedfff507957125f2086a0ab8f853c0df225642a88bf1fcaea945f20600d + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: "npm:6" + debug: "npm:4" + checksum: 10c0/6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c + languageName: node + linkType: hard + +"human-signals@npm:^8.0.0": + version: 8.0.0 + resolution: "human-signals@npm:8.0.0" + checksum: 10c0/e4dac4f7d3eb791ed04129fc6a85bd454a9102d3e3b76c911d0db7057ebd60b2956b435b5b5712aec18960488ede3c21ef7c56e42cdd70760c0d84d3c05cd92e + languageName: node + linkType: hard + +"iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"ignore-by-default@npm:^2.1.0": + version: 2.1.0 + resolution: "ignore-by-default@npm:2.1.0" + checksum: 10c0/3a6040dac25ed9da39dee73bf1634fdd1e15b0eb7cf52a6bdec81c310565782d8811c104ce40acb3d690d61c5fc38a91c78e6baee830a8a2232424dbc6b66981 + languageName: node + linkType: hard + +"ignore@npm:^5.2.4": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"import-meta-resolve@npm:^2.2.1": + version: 2.2.2 + resolution: "import-meta-resolve@npm:2.2.2" + checksum: 10c0/80873aebf0d2a66e824e278fb6cbb16a6660f86df49b367404e5de80928720ecb44f643243b46dc5c5fae506abb666ef54d6f281b45ee0f1034951acb2261eb5 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: 10c0/8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"inquirer@npm:^8.2.2": + version: 8.2.6 + resolution: "inquirer@npm:8.2.6" + dependencies: + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.1.1" + cli-cursor: "npm:^3.1.0" + cli-width: "npm:^3.0.0" + external-editor: "npm:^3.0.3" + figures: "npm:^3.0.0" + lodash: "npm:^4.17.21" + mute-stream: "npm:0.0.8" + ora: "npm:^5.4.1" + run-async: "npm:^2.4.0" + rxjs: "npm:^7.5.5" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + through: "npm:^2.3.6" + wrap-ansi: "npm:^6.0.1" + checksum: 10c0/eb5724de1778265323f3a68c80acfa899378cb43c24cdcb58661386500e5696b6b0b6c700e046b7aa767fe7b4823c6f04e6ddc268173e3f84116112529016296 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"irregular-plurals@npm:^3.3.0": + version: 3.5.0 + resolution: "irregular-plurals@npm:3.5.0" + checksum: 10c0/7c033bbe7325e5a6e0a26949cc6863b6ce273403d4cd5b93bd99b33fecb6605b0884097c4259c23ed0c52c2133bf7d1cdcdd7a0630e8c325161fe269b3447918 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 + languageName: node + linkType: hard + +"is-builtin-module@npm:^3.1.0": + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" + dependencies: + builtin-modules: "npm:^3.3.0" + checksum: 10c0/5a66937a03f3b18803381518f0ef679752ac18cdb7dd53b5e23ee8df8d440558737bd8dcc04d2aae555909d2ecb4a81b5c0d334d119402584b61e6a003e31af1 + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0": + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/53432f10c69c40bfd2fa8914133a68709ff9498c86c3bf5fca3cdf3145a56fd2168cbf4a43b29843a6202a120a5f9c5ffba0a4322e1e3441739bc0b641682612 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 10c0/df2a717e813567db0f659c306d61f2f804d480752526886954a2a3e2246c7745fd07a52b5fecf2b68caf0a6c79dcdace6166fdf29cc76ed9975cc334f0a018b8 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 10c0/dd47904dbf286cd20aa58c5192161be1a67138485b9836d5a70433b21a45442e9611b8498b8ab1f839fc962c7620667a50535fdfb4a6bc7989b8858645c06b4d + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-module@npm:^1.0.0": + version: 1.0.0 + resolution: "is-module@npm:1.0.0" + checksum: 10c0/795a3914bcae7c26a1c23a1e5574c42eac13429625045737bf3e324ce865c0601d61aee7a5afbca1bee8cb300c7d9647e7dc98860c9bdbc3b7fdc51d8ac0bffc + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 10c0/32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c + languageName: node + linkType: hard + +"is-promise@npm:^4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: 10c0/ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503 + languageName: node + linkType: hard + +"is-reference@npm:^1.2.1": + version: 1.2.1 + resolution: "is-reference@npm:1.2.1" + dependencies: + "@types/estree": "npm:*" + checksum: 10c0/7dc819fc8de7790264a0a5d531164f9f5b9ef5aa1cd05f35322d14db39c8a2ec78fd5d4bf57f9789f3ddd2b3abeea7728432b759636157a42db12a9e8c3b549b + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + +"is-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "is-stream@npm:4.0.1" + checksum: 10c0/2706c7f19b851327ba374687bc4a3940805e14ca496dc672b9629e744d143b1ad9c6f1b162dece81c7bfbc0f83b32b61ccc19ad2e05aad2dd7af347408f60c7f + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: 10c0/00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^2.0.0": + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: 10c0/a0f53e9a7c1fdbcf2d2ef6e40d4736fdffff1c9f8944c75e15425118ff3610172c87bf7bc6c34d3903b04be59790bb2212ddbe21ee65b5a97030fc50370545a5 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: 10c0/7cb90dc2f0eb409825558982fb15d7c1d757a88595efbab879592f9d2b63820d6bbfb5571ab8abe36c715946e165a413a99f6aafd9f40ab1f514d73487bc9996 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jessie.js@npm:^0.3.4": + version: 0.3.4 + resolution: "jessie.js@npm:0.3.4" + dependencies: + "@endo/far": "npm:^1.0.0" + checksum: 10c0/853ab3f8a0e30df11742882f5e11479d1303033a5a203a247d8ffbf4c6f3f3d4bcbefa53084ae4632e6ab106e348f23dc988280486cbeaaf5d16487fa3d40e96 + languageName: node + linkType: hard + +"js-string-escape@npm:^1.0.1": + version: 1.0.1 + resolution: "js-string-escape@npm:1.0.1" + checksum: 10c0/2c33b9ff1ba6b84681c51ca0997e7d5a1639813c95d5b61cb7ad47e55cc28fa4a0b1935c3d218710d8e6bcee5d0cd8c44755231e3a4e45fc604534d9595a3628 + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:4.0.0": + version: 4.0.0 + resolution: "js-yaml@npm:4.0.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/ef8489b87d9796b45df9f0bf3eefbb343b5063e39a9911d7b8ddbd4518cafaf73b49150d1f5865f54ee68719642ff0ab86110b9a332ff88bb05cd3bcf3039de1 + languageName: node + linkType: hard + +"js-yaml@npm:^3.14.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"json-stable-stringify@npm:^1.0.1": + version: 1.1.1 + resolution: "json-stable-stringify@npm:1.1.1" + dependencies: + call-bind: "npm:^1.0.5" + isarray: "npm:^2.0.5" + jsonify: "npm:^0.0.1" + object-keys: "npm:^1.1.1" + checksum: 10c0/3801e3eeccbd030afb970f54bea690a079cfea7d9ed206a1b17ca9367f4b7772c764bf77a48f03e56b50e5f7ee7d11c52339fe20d8d7ccead003e4ca69e4cfde + languageName: node + linkType: hard + +"jsonify@npm:^0.0.1": + version: 0.0.1 + resolution: "jsonify@npm:0.0.1" + checksum: 10c0/7f5499cdd59a0967ed35bda48b7cec43d850bbc8fb955cdd3a1717bb0efadbe300724d5646de765bb7a99fc1c3ab06eb80d93503c6faaf99b4ff50a3326692f6 + languageName: node + linkType: hard + +"kuler@npm:^2.0.0": + version: 2.0.0 + resolution: "kuler@npm:2.0.0" + checksum: 10c0/0a4e99d92ca373f8f74d1dc37931909c4d0d82aebc94cf2ba265771160fc12c8df34eaaac80805efbda367e2795cb1f1dd4c3d404b6b1cf38aec94035b503d2d + languageName: node + linkType: hard + +"libsodium-sumo@npm:^0.7.15": + version: 0.7.15 + resolution: "libsodium-sumo@npm:0.7.15" + checksum: 10c0/5a1437ccff03c72669e7b49da702034e171df9ff6a4e65698297ab63ad0bf8f889d3dd51494e29418c643143526d8d7f08cbba3929d220334cddbe3e74a1560e + languageName: node + linkType: hard + +"libsodium-wrappers-sumo@npm:^0.7.11": + version: 0.7.15 + resolution: "libsodium-wrappers-sumo@npm:0.7.15" + dependencies: + libsodium-sumo: "npm:^0.7.15" + checksum: 10c0/6da919a13395346d54f2ce4841adda8feb3fbb8a8c378ec5c93b7e6dc6353b379289349e659f3e017a9f1995ef396bf43f89c7ab4aab4e3b5ed85df62407d810 + languageName: node + linkType: hard + +"load-json-file@npm:^7.0.1": + version: 7.0.1 + resolution: "load-json-file@npm:7.0.1" + checksum: 10c0/7117459608a0b6329c7f78e6e1f541b3162dd901c29dd5af721fec8b270177d2e3d7999c971f344fff04daac368d052732e2c7146014bc84d15e0b636975e19a + languageName: node + linkType: hard + +"lodash.truncate@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.truncate@npm:4.4.2" + checksum: 10c0/4e870d54e8a6c86c8687e057cec4069d2e941446ccab7f40b4d9555fa5872d917d0b6aa73bece7765500a3123f1723bcdba9ae881b679ef120bba9e1a0b0ed70 + languageName: node + linkType: hard + +"lodash@npm:4.17.21, lodash@npm:^4.17.15, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: "npm:^4.1.0" + is-unicode-supported: "npm:^0.1.0" + checksum: 10c0/67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 + languageName: node + linkType: hard + +"logform@npm:^2.2.0, logform@npm:^2.7.0": + version: 2.7.0 + resolution: "logform@npm:2.7.0" + dependencies: + "@colors/colors": "npm:1.6.0" + "@types/triple-beam": "npm:^1.3.2" + fecha: "npm:^4.2.0" + ms: "npm:^2.1.1" + safe-stable-stringify: "npm:^2.3.1" + triple-beam: "npm:^1.3.0" + checksum: 10c0/4789b4b37413c731d1835734cb799240d31b865afde6b7b3e06051d6a4127bfda9e88c99cfbf296d084a315ccbed2647796e6a56b66e725bcb268c586f57558f + languageName: node + linkType: hard + +"long@npm:^4.0.0": + version: 4.0.0 + resolution: "long@npm:4.0.0" + checksum: 10c0/50a6417d15b06104dbe4e3d4a667c39b137f130a9108ea8752b352a4cfae047531a3ac351c181792f3f8768fe17cca6b0f406674a541a86fb638aaac560d83ed + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"magic-string@npm:^0.25.7": + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" + dependencies: + sourcemap-codec: "npm:^1.4.8" + checksum: 10c0/37f5e01a7e8b19a072091f0b45ff127cda676232d373ce2c551a162dd4053c575ec048b9cbb4587a1f03adb6c5d0fd0dd49e8ab070cd2c83a4992b2182d9cb56 + languageName: node + linkType: hard + +"make-dir@npm:^3.1.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: "npm:^6.0.0" + checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + languageName: node + linkType: hard + +"matcher@npm:^5.0.0": + version: 5.0.0 + resolution: "matcher@npm:5.0.0" + dependencies: + escape-string-regexp: "npm:^5.0.0" + checksum: 10c0/eda5471fc9d5b7264d63c81727824adc3585ddb5cfdc5fce5a9b7c86f946ff181610735d330b1c37a84811df872d1290bf4e9401d2be2a414204343701144b18 + languageName: node + linkType: hard + +"md5-hex@npm:^3.0.1": + version: 3.0.1 + resolution: "md5-hex@npm:3.0.1" + dependencies: + blueimp-md5: "npm:^2.10.0" + checksum: 10c0/ee2b4d8da16b527b3a3fe4d7a96720f43afd07b46a82d49421208b5a126235fb75cfb30b80d4029514772c8844273f940bddfbf4155c787f968f3be4060d01e4 + languageName: node + linkType: hard + +"memoize@npm:^10.0.0": + version: 10.0.0 + resolution: "memoize@npm:10.0.0" + dependencies: + mimic-function: "npm:^5.0.0" + checksum: 10c0/1584351834564be66b21d47b7afe495851f622669ad49e2f4fa4f35d5633471b93176cf602130a95f71fa0aee65a20179817ffac2dd11fa354aa19a8109a14e8 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"microtime@npm:^3.1.0": + version: 3.1.1 + resolution: "microtime@npm:3.1.1" + dependencies: + node-addon-api: "npm:^5.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.4.0" + checksum: 10c0/02512993de914c6f71424d3b8b28ce53de44ba5895b904a213420fd4fc86a084c1d08ec0876ac60cdae6427022766e1b9b86d9b3442bf408701120bd61455e26 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"mimic-function@npm:^5.0.0": + version: 5.0.1 + resolution: "mimic-function@npm:5.0.1" + checksum: 10c0/f3d9464dd1816ecf6bdf2aec6ba32c0728022039d992f178237d8e289b48764fee4131319e72eedd4f7f094e22ded0af836c3187a7edc4595d28dd74368fd81d + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 10c0/790ecec8c5c73973a4fbf2c663d911033e8494d5fb0960a4500634766ab05d6107d20af896ca2132e7031741f19888154d44b2408ada0852446705441383e9f8 + languageName: node + linkType: hard + +"minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.3": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"mute-stream@npm:0.0.8": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: 10c0/18d06d92e5d6d45e2b63c0e1b8f25376af71748ac36f53c059baa8b76ffac31c5ab225480494e7d35d30215ecdb18fed26ec23cafcd2f7733f2f14406bcd19e2 + languageName: node + linkType: hard + +"n-readlines@npm:^1.0.0": + version: 1.0.3 + resolution: "n-readlines@npm:1.0.3" + checksum: 10c0/436c27ac071409314093da35dc3a4c5198c94fb10ad12b1c4d2b3e44bdb634da0a7a8ab0c107c1f4815788cbf5e0c7c180e3037ba3d974f34637cab363a95a74 + languageName: node + linkType: hard + +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 10c0/37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 10c0/3e677139c7fb7628a6f36335bf11a885a62c21d5390204590a1a214a5631fcbe5ea74ef6a610b60afe84b4d975cbe0566a23f20ee17c77c73e74b80032108dea + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.71.0 + resolution: "node-abi@npm:3.71.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/dbd0792ea729329cd9d099f28a5681ff9e8a6db48cf64e1437bf6a7fd669009d1e758a784619a1c4cc8bfd1ed17162f042c787654edf19a1f64b5018457c9c1f + languageName: node + linkType: hard + +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.7": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.2.2, node-gyp-build@npm:^4.4.0": + version: 4.8.3 + resolution: "node-gyp-build@npm:4.8.3" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/a7f43c4128d817db80bb0884f631121449ac586b4a3e708eab0db6fcb7fa0d2e66f6d7d4ee1f49469409de4a9b2e413926befe2dce70b850c6c583a3bbe228d2 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + tar: "npm:^6.2.1" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b + languageName: node + linkType: hard + +"nofilter@npm:^3.1.0": + version: 3.1.0 + resolution: "nofilter@npm:3.1.0" + checksum: 10c0/92459f3864a067b347032263f0b536223cbfc98153913b5dce350cb39c8470bc1813366e41993f22c33cc6400c0f392aa324a4b51e24c22040635c1cdb046499 + languageName: node + linkType: hard + +"nopt@npm:^5.0.0": + version: 5.0.0 + resolution: "nopt@npm:5.0.0" + dependencies: + abbrev: "npm:1" + bin: + nopt: bin/nopt.js + checksum: 10c0/fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"npm-run-path@npm:^6.0.0": + version: 6.0.0 + resolution: "npm-run-path@npm:6.0.0" + dependencies: + path-key: "npm:^4.0.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10c0/b223c8a0dcd608abf95363ea5c3c0ccc3cd877daf0102eaf1b0f2390d6858d8337fbb7c443af2403b067a7d2c116d10691ecd22ab3c5273c44da1ff8d07753bd + languageName: node + linkType: hard + +"npmlog@npm:^5.0.1": + version: 5.0.1 + resolution: "npmlog@npm:5.0.1" + dependencies: + are-we-there-yet: "npm:^2.0.0" + console-control-strings: "npm:^1.1.0" + gauge: "npm:^3.0.0" + set-blocking: "npm:^2.0.0" + checksum: 10c0/489ba519031013001135c463406f55491a17fc7da295c18a04937fe3a4d523fd65e88dd418a28b967ab743d913fdeba1e29838ce0ad8c75557057c481f7d49fa + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"one-time@npm:^1.0.0": + version: 1.0.0 + resolution: "one-time@npm:1.0.0" + dependencies: + fn.name: "npm:1.x.x" + checksum: 10c0/6e4887b331edbb954f4e915831cbec0a7b9956c36f4feb5f6de98c448ac02ff881fd8d9b55a6b1b55030af184c6b648f340a76eb211812f4ad8c9b4b8692fdaa + languageName: node + linkType: hard + +"onetime@npm:^5.1.0": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"opener@npm:^1.5.2": + version: 1.5.2 + resolution: "opener@npm:1.5.2" + bin: + opener: bin/opener-bin.js + checksum: 10c0/dd56256ab0cf796585617bc28e06e058adf09211781e70b264c76a1dbe16e90f868c974e5bf5309c93469157c7d14b89c35dc53fe7293b0e40b4d2f92073bc79 + languageName: node + linkType: hard + +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: "npm:^4.1.0" + chalk: "npm:^4.1.0" + cli-cursor: "npm:^3.1.0" + cli-spinners: "npm:^2.5.0" + is-interactive: "npm:^1.0.0" + is-unicode-supported: "npm:^0.1.0" + log-symbols: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + wcwidth: "npm:^1.0.1" + checksum: 10c0/10ff14aace236d0e2f044193362b22edce4784add08b779eccc8f8ef97195cae1248db8ec1ec5f5ff076f91acbe573f5f42a98c19b78dba8c54eefff983cae85 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.2 + resolution: "p-map@npm:7.0.2" + checksum: 10c0/e10548036648d1c043153f9997112fe5a7de54a319210238628f8ea22ee36587fd6ee740811f88b60bbf29d932e23ae35df7fced40df477116c84c18e797047e + languageName: node + linkType: hard + +"package-config@npm:^5.0.0": + version: 5.0.0 + resolution: "package-config@npm:5.0.0" + dependencies: + find-up-simple: "npm:^1.0.0" + load-json-file: "npm:^7.0.1" + checksum: 10c0/f6c48930700b73a41d839bf2898b628d23665827488a4f34aed2d05e4a99d7a70a70ada115c3546765947fbc8accff94c0779da21ea084b25df47cb774531eeb + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"pako@npm:^2.0.2": + version: 2.1.0 + resolution: "pako@npm:2.1.0" + checksum: 10c0/8e8646581410654b50eb22a5dfd71159cae98145bd5086c9a7a816ec0370b5f72b4648d08674624b3870a521e6a3daffd6c2f7bc00fdefc7063c9d8232ff5116 + languageName: node + linkType: hard + +"parse-ms@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-ms@npm:4.0.0" + checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-type@npm:^5.0.0": + version: 5.0.0 + resolution: "path-type@npm:5.0.0" + checksum: 10c0/e8f4b15111bf483900c75609e5e74e3fcb79f2ddb73e41470028fcd3e4b5162ec65da9907be077ee5012c18801ff7fffb35f9f37a077f3f81d85a0b7d6578efd + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"plur@npm:^5.1.0": + version: 5.1.0 + resolution: "plur@npm:5.1.0" + dependencies: + irregular-plurals: "npm:^3.3.0" + checksum: 10c0/26bb622b8545fcfd47bbf56fbcca66c08693708a232e403fa3589e00003c56c14231ac57c7588ca5db83ef4be1f61383402c4ea954000768f779f8aef6eb6da8 + languageName: node + linkType: hard + +"prebuild-install@npm:^7.1.1": + version: 7.1.2 + resolution: "prebuild-install@npm:7.1.2" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 10c0/e64868ba9ef2068fd7264f5b03e5298a901e02a450acdb1f56258d88c09dea601eefdb3d1dfdff8513fdd230a92961712be0676192626a3b4d01ba154d48bdd3 + languageName: node + linkType: hard + +"pretty-ms@npm:^9.0.0, pretty-ms@npm:^9.1.0": + version: 9.1.0 + resolution: "pretty-ms@npm:9.1.0" + dependencies: + parse-ms: "npm:^4.0.0" + checksum: 10c0/fd111aad8800a04dfd654e6016da69bdaa6fc6a4c280f8e727cffd8b5960558e94942f1a94d4aa6e4d179561a0fbb0366a9ebe0ccefbbb0f8ff853b129cdefb9 + languageName: node + linkType: hard + +"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + +"prom-client@npm:13.1.0": + version: 13.1.0 + resolution: "prom-client@npm:13.1.0" + dependencies: + tdigest: "npm:^0.1.1" + checksum: 10c0/0f117e044bdbc7e8fb3a926e16e0e76ff3fb308dbc98fdb084dfa16ad52a0b68cf6a79a31e907b1c4ac9009b1d50848e3e72fb36ed43893291148e1505844fc2 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"proper-lockfile@npm:^4.1.2": + version: 4.1.2 + resolution: "proper-lockfile@npm:4.1.2" + dependencies: + graceful-fs: "npm:^4.2.4" + retry: "npm:^0.12.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/2f265dbad15897a43110a02dae55105c04d356ec4ed560723dcb9f0d34bc4fb2f13f79bb930e7561be10278e2314db5aca2527d5d3dcbbdee5e6b331d1571f6d + languageName: node + linkType: hard + +"protobufjs@npm:^6.8.8": + version: 6.11.4 + resolution: "protobufjs@npm:6.11.4" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.4" + "@protobufjs/eventemitter": "npm:^1.1.0" + "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/inquire": "npm:^1.1.0" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.0" + "@types/long": "npm:^4.0.1" + "@types/node": "npm:>=13.7.0" + long: "npm:^4.0.0" + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: 10c0/c244d7b9b6d3258193da5c0d1e558dfb47f208ae345e209f90ec45c9dca911b90fa17e937892a9a39a4136ab9886981aae9efdf6039f7baff4f7225f5eeb9812 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.2 + resolution: "pump@npm:3.0.2" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"pure-rand@npm:^6.1.0": + version: 6.1.0 + resolution: "pure-rand@npm:6.1.0" + checksum: 10c0/1abe217897bf74dcb3a0c9aba3555fe975023147b48db540aa2faf507aee91c03bf54f6aef0eb2bf59cc259a16d06b28eca37f0dc426d94f4692aeff02fb0e65 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"readonly-date@npm:^1.0.0": + version: 1.0.0 + resolution: "readonly-date@npm:1.0.0" + checksum: 10c0/7ab32bf19f6bfec102584a524fa79a289e6ede0bf20c80fd90ab309962e45b71d19dd0e3915dff6e81edf226f08fda65e890539b4aca74668921790b10471356 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + +"resolve@npm:^1.17.0, resolve@npm:^1.19.0": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"rollup@npm:^2.79.1": + version: 2.79.2 + resolution: "rollup@npm:2.79.2" + dependencies: + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/bc3746c988d903c2211266ddc539379d53d92689b9cc5c2b4e3ae161689de9af491957a567c629b6cc81f48d0928a7591fc4c383fba68a48d2966c9fb8a2bce9 + languageName: node + linkType: hard + +"root-workspace-0b6124@workspace:.": + version: 0.0.0-use.local + resolution: "root-workspace-0b6124@workspace:." + dependencies: + "@agoric/client-utils": "npm:dev" + "@agoric/ertp": "npm:dev" + "@agoric/internal": "npm:dev" + "@agoric/store": "npm:dev" + "@agoric/synthetic-chain": "npm:^0.3.0" + "@agoric/zoe": "npm:dev" + "@endo/errors": "npm:^1.2.2" + "@endo/far": "npm:^1.1.5" + "@endo/init": "npm:^1.1.4" + "@endo/marshal": "npm:^1.5.3" + agoric: "npm:dev" + ava: "npm:^6.1.2" + execa: "npm:^9.3.1" + tsx: "npm:^4.17.0" + typescript: "npm:^5.5.4" + languageName: unknown + linkType: soft + +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: 10c0/35a68c8f1d9664f6c7c2e153877ca1d6e4f886e5ca067c25cdd895a6891ff3a1466ee07c63d6a9be306e9619ff7d509494e6d9c129516a36b9fd82263d579ee1 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:^7.5.5": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safe-stable-stringify@npm:^2.3.1": + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10c0/baea14971858cadd65df23894a40588ed791769db21bafb7fd7608397dbdce9c5aac60748abae9995e0fc37e15f2061980501e012cd48859740796bea2987f49 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.3.0": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.3.2, semver@npm:^7.3.5": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + languageName: node + linkType: hard + +"serialize-error@npm:^7.0.1": + version: 7.0.1 + resolution: "serialize-error@npm:7.0.1" + dependencies: + type-fest: "npm:^0.13.1" + checksum: 10c0/7982937d578cd901276c8ab3e2c6ed8a4c174137730f1fb0402d005af209a0e84d04acc874e317c936724c7b5b26c7a96ff7e4b8d11a469f4924a4b0ea814c05 + languageName: node + linkType: hard + +"ses@npm:^1.10.0": + version: 1.10.0 + resolution: "ses@npm:1.10.0" + dependencies: + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/83b92bc49e27af04eeb7ee01a2196a0c4b0906e4de51e70403aa9ffc82be1d27a0c3506f2d54da8d6d260be0855f2123a13a7e2c6896e81ec85899df1a428609 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: "npm:^0.3.1" + checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 + languageName: node + linkType: hard + +"slash@npm:^5.1.0": + version: 5.1.0 + resolution: "slash@npm:5.1.0" + checksum: 10c0/eb48b815caf0bdc390d0519d41b9e0556a14380f6799c72ba35caf03544d501d18befdeeef074bc9c052acf69654bc9e0d79d7f1de0866284137a40805299eb3 + languageName: node + linkType: hard + +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + astral-regex: "npm:^2.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + checksum: 10c0/6c25678db1270d4793e0327620f1e0f9f5bea4630123f51e9e399191bc52c87d6e6de53ed33538609e5eacbd1fab769fae00f3705d08d029f02102a540648918 + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: "npm:^6.0.0" + is-fullwidth-code-point: "npm:^4.0.0" + checksum: 10c0/2d4d40b2a9d5cf4e8caae3f698fe24ae31a4d778701724f578e984dcb485ec8c49f0c04dab59c401821e80fcdfe89cace9c66693b0244e40ec485d72e543914f + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" + dependencies: + agent-base: "npm:^7.1.1" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map@npm:^0.5.0": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 + languageName: node + linkType: hard + +"sourcemap-codec@npm:^1.4.8": + version: 1.4.8 + resolution: "sourcemap-codec@npm:1.4.8" + checksum: 10c0/f099279fdaae070ff156df7414bbe39aad69cdd615454947ed3e19136bfdfcb4544952685ee73f56e17038f4578091e12b17b283ed8ac013882916594d95b9e6 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 + languageName: node + linkType: hard + +"stack-trace@npm:0.0.x": + version: 0.0.10 + resolution: "stack-trace@npm:0.0.10" + checksum: 10c0/9ff3dabfad4049b635a85456f927a075c9d0c210e3ea336412d18220b2a86cbb9b13ec46d6c37b70a302a4ea4d49e30e5d4944dd60ae784073f1cde778ac8f4b + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.6": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string-width@npm:^7.0.0": + version: 7.2.0 + resolution: "string-width@npm:7.2.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-final-newline@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-final-newline@npm:4.0.0" + checksum: 10c0/b0cf2b62d597a1b0e3ebc42b88767f0a0d45601f89fd379a928a1812c8779440c81abba708082c946445af1d6b62d5f16e2a7cf4f30d9d6587b89425fae801ff + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + +"supertap@npm:^3.0.1": + version: 3.0.1 + resolution: "supertap@npm:3.0.1" + dependencies: + indent-string: "npm:^5.0.0" + js-yaml: "npm:^3.14.1" + serialize-error: "npm:^7.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/8164674f2e280cab875f0fef5bb36c15553c13e29697ff92f4e0d6bc62149f0303a89eee47535413ed145ea72e14a24d065bab233059d48a499ec5ebb4566b0f + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"symbol-observable@npm:^2.0.3": + version: 2.0.3 + resolution: "symbol-observable@npm:2.0.3" + checksum: 10c0/03fb8766b75bfa65a3c7d68ae1e51a13a5ff71b40d6d53b17a0c9c77b1685c20a3bfbf45547ab36214a079665c3f551e250798f6b2f83a2a40762d864ed87f78 + languageName: node + linkType: hard + +"table@npm:^6.7.1": + version: 6.8.2 + resolution: "table@npm:6.8.2" + dependencies: + ajv: "npm:^8.0.1" + lodash.truncate: "npm:^4.4.2" + slice-ansi: "npm:^4.0.0" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/f8b348af38ee34e419d8ce7306ba00671ce6f20e861ccff22555f491ba264e8416086063ce278a8d81abfa8d23b736ec2cca7ac4029b5472f63daa4b4688b803 + languageName: node + linkType: hard + +"tar-fs@npm:^2.0.0": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 10c0/871d26a934bfb7beeae4c4d8a09689f530b565f79bd0cf489823ff0efa3705da01278160da10bb006d1a793fa0425cf316cec029b32a9159eacbeaff4965fb6d + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"tdigest@npm:^0.1.1": + version: 0.1.2 + resolution: "tdigest@npm:0.1.2" + dependencies: + bintrees: "npm:1.0.2" + checksum: 10c0/10187b8144b112fcdfd3a5e4e9068efa42c990b1e30cd0d4f35ee8f58f16d1b41bc587e668fa7a6f6ca31308961cbd06cd5d4a4ae1dc388335902ae04f7d57df + languageName: node + linkType: hard + +"temp-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "temp-dir@npm:3.0.0" + checksum: 10c0/a86978a400984cd5f315b77ebf3fe53bb58c61f192278cafcb1f3fb32d584a21dc8e08b93171d7874b7cc972234d3455c467306cc1bfc4524b622e5ad3bfd671 + languageName: node + linkType: hard + +"text-hex@npm:1.0.x": + version: 1.0.0 + resolution: "text-hex@npm:1.0.0" + checksum: 10c0/57d8d320d92c79d7c03ffb8339b825bb9637c2cbccf14304309f51d8950015c44464b6fd1b6820a3d4821241c68825634f09f5a2d9d501e84f7c6fd14376860d + languageName: node + linkType: hard + +"through@npm:^2.3.6": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc + languageName: node + linkType: hard + +"time-zone@npm:^1.0.0": + version: 1.0.0 + resolution: "time-zone@npm:1.0.0" + checksum: 10c0/d00ebd885039109011b6e2423ebbf225160927333c2ade6d833e9cc4676db20759f1f3855fafde00d1bd668c243a6aa68938ce71fe58aab0d514e820d59c1d81 + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: "npm:~1.0.2" + checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 + languageName: node + linkType: hard + +"tmp@npm:^0.2.1": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"triple-beam@npm:1.3.0": + version: 1.3.0 + resolution: "triple-beam@npm:1.3.0" + checksum: 10c0/a6da96495f25b6c04b3629df5161c7eb84760927943f16665fd8dcd3a643daadf73d69eee78306b4b68d606937f22f8703afe763bc8d3723632ffb1f3a798493 + languageName: node + linkType: hard + +"triple-beam@npm:^1.3.0": + version: 1.4.1 + resolution: "triple-beam@npm:1.4.1" + checksum: 10c0/4bf1db71e14fe3ff1c3adbe3c302f1fdb553b74d7591a37323a7badb32dc8e9c290738996cbb64f8b10dc5a3833645b5d8c26221aaaaa12e50d1251c9aba2fea + languageName: node + linkType: hard + +"ts-blank-space@npm:^0.4.1": + version: 0.4.3 + resolution: "ts-blank-space@npm:0.4.3" + dependencies: + typescript: "npm:5.1.6 - 5.6.x" + checksum: 10c0/362feac2e19cf8f1936cefdc658463558e0ef88568fdb7267910c50eb20b27ab2e21b4cf8100890f9ff1568a4e185daa68947c00dd4bfe176d61f554010266e1 + languageName: node + linkType: hard + +"tslib@npm:^2.1.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"tsx@npm:^4.17.0": + version: 4.19.2 + resolution: "tsx@npm:4.19.2" + dependencies: + esbuild: "npm:~0.23.0" + fsevents: "npm:~2.3.3" + get-tsconfig: "npm:^4.7.5" + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.mjs + checksum: 10c0/63164b889b1d170403e4d8753a6755dec371f220f5ce29a8e88f1f4d6085a784a12d8dc2ee669116611f2c72757ac9beaa3eea5c452796f541bdd2dc11753721 + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + +"type-fest@npm:^0.13.1": + version: 0.13.1 + resolution: "type-fest@npm:0.13.1" + checksum: 10c0/0c0fa07ae53d4e776cf4dac30d25ad799443e9eef9226f9fddbb69242db86b08584084a99885cfa5a9dfe4c063ebdc9aa7b69da348e735baede8d43f1aeae93b + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"typescript@npm:5.1.6 - 5.6.x, typescript@npm:^5.5.4": + version: 5.6.3 + resolution: "typescript@npm:5.6.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.1.6 - 5.6.x#optional!builtin, typescript@patch:typescript@npm%3A^5.5.4#optional!builtin": + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/7c9d2e07c81226d60435939618c91ec2ff0b75fbfa106eec3430f0fcf93a584bc6c73176676f532d78c3594fe28a54b36eb40b3d75593071a7ec91301533ace7 + languageName: node + linkType: hard + +"undici-types@npm:~6.19.8": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 + languageName: node + linkType: hard + +"unicorn-magic@npm:^0.1.0": + version: 0.1.0 + resolution: "unicorn-magic@npm:0.1.0" + checksum: 10c0/e4ed0de05b0a05e735c7d8a2930881e5efcfc3ec897204d5d33e7e6247f4c31eac92e383a15d9a6bccb7319b4271ee4bea946e211bf14951fec6ff2cbbb66a92 + languageName: node + linkType: hard + +"unicorn-magic@npm:^0.3.0": + version: 0.3.0 + resolution: "unicorn-magic@npm:0.3.0" + checksum: 10c0/0a32a997d6c15f1c2a077a15b1c4ca6f268d574cf5b8975e778bb98e6f8db4ef4e86dfcae4e158cd4c7e38fb4dd383b93b13eefddc7f178dea13d3ac8a603271 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: "npm:^1.0.3" + checksum: 10c0/5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"well-known-symbols@npm:^2.0.0": + version: 2.0.0 + resolution: "well-known-symbols@npm:2.0.0" + checksum: 10c0/cb6c12e98877e8952ec28d13ae6f4fdb54ae1cb49b16a728720276dadd76c930e6cb0e174af3a4620054dd2752546f842540122920c6e31410208abd4958ee6b + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"wide-align@npm:^1.1.2": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: "npm:^1.0.2 || 2 || 3 || 4" + checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 + languageName: node + linkType: hard + +"winston-transport@npm:^4.4.0": + version: 4.9.0 + resolution: "winston-transport@npm:4.9.0" + dependencies: + logform: "npm:^2.7.0" + readable-stream: "npm:^3.6.2" + triple-beam: "npm:^1.3.0" + checksum: 10c0/e2990a172e754dbf27e7823772214a22dc8312f7ec9cfba831e5ef30a5d5528792e5ea8f083c7387ccfc5b2af20e3691f64738546c8869086110a26f98671095 + languageName: node + linkType: hard + +"winston@npm:3.3.3": + version: 3.3.3 + resolution: "winston@npm:3.3.3" + dependencies: + "@dabh/diagnostics": "npm:^2.0.2" + async: "npm:^3.1.0" + is-stream: "npm:^2.0.0" + logform: "npm:^2.2.0" + one-time: "npm:^1.0.0" + readable-stream: "npm:^3.4.0" + stack-trace: "npm:0.0.x" + triple-beam: "npm:^1.3.0" + winston-transport: "npm:^4.4.0" + checksum: 10c0/18205fa1e3ebb88dc910fbe5337e3c9d2dbd94310978adca5ab77444b854d5679dec0a70fed425e77cf93e237390c7670bb937f14c492b8415e594ab21540d3d + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.0.1": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"write-file-atomic@npm:^6.0.0": + version: 6.0.0 + resolution: "write-file-atomic@npm:6.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: 10c0/ae2f1c27474758a9aca92037df6c1dd9cb94c4e4983451210bd686bfe341f142662f6aa5913095e572ab037df66b1bfe661ed4ce4c0369ed0e8219e28e141786 + languageName: node + linkType: hard + +"ws@npm:^7, ws@npm:^7.2.0": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d + languageName: node + linkType: hard + +"xstream@npm:^11.14.0": + version: 11.14.0 + resolution: "xstream@npm:11.14.0" + dependencies: + globalthis: "npm:^1.0.1" + symbol-observable: "npm:^2.0.3" + checksum: 10c0/7a28baedc64385dc17597d04c7130ec3135db298e66d6dcf33821eb1953d5ad1b83c5fa08f1ce4d36e75fd219f2e9ef81ee0721aa8d4ccf619acc1760ba37f71 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yoctocolors@npm:^2.0.0": + version: 2.1.1 + resolution: "yoctocolors@npm:2.1.1" + checksum: 10c0/85903f7fa96f1c70badee94789fade709f9d83dab2ec92753d612d84fcea6d34c772337a9f8914c6bed2f5fc03a428ac5d893e76fab636da5f1236ab725486d0 + languageName: node + linkType: hard diff --git a/agoric/a3p-integration/scripts/build-all-submissions.sh b/agoric/a3p-integration/scripts/build-all-submissions.sh new file mode 100755 index 000000000..ad97a44d3 --- /dev/null +++ b/agoric/a3p-integration/scripts/build-all-submissions.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -ueo pipefail + +# cd prints its target, so without the redirect, we get two copies +SCRIPT_DIR=$(cd ${0%/*} > /dev/null && pwd -P) + +IFS=$'\n' + +for proposal in ./proposals/?:*; do + cd $proposal + # build submission if proposal specifies an sdk-generate + while read -r line; do + IFS=' ' parts=($line) + $SCRIPT_DIR/build-submission.sh $proposal ${parts[@]} + done < <(jq -r '.agoricProposal["sdk-generate"][]?' < package.json) + cd - +done diff --git a/agoric/a3p-integration/scripts/build-submission.sh b/agoric/a3p-integration/scripts/build-submission.sh new file mode 100755 index 000000000..3470c24cf --- /dev/null +++ b/agoric/a3p-integration/scripts/build-submission.sh @@ -0,0 +1,23 @@ +#!/bin/bash +set -ueo pipefail + +sdkroot=$(git rev-parse --show-toplevel) + +cd "$sdkroot" + +a3pProposalDir=$1 +builderScript=$2 +submissionDirName=${3:-submission} +submissionDir="./a3p-integration/$a3pProposalDir/$submissionDirName" +extraParams=${4:-} + +yarn agoric run "packages/builders/scripts/$builderScript" $extraParams +mkdir -p "$submissionDir" + +plans=*-plan.json +for plan in $plans; do + base=${plan%-plan.json} + cp $(grep -oh '/.*b1-.*.json' "$base"-plan.json) "$submissionDir" + mv "$base"* "$submissionDir" + ls -oS "$submissionDir" +done diff --git a/agoric/a3p-integration/yarn.lock b/agoric/a3p-integration/yarn.lock new file mode 100644 index 000000000..a20e09369 --- /dev/null +++ b/agoric/a3p-integration/yarn.lock @@ -0,0 +1,1351 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@agoric/synthetic-chain@npm:^0.3.0": + version: 0.3.0 + resolution: "@agoric/synthetic-chain@npm:0.3.0" + dependencies: + "@endo/zip": "npm:^1.0.7" + better-sqlite3: "npm:^9.6.0" + chalk: "npm:^5.3.0" + cosmjs-types: "npm:^0.9.0" + execa: "npm:^9.3.1" + bin: + synthetic-chain: dist/cli/cli.js + checksum: 10c0/17c6241bdc48b8a2a7608c9d4d7c0a0c76fb10d4ee44a31a1150104a792bcd1133f4b1a7e8ab26673a07450b3ceabccd9911999117568221b49221b6ee4306a1 + languageName: node + linkType: hard + +"@endo/zip@npm:^1.0.7": + version: 1.0.7 + resolution: "@endo/zip@npm:1.0.7" + checksum: 10c0/a1c0d155448ce877012b34c8fe8cd3a58de9eb807514c81cddeebb802ee8e552b27d8a9a40fab3f3e4c49e0cb7fea6902fa1dd12a23ff6f30b56161fc3edc1f8 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.0 + resolution: "@npmcli/agent@npm:2.2.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.1" + checksum: 10c0/7b89590598476dda88e79c473766b67c682aae6e0ab0213491daa6083dcc0c171f86b3868f5506f22c09aa5ea69ad7dfb78f4bf39a8dca375d89a42f408645b3 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/162b4a0b8705cd6f5c2470b851d1dc6cd228c86d2170e1769d738c1fbb69a87160901411c3c035331e9e99db72f1f1099a8b734bf1637cc32b9a5be1660e4e1e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@sec-ant/readable-stream@npm:^0.4.1": + version: 0.4.1 + resolution: "@sec-ant/readable-stream@npm:0.4.1" + checksum: 10c0/64e9e9cf161e848067a5bf60cdc04d18495dc28bb63a8d9f8993e4dd99b91ad34e4b563c85de17d91ffb177ec17a0664991d2e115f6543e73236a906068987af + languageName: node + linkType: hard + +"@sindresorhus/merge-streams@npm:^4.0.0": + version: 4.0.0 + resolution: "@sindresorhus/merge-streams@npm:4.0.0" + checksum: 10c0/482ee543629aa1933b332f811a1ae805a213681ecdd98c042b1c1b89387df63e7812248bb4df3910b02b3cc5589d3d73e4393f30e197c9dde18046ccd471fc6b + languageName: node + linkType: hard + +"@types/better-sqlite3@npm:^7.6.11": + version: 7.6.11 + resolution: "@types/better-sqlite3@npm:7.6.11" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/6a7b8e5765f872404242ff9626edf4b4dd7974047144ba7254a59f4f1c196d05f8001323d0b526e8bbb3842bf541e341d74ca0164e50bd38fceaf3ef5d2a673d + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.11.30 + resolution: "@types/node@npm:20.11.30" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10c0/867cfaf969c6d8850d8d7304e7ab739898a50ecb1395b61ff2335644f5f48d7a46fbc4a14cee967aed65ec134b61a746edae70d1f32f11321ccf29165e3bc4e6 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/fc974ab57ffdd8421a2bc339644d312a9cca320c20c3393c9d8b1fd91731b9bbabdb985df5fc860f5b79d81c3e350daa3fcb31c5c07c0bb385aafc817df004ce + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"better-sqlite3@npm:^9.6.0": + version: 9.6.0 + resolution: "better-sqlite3@npm:9.6.0" + dependencies: + bindings: "npm:^1.5.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + checksum: 10c0/8db9b38f414e26a56d4c40fc16e94a253118491dae0e2c054338a9e470f1a883c7eb4cb330f2f5737db30f704d4f2e697c59071ca04e03364ee9fe04375aa9c8 + languageName: node + linkType: hard + +"bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: "npm:1.0.0" + checksum: 10c0/3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba + languageName: node + linkType: hard + +"bl@npm:^4.0.3": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10c0/02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.2 + resolution: "cacache@npm:18.0.2" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/7992665305cc251a984f4fdbab1449d50e88c635bc43bf2785530c61d239c61b349e5734461baa461caaee65f040ab14e2d58e694f479c0810cffd181ba5eabc + languageName: node + linkType: hard + +"chalk@npm:^5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 10c0/8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"cosmjs-types@npm:^0.9.0": + version: 0.9.0 + resolution: "cosmjs-types@npm:0.9.0" + checksum: 10c0/bc20f4293fb34629d7c5f96bafe533987f753df957ff68eb078d0128ae5a418320cb945024441769a07bb9bc5dde9d22b972fd40d485933e5706ea191c43727b + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0": + version: 2.0.2 + resolution: "detect-libc@npm:2.0.2" + checksum: 10c0/a9f4ffcd2701525c589617d98afe5a5d0676c8ea82bcc4ed6f3747241b79f781d36437c59a5e855254c864d36a3e9f8276568b6b531c28d6e53b093a15703f11 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"execa@npm:^9.3.1": + version: 9.3.1 + resolution: "execa@npm:9.3.1" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.3" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^8.0.0" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^5.2.0" + pretty-ms: "npm:^9.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.0.0" + checksum: 10c0/113979ff56575f6cb69fd021eb3894a674fb59b264f5e8c2b9b30e301629abc4f44cee881e680f9fb3b7d4956645df76a2d8c0006869dea985f96ec65f07b226 + languageName: node + linkType: hard + +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"figures@npm:^6.1.0": + version: 6.1.0 + resolution: "figures@npm:6.1.0" + dependencies: + is-unicode-supported: "npm:^2.0.0" + checksum: 10c0/9159df4264d62ef447a3931537de92f5012210cf5135c35c010df50a2169377581378149abfe1eb238bd6acbba1c0d547b1f18e0af6eee49e30363cedaffcfe4 + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: 10c0/3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"get-stream@npm:^9.0.0": + version: 9.0.1 + resolution: "get-stream@npm:9.0.1" + dependencies: + "@sec-ant/readable-stream": "npm:^0.4.1" + is-stream: "npm:^4.0.1" + checksum: 10c0/d70e73857f2eea1826ac570c3a912757dcfbe8a718a033fa0c23e12ac8e7d633195b01710e0559af574cbb5af101009b42df7b6f6b29ceec8dbdf7291931b948 + languageName: node + linkType: hard + +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^2.3.5" + minimatch: "npm:^9.0.1" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry: "npm:^1.10.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/13d8a1feb7eac7945f8c8480e11cd4a44b24d26503d99a8d8ac8d5aefbf3e9802a2b6087318a829fad04cb4e829f25c5f4f1110c68966c498720dd261c7e344d + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "http-proxy-agent@npm:7.0.0" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/a11574ff39436cee3c7bc67f259444097b09474605846ddd8edf0bf4ad8644be8533db1aa463426e376865047d05dc22755e638632819317c0c2f1b2196657c8 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.2 + resolution: "https-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10c0/7735eb90073db087e7e79312e3d97c8c04baf7ea7ca7b013382b6a45abbaa61b281041a98f4e13c8c80d88f843785bcc84ba189165b4b4087b1e3496ba656d77 + languageName: node + linkType: hard + +"human-signals@npm:^8.0.0": + version: 8.0.0 + resolution: "human-signals@npm:8.0.0" + checksum: 10c0/e4dac4f7d3eb791ed04129fc6a85bd454a9102d3e3b76c911d0db7057ebd60b2956b435b5b5712aec18960488ede3c21ef7c56e42cdd70760c0d84d3c05cd92e + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: 10c0/8d186cc5585f57372847ae29b6eba258c68862055e18a75cc4933327232cb5c107f89800ce29715d542eef2c254fbb68b382e780a7414f9ee7caf60b7a473958 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 10c0/32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e + languageName: node + linkType: hard + +"is-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "is-stream@npm:4.0.1" + checksum: 10c0/2706c7f19b851327ba374687bc4a3940805e14ca496dc672b9629e744d143b1ad9c6f1b162dece81c7bfbc0f83b32b61ccc19ad2e05aad2dd7af347408f60c7f + languageName: node + linkType: hard + +"is-unicode-supported@npm:^2.0.0": + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: 10c0/a0f53e9a7c1fdbcf2d2ef6e40d4736fdffff1c9f8944c75e15425118ff3610172c87bf7bc6c34d3903b04be59790bb2212ddbe21ee65b5a97030fc50370545a5 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/f01d8f972d894cd7638bc338e9ef5ddb86f7b208ce177a36d718eac96ec86638a6efa17d0221b10073e64b45edc2ce15340db9380b1f5d5c5d000cbc517dc111 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 10c0/778bc8b2626daccd75f24c4b4d10632496e21ba064b126f526c626fbdbc5b28c472013fccd45d7646b9e1ef052444824854aed617b59cd570d01a8b7d651fc1e + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/43b9f6dcbc6fe8b8604cb6396957c3698857a15ba4dbc38284f7f0e61f248300585ef1eb8cc62df54e9c724af977e45b5cdfd88320ef7f53e45070ed3488da55 + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.3": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/1b63c1f3313e88eeac4689f1b71c9f086598db9a189400e3ee960c32ed89e06737fa23976c9305c2d57464fb3fcdc12749d3378805c9d6176f5569b0d0ee8a75 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 10c0/6c7370a6dfd257bf18222da581ba89a5eaedca10e158781232a8b5542a90547540b4b9b7e7f490e4cda43acfbd12e086f0453728ecf8c19e0ef6921bc5958ac5 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 10c0/37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.54.0 + resolution: "node-abi@npm:3.54.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/9ebbb21e6951aa51e831549ed62b68dc56bcc10f6b21ffd04195a16a6abf5ddfc48b6ae5e3334720fe4459cafde5ec8103025902efff5599d0539f8656fc694e + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.0.1 + resolution: "node-gyp@npm:10.0.1" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^3.0.0" + semver: "npm:^7.3.5" + tar: "npm:^6.1.2" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/abddfff7d873312e4ed4a5fb75ce893a5c4fb69e7fcb1dfa71c28a6b92a7f1ef6b62790dffb39181b5a82728ba8f2f32d229cf8cbe66769fe02cea7db4a555aa + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/9bd7198df6f16eb29ff16892c77bcf7f0cc41f9fb5c26280ac0def2cf8cf319f3b821b3af83eba0e74c85807cc430a16efe0db58fe6ae1f41e69519f585b6aff + languageName: node + linkType: hard + +"npm-run-path@npm:^5.2.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 10c0/124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba + languageName: node + linkType: hard + +"once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"parse-ms@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-ms@npm:4.0.0" + checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: "npm:^9.1.1 || ^10.0.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/e5dc78a7348d25eec61ab166317e9e9c7b46818aa2c2b9006c507a6ff48c672d011292d9662527213e558f5652ce0afcc788663a061d8b59ab495681840c0c1e + languageName: node + linkType: hard + +"prebuild-install@npm:^7.1.1": + version: 7.1.1 + resolution: "prebuild-install@npm:7.1.1" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 10c0/6dc70f36b0f4adcb2fe0ed38d874ab28b571fb1a9725d769e8ba3f64a15831e58462de09f3e6e64569bcc4a3e03b9328b56faa0d45fe10ae1574478814536c76 + languageName: node + linkType: hard + +"pretty-ms@npm:^9.0.0": + version: 9.1.0 + resolution: "pretty-ms@npm:9.1.0" + dependencies: + parse-ms: "npm:^4.0.0" + checksum: 10c0/fd111aad8800a04dfd654e6016da69bdaa6fc6a4c280f8e727cffd8b5960558e94942f1a94d4aa6e4d179561a0fbb0366a9ebe0ccefbbb0f8ff853b129cdefb9 + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 10c0/f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.0 + resolution: "pump@npm:3.0.0" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/bbdeda4f747cdf47db97428f3a135728669e56a0ae5f354a9ac5b74556556f5446a46f720a8f14ca2ece5be9b4d5d23c346db02b555f46739934cc6c093a5478 + languageName: node + linkType: hard + +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"root-workspace-0b6124@workspace:.": + version: 0.0.0-use.local + resolution: "root-workspace-0b6124@workspace:." + dependencies: + "@agoric/synthetic-chain": "npm:^0.3.0" + "@types/better-sqlite3": "npm:^7.6.11" + languageName: unknown + linkType: soft + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/5160b06975a38b11c1ab55950cb5b8a23db78df88275d3d8a42ccf1f29e55112ac995b3a26a522c36e3b5f76b0445f1eef70d696b8c7862a2b4303d7b0e7609e + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.1": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:^4.3.4" + socks: "npm:^2.7.1" + checksum: 10c0/a842402fc9b8848a31367f2811ca3cd14c4106588b39a0901cd7a69029998adfc6456b0203617c18ed090542ad0c24ee4e9d4c75a0c4b75071e214227c177eb7 + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: "npm:^2.0.0" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/43f69dbc9f34fc8220bc51c6eea1c39715ab3cfdb115d6e3285f6c7d1a603c5c75655668a5bbc11e3c7e2c99d60321fb8d7ab6f38cda6a215fadd0d6d0b52130 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/b091f2ae92474183c7ac5ed3f9811457e1df23df7a7e70c9476eaa9a0c4a0c8fc190fb45acefbf023ca9ee864dd6754237a697dc52a0fb182afe65d8e77443d8 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-final-newline@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-final-newline@npm:4.0.0" + checksum: 10c0/b0cf2b62d597a1b0e3ebc42b88767f0a0d45601f89fd379a928a1812c8779440c81abba708082c946445af1d6b62d5f16e2a7cf4f30d9d6587b89425fae801ff + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + +"tar-fs@npm:^2.0.0": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 10c0/871d26a934bfb7beeae4c4d8a09689f530b565f79bd0cf489823ff0efa3705da01278160da10bb006d1a793fa0425cf316cec029b32a9159eacbeaff4965fb6d + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/02ca064a1a6b4521fef88c07d389ac0936730091f8c02d30ea60d472e0378768e870769ab9e986d87807bfee5654359cf29ff4372746cc65e30cbddc352660d8 + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yoctocolors@npm:^2.0.0": + version: 2.1.1 + resolution: "yoctocolors@npm:2.1.1" + checksum: 10c0/85903f7fa96f1c70badee94789fade709f9d83dab2ec92753d612d84fcea6d34c772337a9f8914c6bed2f5fc03a428ac5d893e76fab636da5f1236ab725486d0 + languageName: node + linkType: hard diff --git a/agoric/contract/package.json b/agoric/contract/package.json index f3ef935ec..3e842e782 100644 --- a/agoric/contract/package.json +++ b/agoric/contract/package.json @@ -15,8 +15,8 @@ }, "devDependencies": { "@agoric/eslint-config": "agoric-upgrade-11", - "@endo/eslint-plugin": "^0.4.4", "@agoric/swingset-vat": "^0.32.2", + "@endo/eslint-plugin": "^0.4.4", "@endo/promise-kit": "^0.2.59", "@jessie.js/eslint-plugin": "^0.4.0", "ava": "^4.3.1", diff --git a/agoric/contract/src/index.js b/agoric/contract/src/index.js index 86a442c82..e88b0aed3 100644 --- a/agoric/contract/src/index.js +++ b/agoric/contract/src/index.js @@ -159,6 +159,8 @@ export const prepare = async (zcf, privateArgs, baggage) => { zcf, privateArgs.initialPoserInvitation, {}, + powers.storageNode, + powers.marshaller, ); const { governorFacet } = makeDurableGovernorFacet( diff --git a/agoric/contract/src/kreadKit.js b/agoric/contract/src/kreadKit.js index e1d1aaa25..27de9e3b9 100644 --- a/agoric/contract/src/kreadKit.js +++ b/agoric/contract/src/kreadKit.js @@ -6,6 +6,7 @@ import { assert } from '@agoric/assert'; import { AmountMath, BrandShape } from '@agoric/ertp'; import { prepareExoClassKit, M } from '@agoric/vat-data'; import { makeDurableZone } from '@agoric/zone/durable.js'; +import { subscribeLatest } from '@agoric/notifier/subscribe.js'; import { E } from '@endo/eventual-send'; import { errors } from './errors.js'; @@ -1016,7 +1017,10 @@ export const prepareKreadKit = ( const characterLevel = characterFacet.calculateLevel(asset.name); const subscriber = E(seat).getSubscriber(); - void E.when(E(subscriber).getUpdateSince(), () => { + const asyncIterableP = subscribeLatest(subscriber); + const asyncIteratorP = E(asyncIterableP)[Symbol.asyncIterator](); + + E.when(E(asyncIteratorP).next(), () => { marketFacet.updateMetrics('character', { marketplaceAverageLevel: { type: 'remove', @@ -1036,7 +1040,10 @@ export const prepareKreadKit = ( const { seat, asset, id, recorderKit } = entry; const subscriber = E(seat).getSubscriber(); - E.when(E(subscriber).getUpdateSince(), () => { + const asyncIterableP = subscribeLatest(subscriber); + const asyncIteratorP = E(asyncIterableP)[Symbol.asyncIterator](); + + E.when(E(asyncIteratorP).next(), () => { marketFacet.updateMetrics('item', { marketplaceAverageLevel: { type: 'remove', diff --git a/agoric/contract/src/proposal/start-kread-proposal.js b/agoric/contract/src/proposal/start-kread-proposal.js index c1e4dcdef..f35c5119a 100644 --- a/agoric/contract/src/proposal/start-kread-proposal.js +++ b/agoric/contract/src/proposal/start-kread-proposal.js @@ -16,7 +16,6 @@ import { marketplaceListingsLegendary, } from './base-inventory.js'; -import '@agoric/governance/src/types-ambient.js'; import { AmountMath } from '@agoric/ertp/src/amountMath.js'; const KREAD_LABEL = 'KREAd'; diff --git a/agoric/contract/src/type-guards.js b/agoric/contract/src/type-guards.js index 2b8c85e50..a867b175c 100644 --- a/agoric/contract/src/type-guards.js +++ b/agoric/contract/src/type-guards.js @@ -115,7 +115,7 @@ export const PublicI = M.interface('public', { makeBuyItemInvitation: M.call().returns(M.promise()), // Getters getCharacters: M.call().returns(M.array()), - getCharacterInventory: M.call().returns(M.splitRecord({ items: M.array() })), + getCharacterInventory: M.call(M.string()).returns(M.splitRecord({ items: M.array() })), getCharactersForSale: M.call().returns(M.array()), getItemsForSale: M.call().returns(M.array()), getMarketMetrics: M.call().returns(M.record()), @@ -131,7 +131,7 @@ export const CreatorI = M.interface('creator', { M.arrayOf(ItemGuard), ).returns(), initializeCharacterNamesEntries: M.call().returns(), - publishItemCollection: M.call().returns(M.promise()), + publishItemCollection: M.call(M.record(), M.array()).returns(M.promise()), }); export const CharacterI = M.interface('character', { @@ -140,7 +140,7 @@ export const CharacterI = M.interface('character', { unequip: M.call().returns(M.promise()), unequipAll: M.call().returns(M.promise()), swap: M.call().returns(M.promise()), - validateInventoryState: M.call().returns(M.boolean()), + validateInventoryState: M.call(M.array()).returns(M.boolean()), isNameUnique: M.call(M.string()).returns(M.boolean()), getRandomBaseIndex: M.call().returns(M.any()), calculateLevel: M.call(M.string()).returns(M.gte(0)), @@ -154,8 +154,8 @@ export const CharacterI = M.interface('character', { export const ItemI = M.interface('item', { mint: M.call().returns(M.promise()), - mintDefaultBatch: M.call().returns(M.promise(M.string())), - mintBatch: M.call().returns(M.promise(M.string())), + mintDefaultBatch: M.call(M.remotable()).returns(M.promise(M.string())), + mintBatch: M.call(M.remotable(), M.array()).returns(M.promise(M.string())), initializeBaseItems: M.call(M.arrayOf(ItemGuard)).returns(), }); @@ -203,8 +203,8 @@ export const MarketEntryGuard = M.splitRecord({ export const MarketI = M.interface('market', { sellItem: M.call().returns(M.promise()), buyItem: M.call().returns(M.promise()), - buyFirstSaleItem: M.call().returns(M.promise()), - buySecondarySaleItem: M.call().returns(M.promise()), + buyFirstSaleItem: M.call(M.remotable(), M.remotable(), M.record()).returns(M.promise()), + buySecondarySaleItem: M.call(M.remotable(), M.remotable(), M.record()).returns(M.promise()), handleExitItem: M.call(MarketEntryGuard).returns(), handleExitCharacter: M.call(MarketEntryGuard).returns(), makeMarketItemRecorderKit: M.call(M.number()).returns(M.promise()), diff --git a/agoric/contract/test/test-market.js b/agoric/contract/test/test-market.js index 079b84f99..3d4fa499f 100644 --- a/agoric/contract/test/test-market.js +++ b/agoric/contract/test/test-market.js @@ -10,6 +10,7 @@ import { makeCopyBag } from '@agoric/store'; import { errors } from '../src/errors.js'; import { defaultItems } from './items.js'; import { multiplyBy } from '@agoric/zoe/src/contractSupport/ratio.js'; +import { eventLoopIteration } from '@agoric/internal/src/testing-utils.js'; test.before(async (t) => { const bootstrap = await bootstrapContext(); @@ -277,6 +278,8 @@ test.serial('---| MARKET - Buy character', async (t) => { bob.depositPayment(bobsPayout); t.deepEqual(bob.getPaymentBalance(), 40n, 'Bob received payout'); + await eventLoopIteration(); + charactersForSale = await E(publicFacet).getCharactersForSale(); t.deepEqual( charactersForSale.length, @@ -649,6 +652,8 @@ test.serial( 'Alice received payout', ); + await eventLoopIteration(); + charactersForSale = await E(publicFacet).getCharactersForSale(); t.deepEqual( charactersForSale.length, diff --git a/agoric/package.json b/agoric/package.json index 66d5374a7..13ef46830 100644 --- a/agoric/package.json +++ b/agoric/package.json @@ -32,6 +32,34 @@ "dependencies": { "agoric": "agoric-upgrade-11" }, + "resolutions": { + "@agoric/assert": "dev", + "@agoric/cosmic-proto": "dev", + "@agoric/deploy-script-support": "dev", + "@agoric/ertp": "dev", + "@agoric/governance": "dev", + "@agoric/internal": "dev", + "@agoric/notifier": "dev", + "@agoric/store": "dev", + "@agoric/time": "dev", + "@agoric/vat-data": "dev", + "@agoric/vats": "dev", + "@agoric/zoe": "dev", + "@agoric/zone": "dev", + "@cosmjs/crypto": "^0.32.1", + "@cosmjs/encoding": "^0.32.1", + "@cosmjs/math": "^0.32.1", + "@cosmjs/proto-signing": "^0.32.1", + "@cosmjs/stargate": "^0.31.1", + "@endo/bundle-source": "^3.4.2", + "@endo/eventual-send": "^1.2.7", + "@endo/far": "^1.1.5", + "@endo/init": "^1.1.4", + "@endo/marshal": "^1.6.1", + "@endo/patterns": "^1.4.6", + "@endo/ses-ava": "^1.2.7", + "import-meta-resolve": "^2.2.1" + }, "scripts": { "lint": "yarn workspaces run lint-fix", "lint-check": "yarn workspaces run lint-check", diff --git a/agoric/yarn.lock b/agoric/yarn.lock index 28974260c..c7b173651 100644 --- a/agoric/yarn.lock +++ b/agoric/yarn.lock @@ -1,7281 +1,9957 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@agoric/access-token@^0.4.22-u11wf.0": - version "0.4.22-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/access-token/-/access-token-0.4.22-u11wf.0.tgz#e1af953b8ab9c8059eff60ae96ee0c359b58f965" - integrity sha512-5Q8y0ZfHH6fq+wCkCMuS5UfbzOkD8ifBXpmA3NfF9mlmYaB20UNhNBRGHbqzITK5Uzci4+rNo1XRNmG5XC46bg== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - n-readlines "^1.0.0" - tmp "^0.2.1" - -"@agoric/assert@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@agoric/assert/-/assert-0.6.0.tgz#43ede53cf0943f3e9038f597f776e52500446e41" - integrity sha512-bpY9ul5egbVlmdf9RtDfxh1WQaDSOCzqcAxyqE771rbkv+QYs46oZc4oUVHi7wt3g5LVXj/JsKgLkJEKpEl1BA== - -"@agoric/assert@^0.6.1-u11wf.0", "@agoric/assert@agoric-upgrade-11": - version "0.6.1-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/assert/-/assert-0.6.1-u11wf.0.tgz#742ae27103547b41cdbb3f17c4f09922a2d639e2" - integrity sha512-z/uq9ZkWWsBwMYLWg/X4AxEWwKv7HYU+0dCM98SZW8REK5BPhF/Vy9u0AuFLP8kwPdpp7WroYOSIVZ6xhLz0TQ== - -"@agoric/babel-generator@^7.17.4", "@agoric/babel-generator@^7.17.6": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@agoric/babel-generator/-/babel-generator-7.17.6.tgz#75ff4629468a481d670b4154bcfade11af6de674" - integrity sha512-D2wnk5fGajxMN5SCRSaA/triQGEaEX2Du0EzrRqobuD4wRXjvtF1e7jC1PPOk/RC2bZ8/0fzp0CHOiB7YLwb5w== - dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@agoric/cache@^0.3.3-u11wf.0", "@agoric/cache@^0.3.3-u12.0": - version "0.3.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/cache/-/cache-0.3.3-u13.0.tgz#6923a788477c5b0c63483116c12588ad1003f28a" - integrity sha512-oXVW6d+uysuAnyuPJqH/TckIOoQfz3ffED5vyfU825sFWu7V8e3n/bL++s5wFCETgF7TUH5MIFApMl5QzUGQpQ== - dependencies: - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/notifier" "^0.6.3-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - -"@agoric/casting@^0.4.3-u11wf.0", "@agoric/casting@^0.4.3-u12.0", "@agoric/casting@^0.4.3-u13.0": - version "0.4.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/casting/-/casting-0.4.3-u13.0.tgz#34c3df62e2455e139f548915190616771e57c9e1" - integrity sha512-c9Y9jaJ3w6oEl/6FUCA8TZnrLZEV6Lv9tn1g4of6H09EN0CBgSTqLqON+WV8Tobs3pxglYLGNJnT8DefOu0lBA== - dependencies: - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/notifier" "^0.6.3-u13.0" - "@agoric/spawner" "^0.6.9-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/proto-signing" "^0.30.1" - "@cosmjs/stargate" "^0.30.1" - "@cosmjs/tendermint-rpc" "^0.30.1" - "@endo/far" "0.2.18" - "@endo/init" "0.5.56" - "@endo/lockdown" "0.1.28" - "@endo/marshal" "0.8.5" - "@endo/promise-kit" "0.2.56" - node-fetch "^2.6.0" - -"@agoric/cosmic-proto@^0.3.0", "@agoric/cosmic-proto@agoric-upgrade-11": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@agoric/cosmic-proto/-/cosmic-proto-0.3.0.tgz#c9d31d3946c91fbb1630f89d8ba63a662bcdacc5" - integrity sha512-cIunby6gs53sGkHx3ALraREbfVQXvsIcObMjQQ0/tZt5HVqwoS7Y1Qj1Xl0ZZvqE8B1Zyk7QMDj829mbTII+9g== - dependencies: - protobufjs "^7.0.0" - -"@agoric/cosmic-swingset@^0.42.0-u11wf.0": - version "0.42.0-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/cosmic-swingset/-/cosmic-swingset-0.42.0-u13.0.tgz#75c28779ba635dc8cc3abfecf084b3e574ed5132" - integrity sha512-kdHBjFRUDVT6nFrYhGEB1WicCvdaXLdwfmsq2XVO1B8t8WoqOO8kZlbMQc1yH+z6eZDPMp+Qs0puQ5ecRRZ+Rw== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/cosmos" "^0.35.0-u13.0" - "@agoric/deploy-script-support" "^0.10.4-u13.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/swing-store" "^0.9.2-u13.0" - "@agoric/swingset-vat" "^0.32.3-u13.0" - "@agoric/telemetry" "^0.6.3-u13.0" - "@endo/far" "0.2.18" - "@endo/import-bundle" "0.3.4" - "@endo/init" "0.5.56" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - "@iarna/toml" "^2.2.3" - "@opentelemetry/api" "~1.3.0" - "@opentelemetry/sdk-metrics" "~1.9.0" - anylogger "^0.21.0" - deterministic-json "^1.0.5" - import-meta-resolve "^2.2.1" - tmp "^0.2.1" - -"@agoric/cosmic-swingset@agoric-upgrade-11": - version "0.42.0-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/cosmic-swingset/-/cosmic-swingset-0.42.0-u11wf.0.tgz#f116c10a9db416ebc364e7af948c6b2511c86b6c" - integrity sha512-hkuVYiXKTkzpDoYojpnjfmuLlu+/ls8WlOuacj8TlsayE8lCWntyglwGlLIcTEox803XPNpxGNbbof26fdwD0Q== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/cosmos" "^0.35.0-u11wf.0" - "@agoric/deploy-script-support" "^0.10.4-u11wf.0" - "@agoric/internal" "^0.3.3-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - "@agoric/swing-store" "^0.9.2-u11wf.0" - "@agoric/swingset-vat" "^0.32.3-u11wf.0" - "@agoric/telemetry" "^0.6.3-u11wf.0" - "@endo/far" "0.2.18" - "@endo/import-bundle" "0.3.4" - "@endo/init" "0.5.56" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - "@iarna/toml" "^2.2.3" - "@opentelemetry/api" "~1.3.0" - "@opentelemetry/sdk-metrics" "~1.9.0" - anylogger "^0.21.0" - deterministic-json "^1.0.5" - import-meta-resolve "^2.2.1" - tmp "^0.2.1" - -"@agoric/cosmos@^0.35.0-u11wf.0", "@agoric/cosmos@^0.35.0-u13.0": - version "0.35.0-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/cosmos/-/cosmos-0.35.0-u13.0.tgz#1d554175ccccaad49ba97b6a972b8589618f76c5" - integrity sha512-Jyojq78w5avgeiupZY+nJc3n5BxrH0sK9mjWir4oBwpbJBFn7d9wTwKuthmWeRWzWk0eRjRr3ZQTI2s9M6YbjQ== - dependencies: - bindings "^1.2.1" - napi-thread-safe-callback "0.0.6" - node-addon-api "^1.7.1" - -"@agoric/deploy-script-support@^0.10.4-u11wf.0", "@agoric/deploy-script-support@^0.10.4-u13.0": - version "0.10.4-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/deploy-script-support/-/deploy-script-support-0.10.4-u13.0.tgz#dd567cc5f9363ef8aa4f637f27d6b56f39e09e1f" - integrity sha512-ztx9j3NhUg27ZXrG0qG2Fwynnpoj0IASgih9CUFlnBn4mPpb89hGER9A9ltgZ8laaVpwPta5RrBnGf33s3fzHQ== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/ertp" "^0.16.3-u13.0" - "@agoric/import-manager" "^0.3.12-u13.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/notifier" "^0.6.3-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/zoe" "^0.26.3-u13.0" - "@endo/base64" "0.2.31" - "@endo/bundle-source" "2.5.2-upstream-rollup" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - "@endo/zip" "0.2.31" - -"@agoric/deploy-script-support@agoric-upgrade-11": - version "0.10.4-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/deploy-script-support/-/deploy-script-support-0.10.4-u11wf.0.tgz#248a0258a07b0f94d32d9a299db6c5946ecd944f" - integrity sha512-y07GvxupcUvj0ho3g19FZzIWJEbilF5kkW+8ruWpn7Emy5u+Sk8p/SETDPLurlSqIb1w8IN4vK9mQdzC1ygpxA== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/ertp" "^0.16.3-u11wf.0" - "@agoric/import-manager" "^0.3.12-u11wf.0" - "@agoric/internal" "^0.3.3-u11wf.0" - "@agoric/notifier" "^0.6.3-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - "@agoric/zoe" "^0.26.3-u11wf.0" - "@endo/base64" "0.2.31" - "@endo/bundle-source" "2.5.2-upstream-rollup" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - "@endo/zip" "0.2.31" - -"@agoric/ertp@^0.16.3-u11wf.0", "@agoric/ertp@^0.16.3-u12.0", "@agoric/ertp@^0.16.3-u13.0": - version "0.16.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/ertp/-/ertp-0.16.3-u13.0.tgz#569aaa6c932fd43e4a225ebd7c28079e960d6567" - integrity sha512-gvCE1n9n3cmNDJFkIiPgFKwEidGO00rwRB6Zj8lVo7Cul1fALvaEsHia3qXcgP7U7cZl83T6mpmUizLIBcbbnA== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/notifier" "^0.6.3-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/swingset-vat" "^0.32.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@endo/eventual-send" "0.17.2" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - -"@agoric/ertp@agoric-upgrade-11": - version "0.16.3-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/ertp/-/ertp-0.16.3-u11wf.0.tgz#febab178814ea4c0589eb96e70f89121634a2844" - integrity sha512-Zc4MopZmeQZIKEQQyo2PM0Mjumuo4j9vWSSwo5fd8y6zFciRsRmxEENSOnKwMYSx9NfMJnCLJ9olUvrKQx1B3w== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/notifier" "^0.6.3-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - "@agoric/swingset-vat" "^0.32.3-u11wf.0" - "@agoric/vat-data" "^0.5.3-u11wf.0" - "@endo/eventual-send" "0.17.2" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - -"@agoric/eslint-config@agoric-upgrade-11": - version "0.4.1-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/eslint-config/-/eslint-config-0.4.1-u11wf.0.tgz#dcb366e17619962e9ab3b276cc08ba4d3a26537b" - integrity sha512-hBpciqK5xkxrS3+HElOESCsx9bKAyQFFKQ3Hi0IfHB0XuiyfvqdgedHZftxOObkpO59RTzeA7gcquouaE1HKWw== - -"@agoric/governance@^0.10.4-u11wf.0", "@agoric/governance@^0.10.4-u13.0": - version "0.10.4-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/governance/-/governance-0.10.4-u13.0.tgz#a2c934739fd2fc277fe501e6287438784fcfea7f" - integrity sha512-hUcj1GNC2evSr1umFOXfN0Dr2Tu7OSkKx/x1E64/+hx63a0UKg/A8sdCQn7JSd9QXUWMf/+6/3xdL7ZOCfIueg== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/ertp" "^0.16.3-u13.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/notifier" "^0.6.3-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/swingset-vat" "^0.32.3-u13.0" - "@agoric/time" "^0.3.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@agoric/vats" "^0.15.2-u13.0" - "@agoric/zoe" "^0.26.3-u13.0" - "@endo/captp" "3.1.1" - "@endo/eventual-send" "0.17.2" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - -"@agoric/governance@agoric-upgrade-11": - version "0.10.4-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/governance/-/governance-0.10.4-u11wf.0.tgz#41ec833992899241c992f9d6ae373d471a039379" - integrity sha512-bTurIM1abVpof6MjJNx/ne4bZRlbO50j3ADe1ArPQud8L9WLqOCM3NDMlOnn79wWXnsIt+GheRPyUGKV24QtAQ== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/ertp" "^0.16.3-u11wf.0" - "@agoric/internal" "^0.3.3-u11wf.0" - "@agoric/notifier" "^0.6.3-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - "@agoric/swingset-vat" "^0.32.3-u11wf.0" - "@agoric/time" "^0.3.3-u11wf.0" - "@agoric/vat-data" "^0.5.3-u11wf.0" - "@agoric/vats" "^0.15.2-u11wf.0" - "@agoric/zoe" "^0.26.3-u11wf.0" - "@endo/captp" "3.1.1" - "@endo/eventual-send" "0.17.2" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - -"@agoric/import-manager@^0.3.12-u11wf.0", "@agoric/import-manager@^0.3.12-u13.0": - version "0.3.12-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/import-manager/-/import-manager-0.3.12-u13.0.tgz#69eba9b1293d6a4616bcefd4b6c538027394f746" - integrity sha512-AiQth7Wmsa49fGAh75sjcFFdeiMl4qtEu+WzGV5rzA7YBES6rwn557PY+lXFxYvjJTUwStyMBr+82sy6CqgWqg== - -"@agoric/inter-protocol@^0.16.2-u11wf.0", "@agoric/inter-protocol@^0.16.2-u12.0", "@agoric/inter-protocol@^0.16.2-u13.0": - version "0.16.2-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/inter-protocol/-/inter-protocol-0.16.2-u13.0.tgz#a91bf08245d4597788172e32883cbf677d34ed37" - integrity sha512-Bhumk8ceMRYFqBnb/zLNMk/TDMK+PoytWP9zPSQDSmQd020lj2uVYBIQeeAi2AoKvlhXqxVEPC1mydyKzGzW7w== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/ertp" "^0.16.3-u13.0" - "@agoric/governance" "^0.10.4-u13.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/notifier" "^0.6.3-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/time" "^0.3.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@agoric/vats" "^0.15.2-u13.0" - "@agoric/zoe" "^0.26.3-u13.0" - "@endo/captp" "3.1.1" - "@endo/eventual-send" "0.17.2" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - jessie.js "^0.3.2" - -"@agoric/internal@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@agoric/internal/-/internal-0.3.2.tgz#a1242947083ab46cbd34613add8bacbd0c9dc443" - integrity sha512-iCgZE2NabhDKBJ+EfTeVqWUcoNvgxNfnw/dMF57yKnRn3E9iOqt7Iyx+DloTGBu5a1ZyywdQo4G2cFWrMX3Q7g== - dependencies: - "@agoric/zone" "^0.2.2" - "@endo/far" "^0.2.18" - "@endo/marshal" "^0.8.5" - "@endo/patterns" "^0.2.2" - "@endo/promise-kit" "^0.2.56" - "@endo/stream" "^0.3.25" - anylogger "^0.21.0" - jessie.js "^0.3.2" - -"@agoric/internal@^0.3.3-u11wf.0", "@agoric/internal@agoric-upgrade-11": - version "0.3.3-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/internal/-/internal-0.3.3-u11wf.0.tgz#06646cfd645282275bc1b2a0f8da73364bdae423" - integrity sha512-Ae7IvjWRsrKtbjs5vLLTev4uMeX/JlOsPvXmfHXfoeqTa4chotrgIZWXuqyMotc6uTHY2xQyDhEKKkZbVflkvQ== - dependencies: - "@agoric/zone" "^0.2.3-u11wf.0" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/patterns" "0.2.2" - "@endo/promise-kit" "0.2.56" - "@endo/stream" "0.3.25" - anylogger "^0.21.0" - jessie.js "^0.3.2" - -"@agoric/internal@^0.4.0-u12.0", "@agoric/internal@^0.4.0-u13.0": - version "0.4.0-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/internal/-/internal-0.4.0-u13.0.tgz#ae20303d3e06206debab23f3ce6010bc939a39cb" - integrity sha512-gMl89J2DPorGfsVudaSh5UG7ddWvOA8Y6BUoB1CKOv4ronMFZmjoJwgDQCm24n5FW60T7g31U6xpHHBAklRpWQ== - dependencies: - "@agoric/zone" "^0.2.3-u13.0" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/patterns" "0.2.2" - "@endo/promise-kit" "0.2.56" - "@endo/stream" "0.3.25" - anylogger "^0.21.0" - jessie.js "^0.3.2" - -"@agoric/notifier@^0.6.3-u11wf.0", "@agoric/notifier@^0.6.3-u13.0": - version "0.6.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/notifier/-/notifier-0.6.3-u13.0.tgz#fe9bfd05dd3bb2af459ef44e231ddacc995c4cf8" - integrity sha512-H/DOZ6KY/c+k+aWAT0vOnlO+vtSJlO7XKK8TMDImxExzRNZ0AXyTHVfLgPBmoUaqCxx6d9tupN7Do25PBvvPHg== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/swing-store" "^0.9.2-u13.0" - "@agoric/swingset-vat" "^0.32.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/promise-kit" "0.2.56" - -"@agoric/notifier@agoric-upgrade-11": - version "0.6.3-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/notifier/-/notifier-0.6.3-u11wf.0.tgz#b3b273cb35b080aa15199be30927f1af00e9f85f" - integrity sha512-p3xcUxHfhsL1c1nB4lY7+0gD0QmTT+uU1HCnsvcFZXa2LJsDqtZ/j+gh6DN8EoBbZoay0IauDZ0CIUoCa4ngBg== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/internal" "^0.3.3-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - "@agoric/swing-store" "^0.9.2-u11wf.0" - "@agoric/swingset-vat" "^0.32.3-u11wf.0" - "@agoric/vat-data" "^0.5.3-u11wf.0" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/promise-kit" "0.2.56" - -"@agoric/sharing-service@^0.2.12-u11wf.0", "@agoric/sharing-service@^0.2.12-u13.0": - version "0.2.12-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/sharing-service/-/sharing-service-0.2.12-u13.0.tgz#8a315287e96d285c8ecf55e1ec7ab0c5771b2092" - integrity sha512-rZpfYehrZpuvjUMOwsVfK9DJ0LYPKkd489DlqbULR29ywBqrSSCJsUgElMH22xIes6baLBw4TX8TPn7havkYdw== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@endo/marshal" "0.8.5" - -"@agoric/smart-wallet@^0.5.4-u11wf.0", "@agoric/smart-wallet@^0.5.4-u12.0": - version "0.5.4-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/smart-wallet/-/smart-wallet-0.5.4-u13.0.tgz#3f47608a71d7c22696e442cdf66c840821c14b37" - integrity sha512-/BI+47ZSXCloLS6vjkVSG9a1/EzT9RCJWTY5+UHXoqCG8UiPiQtmzZivRptgSJylxw+gikOfj32w/mD/EfriSQ== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/casting" "^0.4.3-u13.0" - "@agoric/ertp" "^0.16.3-u13.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/notifier" "^0.6.3-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/swingset-vat" "^0.32.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@agoric/vats" "^0.15.2-u13.0" - "@agoric/zoe" "^0.26.3-u13.0" - "@endo/eventual-send" "0.17.2" - "@endo/far" "0.2.18" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - -"@agoric/solo@agoric-upgrade-11": - version "0.10.4-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/solo/-/solo-0.10.4-u11wf.0.tgz#12feb728ba6f491a0fcb24d4296775ccfe3d56fc" - integrity sha512-KdCkr7h5Wi6xQ8WlcPbhCNnMYaM2rZtPSF1p9SVOcU5ipF81cDSHvWQ68HkllEiCE6j1P6d8D69YuHw1MBOm4w== - dependencies: - "@agoric/access-token" "^0.4.22-u11wf.0" - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/cache" "^0.3.3-u11wf.0" - "@agoric/cosmic-swingset" "^0.42.0-u11wf.0" - "@agoric/internal" "^0.3.3-u11wf.0" - "@agoric/notifier" "^0.6.3-u11wf.0" - "@agoric/spawner" "^0.6.9-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - "@agoric/swing-store" "^0.9.2-u11wf.0" - "@agoric/swingset-vat" "^0.32.3-u11wf.0" - "@agoric/telemetry" "^0.6.3-u11wf.0" - "@agoric/time" "^0.3.3-u11wf.0" - "@agoric/vats" "^0.15.2-u11wf.0" - "@agoric/wallet" "^0.18.4-u11wf.0" - "@endo/captp" "3.1.1" - "@endo/eventual-send" "0.17.2" - "@endo/import-bundle" "0.3.4" - "@endo/init" "0.5.56" - "@endo/marshal" "0.8.5" - "@endo/promise-kit" "0.2.56" - agoric "^0.21.2-u11wf.0" - anylogger "^0.21.0" - deterministic-json "^1.0.5" - esm agoric-labs/esm#Agoric-built - express "^4.17.1" - http-proxy-middleware "^2.0.6" - import-meta-resolve "^2.2.1" - minimist "^1.2.0" - morgan "^1.9.1" - node-fetch "^2.6.0" - temp "^0.9.1" - tmp "^0.2.1" - ws "^7.2.0" - -"@agoric/spawner@^0.6.9-u11wf.0", "@agoric/spawner@^0.6.9-u13.0": - version "0.6.9-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/spawner/-/spawner-0.6.9-u13.0.tgz#d1754c9abe392458b5050bd178c1a6d8163d08b5" - integrity sha512-gVlb5S3tEfHe9KByrrbhDipUjYaeGq7W1VQQWMSf6pNHTbnXLGHX3My9QyYvetcHreMA8AJpXqqi29eq9YoiWw== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@endo/eventual-send" "0.17.2" - "@endo/import-bundle" "0.3.4" - "@endo/marshal" "0.8.5" - -"@agoric/store@^0.9.2": - version "0.9.2" - resolved "https://registry.yarnpkg.com/@agoric/store/-/store-0.9.2.tgz#0973e57b8811a70923c141fccfb002bbad8fed4b" - integrity sha512-9YtBlQG1cO7COfprPqBUYDW1Jg805Ick1RHm8Etj5VyfkhF8emhv/OqJKi4FMlA3XDVL3Yvbptrjvdo1WjCvjg== - dependencies: - "@agoric/assert" "^0.6.0" - "@agoric/internal" "^0.3.2" - "@endo/eventual-send" "^0.17.2" - "@endo/exo" "^0.2.2" - "@endo/far" "^0.2.18" - "@endo/marshal" "^0.8.5" - "@endo/pass-style" "^0.1.3" - "@endo/patterns" "^0.2.2" - "@endo/promise-kit" "^0.2.56" - "@fast-check/ava" "^1.1.3" - -"@agoric/store@^0.9.3-u11wf.0", "@agoric/store@^0.9.3-u12.0", "@agoric/store@^0.9.3-u13.0": - version "0.9.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/store/-/store-0.9.3-u13.0.tgz#74cb56021aaa7ab137400dfe2652e2f278f421e2" - integrity sha512-ec7dCFWdhrEOSIolrGCzb6E/Pqd1q6trNkl16v/TLR0xt7FS903TfexX4kDJqYIgw0KrFS0QgXu+odcB2kpQCw== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@endo/exo" "0.2.2" - "@endo/marshal" "0.8.5" - "@endo/pass-style" "0.1.3" - "@endo/patterns" "0.2.2" - -"@agoric/store@agoric-upgrade-11": - version "0.9.3-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/store/-/store-0.9.3-u11wf.0.tgz#1214fa39bdf433d4c9afb8381cbe4e63eae66e82" - integrity sha512-AR1shAI+4Yt5ZBWyfeJ1erXn8qbAygoym1E4JXqTop+SKUgubc8a7utdL9BBGAoKi3afMC+rx24IAALbpclp7Q== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@endo/exo" "0.2.2" - "@endo/marshal" "0.8.5" - "@endo/pass-style" "0.1.3" - "@endo/patterns" "0.2.2" - -"@agoric/swing-store@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@agoric/swing-store/-/swing-store-0.9.1.tgz#0ed85beac7a7cd2e8e7507ea58e50eecb08a203e" - integrity sha512-GRgXOJwEnFSX3gY2sOhHs1yO503ltUVjslSeSWFHd8bmrPs11igIYRES7Vx4lOSQuNmGe5mKFhgfDnoHPmKxjQ== - dependencies: - "@agoric/assert" "^0.6.0" - "@agoric/internal" "^0.3.2" - "@endo/base64" "^0.2.31" - "@endo/bundle-source" "^2.5.1" - "@endo/check-bundle" "^0.2.18" - "@endo/nat" "^4.1.27" - better-sqlite3 "^8.2.0" - -"@agoric/swing-store@^0.9.2-u11wf.0", "@agoric/swing-store@^0.9.2-u13.0": - version "0.9.2-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/swing-store/-/swing-store-0.9.2-u13.0.tgz#f3150afc7de49488a98ccd23456a804ddbdb6e09" - integrity sha512-sJJlQ3HdGwZOFjIQBXW+LWDnFURzo5EYh0F9td7AYmQEZ1ZmlooH2pj0/ypGuC0r4O8eupmAQLqKQsXPSiDdeA== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/internal" "^0.4.0-u13.0" - "@endo/base64" "0.2.31" - "@endo/bundle-source" "2.5.2-upstream-rollup" - "@endo/check-bundle" "0.2.18" - "@endo/nat" "4.1.27" - better-sqlite3 "^8.2.0" - -"@agoric/swingset-liveslots@^0.10.2": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@agoric/swingset-liveslots/-/swingset-liveslots-0.10.2.tgz#a8d18f32ff7a611b9945f4ff920b00b9e2801e08" - integrity sha512-jp05WNHEUH5K8MgiIoHhNrWu7ozKqStyIe0Ex6ejSInFFo/NhJLVL7QLyUgRjD74RbUSuvbR8v8PaQ/pslVI0Q== - dependencies: - "@agoric/assert" "^0.6.0" - "@agoric/internal" "^0.3.2" - "@agoric/store" "^0.9.2" - "@agoric/vat-data" "^0.5.2" - "@endo/eventual-send" "^0.17.2" - "@endo/exo" "^0.2.2" - "@endo/init" "^0.5.56" - "@endo/marshal" "^0.8.5" - "@endo/nat" "^4.1.27" - "@endo/pass-style" "^0.1.3" - "@endo/patterns" "^0.2.2" - "@endo/promise-kit" "^0.2.56" - -"@agoric/swingset-liveslots@^0.10.3-u13.0": - version "0.10.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/swingset-liveslots/-/swingset-liveslots-0.10.3-u13.0.tgz#55f0e02e1cdc214068bd948fb421c980b38804bd" - integrity sha512-csSD/nPwfOC5tgqN+e4TKFidFI3pHRQjo3WRMgeduU5+NIHEMcIyXHFLyQvuLTRhfb/5b81T8imubr5hN6itzw== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@endo/eventual-send" "0.17.2" - "@endo/exo" "0.2.2" - "@endo/far" "0.2.18" - "@endo/init" "0.5.56" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/pass-style" "0.1.3" - "@endo/patterns" "0.2.2" - "@endo/promise-kit" "0.2.56" - -"@agoric/swingset-vat@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@agoric/swingset-vat/-/swingset-vat-0.32.2.tgz#5228855132ab2701223316d86eeaef410ec6b4b6" - integrity sha512-aYIhyYCuI7Oi47DBqn8wqMFnQOeOxSB7GU69wOQcQIoJVWRhOECDuFzoEqdV6G8xwGIsGpX/fMtXT9A1YAy6ZA== - dependencies: - "@agoric/assert" "^0.6.0" - "@agoric/internal" "^0.3.2" - "@agoric/store" "^0.9.2" - "@agoric/swing-store" "^0.9.1" - "@agoric/swingset-liveslots" "^0.10.2" - "@agoric/swingset-xsnap-supervisor" "^0.10.2" - "@agoric/time" "^0.3.2" - "@agoric/vat-data" "^0.5.2" - "@agoric/xsnap" "^0.14.2" - "@agoric/xsnap-lockdown" "^0.14.0" - "@endo/base64" "^0.2.31" - "@endo/bundle-source" "^2.5.1" - "@endo/captp" "^3.1.1" - "@endo/check-bundle" "^0.2.18" - "@endo/compartment-mapper" "^0.8.4" - "@endo/eventual-send" "^0.17.2" - "@endo/far" "^0.2.18" - "@endo/import-bundle" "^0.3.4" - "@endo/init" "^0.5.56" - "@endo/marshal" "^0.8.5" - "@endo/nat" "^4.1.27" - "@endo/promise-kit" "^0.2.56" - "@endo/zip" "^0.2.31" - ansi-styles "^6.2.1" - anylogger "^0.21.0" - import-meta-resolve "^2.2.1" - microtime "^3.1.0" - semver "^6.3.0" - tmp "^0.2.1" - -"@agoric/swingset-vat@^0.32.3-u11wf.0", "@agoric/swingset-vat@^0.32.3-u12.0", "@agoric/swingset-vat@^0.32.3-u13.0": - version "0.32.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/swingset-vat/-/swingset-vat-0.32.3-u13.0.tgz#224c02d744009a550e6162307b8adc11a4b23a9c" - integrity sha512-UY/N9QcJO3VRNC3xKoWxl81TQKbtcuXLmY+A1DgoHqdCBWxzmgSZXAVfRhAloWZUzkTIrYHV4sFpx2ewijdj9A== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/swing-store" "^0.9.2-u13.0" - "@agoric/swingset-liveslots" "^0.10.3-u13.0" - "@agoric/swingset-xsnap-supervisor" "^0.10.3-u13.0" - "@agoric/time" "^0.3.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@agoric/xsnap" "^0.14.3-u13.0" - "@agoric/xsnap-lockdown" "^0.14.1-u13.0" - "@endo/base64" "0.2.31" - "@endo/bundle-source" "2.5.2-upstream-rollup" - "@endo/captp" "3.1.1" - "@endo/check-bundle" "0.2.18" - "@endo/compartment-mapper" "0.8.4" - "@endo/eventual-send" "0.17.2" - "@endo/far" "0.2.18" - "@endo/import-bundle" "0.3.4" - "@endo/init" "0.5.56" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - "@endo/ses-ava" "0.2.40" - "@endo/zip" "0.2.31" - ansi-styles "^6.2.1" - anylogger "^0.21.0" - import-meta-resolve "^2.2.1" - microtime "^3.1.0" - semver "^6.3.0" - tmp "^0.2.1" - -"@agoric/swingset-xsnap-supervisor@^0.10.2": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@agoric/swingset-xsnap-supervisor/-/swingset-xsnap-supervisor-0.10.2.tgz#09f067695b0ea6ebfeb6ea200cc7f1675f0f8939" - integrity sha512-3PB15aiNHfjTYmtUz9Rxmm6qSHnoO5w5dygRzjx2ytk8yoNn/ZOpxlIOLonhD8kwOaEli5D7btY9OA3jf+Sm6w== - -"@agoric/swingset-xsnap-supervisor@^0.10.3-u13.0": - version "0.10.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/swingset-xsnap-supervisor/-/swingset-xsnap-supervisor-0.10.3-u13.0.tgz#83c7744c28b0093a93ef1dbdf3e3c7244dbf5265" - integrity sha512-gEIOlyLd34JZkVRPWq9982Eu7G4ggE6H3I3RueO9JbbhOXwU+irYL922t0Ztdjc9aJW2H5f78ukcn9j1SZmtHQ== - -"@agoric/telemetry@^0.6.3-u11wf.0", "@agoric/telemetry@^0.6.3-u13.0": - version "0.6.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/telemetry/-/telemetry-0.6.3-u13.0.tgz#8349c62b62672e51afb3df1f24a27df42a2e75cf" - integrity sha512-2OKKgWx96HODMs4WoFxpDpSrBqYaEVKwvqunQjdjf+f2+CAqrjmdEqBtKwNDlPpCG8r7GyU/f5BXdtGYgW5DzA== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@endo/init" "0.5.56" - "@endo/marshal" "0.8.5" - "@endo/stream" "0.3.25" - "@opentelemetry/api" "~1.3.0" - "@opentelemetry/exporter-prometheus" "~0.35.0" - "@opentelemetry/exporter-trace-otlp-http" "~0.35.0" - "@opentelemetry/resources" "~1.9.0" - "@opentelemetry/sdk-metrics" "~1.9.0" - "@opentelemetry/sdk-trace-base" "~1.9.0" - "@opentelemetry/semantic-conventions" "~1.9.0" - anylogger "^0.21.0" - better-sqlite3 "^8.2.0" - bufferfromfile agoric-labs/BufferFromFile#Agoric-built - tmp "^0.2.1" - -"@agoric/time@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@agoric/time/-/time-0.3.2.tgz#9231eec197e10b52a9f416ec2afe929b67f7165c" - integrity sha512-qRgvfD/gQJNQaWk0uQqPhq0IGbIABz1z6oFtAhGkylU6zNO/no6VpJG4gw5YwEO8mIAJVOM5HE3qL53AaENYkw== - dependencies: - "@agoric/assert" "^0.6.0" - "@agoric/store" "^0.9.2" - "@endo/nat" "^4.1.27" - -"@agoric/time@^0.3.3-u11wf.0", "@agoric/time@^0.3.3-u13.0": - version "0.3.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/time/-/time-0.3.3-u13.0.tgz#41a412c69c5cbc64cb7b47908266fbbad42c600f" - integrity sha512-quMGP2E/hiO9GYSBcr5jeKccbg4K8Ya6320B/pennPTC7/UT8YoHZkdVd5OwZNXR+MEL7Z56KajcjCSacPbT6A== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/store" "^0.9.3-u13.0" - "@endo/nat" "4.1.27" - -"@agoric/time@agoric-upgrade-11": - version "0.3.3-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/time/-/time-0.3.3-u11wf.0.tgz#36a6bc4ea1bafd135419052191bfc3d882c0fcf2" - integrity sha512-UmNoNwWZRVG5DpksEz8xk6vGa+7Ng4ApBDoecxUSri/QnB0zW+Dyq61bGUUYxffiJe3fZkZO+WYi4h5P9k6LGw== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - "@endo/nat" "4.1.27" - -"@agoric/vat-data@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@agoric/vat-data/-/vat-data-0.5.2.tgz#abafab83279552466cf4ca946faa175a0a1423dc" - integrity sha512-j71bSl7oPcWikR4bP15KMu67D3BLGLhEOcqgewC1cArcE99rhxDU19ALN0OITD0F0KkNCahRNifoIr73n/fBng== - dependencies: - "@agoric/assert" "^0.6.0" - "@agoric/internal" "^0.3.2" - "@agoric/store" "^0.9.2" - -"@agoric/vat-data@^0.5.3-u11wf.0", "@agoric/vat-data@^0.5.3-u13.0": - version "0.5.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/vat-data/-/vat-data-0.5.3-u13.0.tgz#a784c4624b8cb10d153bdd137e0f3886af2760f8" - integrity sha512-snvf48nRaqZqSR/jyYPk4Lc4dW+b2mSIwtQA1tevx4rQtY2u6vlbAPSKBwJsA2gbRyUaGvo2Wc8oBGOFlww2Xg== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/store" "^0.9.3-u13.0" - -"@agoric/vat-data@agoric-upgrade-11": - version "0.5.3-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/vat-data/-/vat-data-0.5.3-u11wf.0.tgz#ff64080bae8fdfc4f1634559433b27aaa23a7089" - integrity sha512-9Rv1pmus9ylEqe+J2bqazSAkRzGmn3/uMwli/np0LSdPXcLCSBiONKPJJQUFhu2nEKzxIDdMfEPHBJD68eVd7w== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/internal" "^0.3.3-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - -"@agoric/vats@^0.15.2-u11wf.0", "@agoric/vats@^0.15.2-u12.0", "@agoric/vats@^0.15.2-u13.0": - version "0.15.2-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/vats/-/vats-0.15.2-u13.0.tgz#a6f78040c2054b65dda189e55c1d5ec61eec7845" - integrity sha512-bwA5m9D3pEIbbBNrAMb3S7YiGa5IyxJZj/jqJSI7xOAW4ASX6jHC4G5XJHrTI3BaSqLby/t4Vsj/2ej8GO+9VA== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/ertp" "^0.16.3-u13.0" - "@agoric/governance" "^0.10.4-u13.0" - "@agoric/inter-protocol" "^0.16.2-u13.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/notifier" "^0.6.3-u13.0" - "@agoric/sharing-service" "^0.2.12-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/swingset-vat" "^0.32.3-u13.0" - "@agoric/time" "^0.3.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@agoric/zoe" "^0.26.3-u13.0" - "@agoric/zone" "^0.2.3-u13.0" - "@endo/far" "0.2.18" - "@endo/import-bundle" "0.3.4" - "@endo/init" "0.5.56" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - jessie.js "^0.3.2" - -"@agoric/vats@agoric-upgrade-11": - version "0.15.2-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/vats/-/vats-0.15.2-u11wf.0.tgz#5962b81673675568261ffcfce65ded2831e82146" - integrity sha512-tPkwSYdqezCWKj3d3SVZp9UliDtv60IO/jaNKU0sCsBCUInv9pFBcGIkSRNM5mXcXhFMpv4XVhLxDG3qfV5P3w== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/ertp" "^0.16.3-u11wf.0" - "@agoric/governance" "^0.10.4-u11wf.0" - "@agoric/inter-protocol" "^0.16.2-u11wf.0" - "@agoric/internal" "^0.3.3-u11wf.0" - "@agoric/notifier" "^0.6.3-u11wf.0" - "@agoric/sharing-service" "^0.2.12-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - "@agoric/swingset-vat" "^0.32.3-u11wf.0" - "@agoric/time" "^0.3.3-u11wf.0" - "@agoric/vat-data" "^0.5.3-u11wf.0" - "@agoric/zoe" "^0.26.3-u11wf.0" - "@agoric/zone" "^0.2.3-u11wf.0" - "@endo/far" "0.2.18" - "@endo/import-bundle" "0.3.4" - "@endo/init" "0.5.56" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - jessie.js "^0.3.2" - -"@agoric/wallet-ui@0.1.3-solo.0": - version "0.1.3-solo.0" - resolved "https://registry.yarnpkg.com/@agoric/wallet-ui/-/wallet-ui-0.1.3-solo.0.tgz#5f05c3dd2820d4f1efcbccbd2dc1292847ecbd2b" - integrity sha512-NbhCrTH9u2af+6ituM99M8Mo10VOP1nQRTZoYEXW+esBwJId/7cRniMmAC7qmkbXs8POA31S8EQ5gAhkWq08WA== - -"@agoric/wallet@^0.18.4-u11wf.0": - version "0.18.4-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/wallet/-/wallet-0.18.4-u13.0.tgz#123934e8e536715acb61a718fd8af817b5f52c29" - integrity sha512-hWJJimbT1kTjcdJcd3iYKgZ24JRjtxyiu0lWTcXwqUaLWv3PAVBj4RssdgKtjy/EiP/UQwhEzbYYNBaWjgZsng== - dependencies: - "@agoric/wallet-ui" "0.1.3-solo.0" - babel-eslint "^10.0.3" - eslint-plugin-eslint-comments "^3.1.2" - import-meta-resolve "^2.2.1" - -"@agoric/xsnap-lockdown@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@agoric/xsnap-lockdown/-/xsnap-lockdown-0.14.0.tgz#0c605bbd08e6ccf1954a615dbce7d4c0fe578a32" - integrity sha512-T8kYrW1baTDQTkQJ9mDp1ME2Ive3RNNRFU7PXuu60Pu9A/tWliYKiJWwqcGhYAQOkHxxFz0BVwk9Jf8HErzgRA== - -"@agoric/xsnap-lockdown@^0.14.1-u13.0": - version "0.14.1-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/xsnap-lockdown/-/xsnap-lockdown-0.14.1-u13.0.tgz#0bc11a4d19d02a77cd9158dda3877c2ddc1ef8d4" - integrity sha512-CUd4u1vyqSJfxj2+krNMBmDXlR7yN87RJsmB03ISPs8GuhjIrbdgkU+UfoKIJFLYco2ZSX7vR9j8l6azyVan1Q== - -"@agoric/xsnap@^0.14.2": - version "0.14.2" - resolved "https://registry.yarnpkg.com/@agoric/xsnap/-/xsnap-0.14.2.tgz#0685b1c85af986edc3e5f226fd4e96c44df32bf0" - integrity sha512-bA4IZJixw8uCcDBqA9KUKEnxjB65pdkWb5xL0a4XM//QvIzYmB6EGJ80U+pbMOrjGtomUqo0Oxdc5X/PhAniSg== - dependencies: - "@agoric/assert" "^0.6.0" - "@agoric/internal" "^0.3.2" - "@agoric/xsnap-lockdown" "^0.14.0" - "@endo/bundle-source" "^2.5.1" - "@endo/eventual-send" "^0.17.2" - "@endo/init" "^0.5.56" - "@endo/netstring" "^0.3.26" - "@endo/promise-kit" "^0.2.56" - "@endo/stream" "^0.3.25" - "@endo/stream-node" "^0.2.26" - glob "^7.1.6" - tmp "^0.2.1" - -"@agoric/xsnap@^0.14.3-u13.0": - version "0.14.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/xsnap/-/xsnap-0.14.3-u13.0.tgz#fbff403c3df5d4f349d67bed62edb9cc39b20304" - integrity sha512-E9NP2Q4cPHesIeZNPnMmA+eWFZcDqNBue0VP0GiI4qUbHjz8uJS7YV/thZjDxJvnfXgT4wmIx8v11pkMp/+EKw== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/xsnap-lockdown" "^0.14.1-u13.0" - "@endo/bundle-source" "2.5.2-upstream-rollup" - "@endo/eventual-send" "0.17.2" - "@endo/init" "0.5.56" - "@endo/netstring" "0.3.26" - "@endo/promise-kit" "0.2.56" - "@endo/stream" "0.3.25" - "@endo/stream-node" "0.2.26" - glob "^7.1.6" - tmp "^0.2.1" - -"@agoric/zoe@^0.26.3-u11wf.0", "@agoric/zoe@^0.26.3-u12.0", "@agoric/zoe@^0.26.3-u13.0": - version "0.26.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/zoe/-/zoe-0.26.3-u13.0.tgz#8229b30c00a3ad3d808e4ea1f1933f17fb83897f" - integrity sha512-5KspYaErr/OPWewRpVG962tOJSTDSiyZ2NrQ+x/CV87COBMh4OmQBm9rlfw0ubPRg5ncKhm6mF1XHhr/y/BZlA== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/ertp" "^0.16.3-u13.0" - "@agoric/internal" "^0.4.0-u13.0" - "@agoric/notifier" "^0.6.3-u13.0" - "@agoric/store" "^0.9.3-u13.0" - "@agoric/swingset-vat" "^0.32.3-u13.0" - "@agoric/time" "^0.3.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@endo/bundle-source" "2.5.2-upstream-rollup" - "@endo/captp" "3.1.1" - "@endo/eventual-send" "0.17.2" - "@endo/far" "0.2.18" - "@endo/import-bundle" "0.3.4" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/patterns" "0.2.2" - "@endo/promise-kit" "0.2.56" - -"@agoric/zoe@agoric-upgrade-11": - version "0.26.3-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/zoe/-/zoe-0.26.3-u11wf.0.tgz#1428ef1ad1306b69133399977c2e0a3643ea7c27" - integrity sha512-8YfyBAqQ47nXwW6fO4fYlwhrQQVHmUgds6eVWH0FmOXEvSs4pGiwHIiEX8GJCIABHGD0ZpCl6wPlsoIIofNhTw== - dependencies: - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/ertp" "^0.16.3-u11wf.0" - "@agoric/internal" "^0.3.3-u11wf.0" - "@agoric/notifier" "^0.6.3-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - "@agoric/swingset-vat" "^0.32.3-u11wf.0" - "@agoric/time" "^0.3.3-u11wf.0" - "@agoric/vat-data" "^0.5.3-u11wf.0" - "@endo/bundle-source" "2.5.2-upstream-rollup" - "@endo/captp" "3.1.1" - "@endo/eventual-send" "0.17.2" - "@endo/far" "0.2.18" - "@endo/import-bundle" "0.3.4" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/patterns" "0.2.2" - "@endo/promise-kit" "0.2.56" - -"@agoric/zone@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@agoric/zone/-/zone-0.2.2.tgz#df5cc091d4a83842b87888e74159a723a424a82e" - integrity sha512-joVRnwH55xOeaoO2xYd1TWXXLPQ9pAeNsaiwTjO3FufYb/q55rv9mpYdUdhEy+zYQuFpPH87+6w/o3f/0AXrDQ== - dependencies: - "@agoric/store" "^0.9.2" - "@agoric/vat-data" "^0.5.2" - "@endo/far" "^0.2.18" - -"@agoric/zone@^0.2.3-u11wf.0", "@agoric/zone@^0.2.3-u12.0", "@agoric/zone@^0.2.3-u13.0": - version "0.2.3-u13.0" - resolved "https://registry.yarnpkg.com/@agoric/zone/-/zone-0.2.3-u13.0.tgz#218e6372bfd44122ca0a0524649f1b3acbd40c52" - integrity sha512-NfH7fCrSI7wQ8wun8fhRBXEQdqkmjf4OdPXLwProYoxBIEJ4eML/CiGBDpE6DBeGDyS0YfJExcp7HV9nFsYi7g== - dependencies: - "@agoric/store" "^0.9.3-u13.0" - "@agoric/vat-data" "^0.5.3-u13.0" - "@endo/far" "0.2.18" - -"@agoric/zone@agoric-upgrade-11": - version "0.2.3-u11wf.0" - resolved "https://registry.yarnpkg.com/@agoric/zone/-/zone-0.2.3-u11wf.0.tgz#329fb94835f930799e8f2607ea3b92be54bb6b5c" - integrity sha512-p5d4lWDzrw0AIt7Rxe82LKgRuFJyhO4QTzdOQgX5NuaEwu2WxI1JLAqOrQXrA2QRs8u9Q4MKsftbM4fEmEuTNA== - dependencies: - "@agoric/store" "^0.9.3-u11wf.0" - "@agoric/vat-data" "^0.5.3-u11wf.0" - "@endo/far" "0.2.18" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/generator@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== - dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.17.3", "@babel/parser@^7.23.9", "@babel/parser@^7.7.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== - -"@babel/runtime@^7.23.2": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" - integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - -"@babel/traverse@^7.17.3", "@babel/traverse@^7.7.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.17.0", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.7.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@colors/colors@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" - integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== - -"@confio/ics23@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@confio/ics23/-/ics23-0.6.8.tgz#2a6b4f1f2b7b20a35d9a0745bb5a446e72930b3d" - integrity sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w== - dependencies: - "@noble/hashes" "^1.0.0" - protobufjs "^6.8.8" - -"@confio/relayer@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@confio/relayer/-/relayer-0.9.0.tgz#d0f9917f2a1b02e15d33dacb3e044d358022a9a9" - integrity sha512-YfoPMCH72BM/bYQ58+F75zYsZ2vEPocY0CaQLE6PPDtBOKrdXM3LTj5zUdZSbHDQSrDDmRrKcuZVufpdrRimQw== - dependencies: - "@cosmjs/cosmwasm-stargate" "^0.30.0" - "@cosmjs/crypto" "^0.30.0" - "@cosmjs/encoding" "^0.30.0" - "@cosmjs/faucet-client" "^0.30.0" - "@cosmjs/math" "^0.30.0" - "@cosmjs/proto-signing" "^0.30.0" - "@cosmjs/stargate" "^0.30.0" - "@cosmjs/stream" "^0.30.0" - "@cosmjs/tendermint-rpc" "^0.30.0" - "@cosmjs/utils" "^0.30.0" - ajv "7.1.1" - axios "0.21.4" - commander "7.1.0" - cosmjs-types "^0.7.1" - fast-safe-stringify "2.0.4" - js-yaml "4.0.0" - lodash "4.17.21" - prom-client "13.1.0" - protobufjs "^6.10.3" - table "^6.7.1" - triple-beam "1.3.0" - winston "3.3.3" - -"@cosmjs/amino@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.30.1.tgz#7c18c14627361ba6c88e3495700ceea1f76baace" - integrity sha512-yNHnzmvAlkETDYIpeCTdVqgvrdt1qgkOXwuRVi8s27UKI5hfqyE9fJ/fuunXE6ZZPnKkjIecDznmuUOMrMvw4w== - dependencies: - "@cosmjs/crypto" "^0.30.1" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/utils" "^0.30.1" - -"@cosmjs/amino@^0.31.3": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.31.3.tgz#0f4aa6bd68331c71bd51b187fa64f00eb075db0a" - integrity sha512-36emtUq895sPRX8PTSOnG+lhJDCVyIcE0Tr5ct59sUbgQiI14y43vj/4WAlJ/utSOxy+Zhj9wxcs4AZfu0BHsw== - dependencies: - "@cosmjs/crypto" "^0.31.3" - "@cosmjs/encoding" "^0.31.3" - "@cosmjs/math" "^0.31.3" - "@cosmjs/utils" "^0.31.3" - -"@cosmjs/amino@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.32.2.tgz#ba3cf255e4e6b1ba67461f1ef7b0b8ad3f895da7" - integrity sha512-lcK5RCVm4OfdAooxKcF2+NwaDVVpghOq6o/A40c2mHXDUzUoRZ33VAHjVJ9Me6vOFxshrw/XEFn1f4KObntjYA== - dependencies: - "@cosmjs/crypto" "^0.32.2" - "@cosmjs/encoding" "^0.32.2" - "@cosmjs/math" "^0.32.2" - "@cosmjs/utils" "^0.32.2" - -"@cosmjs/cosmwasm-stargate@^0.30.0": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.30.1.tgz#6f9ca310f75433a3e30d683bc6aa24eadb345d79" - integrity sha512-W/6SLUCJAJGBN+sJLXouLZikVgmqDd9LCdlMzQaxczcCHTWeJAmRvOiZGSZaSy3shw/JN1qc6g6PKpvTVgj10A== - dependencies: - "@cosmjs/amino" "^0.30.1" - "@cosmjs/crypto" "^0.30.1" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/proto-signing" "^0.30.1" - "@cosmjs/stargate" "^0.30.1" - "@cosmjs/tendermint-rpc" "^0.30.1" - "@cosmjs/utils" "^0.30.1" - cosmjs-types "^0.7.1" - long "^4.0.0" - pako "^2.0.2" - -"@cosmjs/crypto@^0.30.0", "@cosmjs/crypto@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.30.1.tgz#21e94d5ca8f8ded16eee1389d2639cb5c43c3eb5" - integrity sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ== - dependencies: - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/utils" "^0.30.1" - "@noble/hashes" "^1" - bn.js "^5.2.0" - elliptic "^6.5.4" - libsodium-wrappers "^0.7.6" - -"@cosmjs/crypto@^0.31.3": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.31.3.tgz#c752cb6d682fdc735dcb45a2519f89c56ba16c26" - integrity sha512-vRbvM9ZKR2017TO73dtJ50KxoGcFzKtKI7C8iO302BQ5p+DuB+AirUg1952UpSoLfv5ki9O416MFANNg8UN/EQ== - dependencies: - "@cosmjs/encoding" "^0.31.3" - "@cosmjs/math" "^0.31.3" - "@cosmjs/utils" "^0.31.3" - "@noble/hashes" "^1" - bn.js "^5.2.0" - elliptic "^6.5.4" - libsodium-wrappers-sumo "^0.7.11" - -"@cosmjs/crypto@^0.32.1", "@cosmjs/crypto@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.32.2.tgz#8ed255d3d1c1c4d916a1586f8cbc33eaab82f511" - integrity sha512-RuxrYKzhrPF9g6NmU7VEq++Hn1vZJjqqJpZ9Tmw9lOYOV8BUsv+j/0BE86kmWi7xVJ7EwxiuxYsKuM8IR18CIA== - dependencies: - "@cosmjs/encoding" "^0.32.2" - "@cosmjs/math" "^0.32.2" - "@cosmjs/utils" "^0.32.2" - "@noble/hashes" "^1" - bn.js "^5.2.0" - elliptic "^6.5.4" - libsodium-wrappers-sumo "^0.7.11" - -"@cosmjs/encoding@^0.30.0", "@cosmjs/encoding@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.30.1.tgz#b5c4e0ef7ceb1f2753688eb96400ed70f35c6058" - integrity sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ== - dependencies: - base64-js "^1.3.0" - bech32 "^1.1.4" - readonly-date "^1.0.0" - -"@cosmjs/encoding@^0.31.3": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.31.3.tgz#2519d9c9ae48368424971f253775c4580b54c5aa" - integrity sha512-6IRtG0fiVYwyP7n+8e54uTx2pLYijO48V3t9TLiROERm5aUAIzIlz6Wp0NYaI5he9nh1lcEGJ1lkquVKFw3sUg== - dependencies: - base64-js "^1.3.0" - bech32 "^1.1.4" - readonly-date "^1.0.0" - -"@cosmjs/encoding@^0.32.1", "@cosmjs/encoding@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.32.2.tgz#8c5c64481a85cd570740c34dccce69d024a29805" - integrity sha512-WX7m1wLpA9V/zH0zRcz4EmgZdAv1F44g4dbXOgNj1eXZw1PIGR12p58OEkLN51Ha3S4DKRtCv5CkhK1KHEvQtg== - dependencies: - base64-js "^1.3.0" - bech32 "^1.1.4" - readonly-date "^1.0.0" - -"@cosmjs/faucet-client@^0.30.0": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/faucet-client/-/faucet-client-0.30.1.tgz#81406128830ba47ae824a912144a28a7fe70300d" - integrity sha512-uOYIjouOCjncfthDzeygcWtEpShiNN0u9tORSingufOAO/kmlHwM53M5I1a8ak1EktkEEa+Mxdj3kRfV87DOcw== - dependencies: - axios "^0.21.2" - -"@cosmjs/json-rpc@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.30.1.tgz#16f21305fc167598c8a23a45549b85106b2372bc" - integrity sha512-pitfC/2YN9t+kXZCbNuyrZ6M8abnCC2n62m+JtU9vQUfaEtVsgy+1Fk4TRQ175+pIWSdBMFi2wT8FWVEE4RhxQ== - dependencies: - "@cosmjs/stream" "^0.30.1" - xstream "^11.14.0" - -"@cosmjs/json-rpc@^0.31.3": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.31.3.tgz#11e5cf0f6d9ab426dff470bb8d68d5d31cd6ab13" - integrity sha512-7LVYerXjnm69qqYR3uA6LGCrBW2EO5/F7lfJxAmY+iII2C7xO3a0vAjMSt5zBBh29PXrJVS6c2qRP22W1Le2Wg== - dependencies: - "@cosmjs/stream" "^0.31.3" - xstream "^11.14.0" - -"@cosmjs/math@^0.30.0", "@cosmjs/math@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.30.1.tgz#8b816ef4de5d3afa66cb9fdfb5df2357a7845b8a" - integrity sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q== - dependencies: - bn.js "^5.2.0" - -"@cosmjs/math@^0.31.3": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.31.3.tgz#767f7263d12ba1b9ed2f01f68d857597839fd957" - integrity sha512-kZ2C6glA5HDb9hLz1WrftAjqdTBb3fWQsRR+Us2HsjAYdeE6M3VdXMsYCP5M3yiihal1WDwAY2U7HmfJw7Uh4A== - dependencies: - bn.js "^5.2.0" - -"@cosmjs/math@^0.32.1", "@cosmjs/math@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.32.2.tgz#4522312769197e132679e4960862bcec0eed4cb8" - integrity sha512-b8+ruAAY8aKtVKWSft2IvtCVCUH1LigIlf9ALIiY8n9jtM4kMASiaRbQ/27etnSAInV88IaezKK9rQZrtxTjcw== - dependencies: - bn.js "^5.2.0" - -"@cosmjs/proto-signing@^0.30.0", "@cosmjs/proto-signing@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.30.1.tgz#f0dda372488df9cd2677150b89b3e9c72b3cb713" - integrity sha512-tXh8pPYXV4aiJVhTKHGyeZekjj+K9s2KKojMB93Gcob2DxUjfKapFYBMJSgfKPuWUPEmyr8Q9km2hplI38ILgQ== - dependencies: - "@cosmjs/amino" "^0.30.1" - "@cosmjs/crypto" "^0.30.1" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/utils" "^0.30.1" - cosmjs-types "^0.7.1" - long "^4.0.0" - -"@cosmjs/proto-signing@^0.31.3": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.31.3.tgz#20440b7b96fb2cd924256a10e656fd8d4481cdcd" - integrity sha512-24+10/cGl6lLS4VCrGTCJeDRPQTn1K5JfknzXzDIHOx8THR31JxA7/HV5eWGHqWgAbudA7ccdSvEK08lEHHtLA== - dependencies: - "@cosmjs/amino" "^0.31.3" - "@cosmjs/crypto" "^0.31.3" - "@cosmjs/encoding" "^0.31.3" - "@cosmjs/math" "^0.31.3" - "@cosmjs/utils" "^0.31.3" - cosmjs-types "^0.8.0" - long "^4.0.0" - -"@cosmjs/proto-signing@^0.32.1": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.32.2.tgz#26ed2675978ce24078981f4c15a06c5d6b808f44" - integrity sha512-UV4WwkE3W3G3s7wwU9rizNcUEz2g0W8jQZS5J6/3fiN0mRPwtPKQ6EinPN9ASqcAJ7/VQH4/9EPOw7d6XQGnqw== - dependencies: - "@cosmjs/amino" "^0.32.2" - "@cosmjs/crypto" "^0.32.2" - "@cosmjs/encoding" "^0.32.2" - "@cosmjs/math" "^0.32.2" - "@cosmjs/utils" "^0.32.2" - cosmjs-types "^0.9.0" - -"@cosmjs/socket@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.30.1.tgz#00b22f4b5e2ab01f4d82ccdb7b2e59536bfe5ce0" - integrity sha512-r6MpDL+9N+qOS/D5VaxnPaMJ3flwQ36G+vPvYJsXArj93BjgyFB7BwWwXCQDzZ+23cfChPUfhbINOenr8N2Kow== - dependencies: - "@cosmjs/stream" "^0.30.1" - isomorphic-ws "^4.0.1" - ws "^7" - xstream "^11.14.0" - -"@cosmjs/socket@^0.31.3": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.31.3.tgz#52086380f4de2fc3514b90b0484b4b1c4c50e39e" - integrity sha512-aqrDGGi7os/hsz5p++avI4L0ZushJ+ItnzbqA7C6hamFSCJwgOkXaOUs+K9hXZdX4rhY7rXO4PH9IH8q09JkTw== - dependencies: - "@cosmjs/stream" "^0.31.3" - isomorphic-ws "^4.0.1" - ws "^7" - xstream "^11.14.0" - -"@cosmjs/stargate@^0.30.0", "@cosmjs/stargate@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.30.1.tgz#e1b22e1226cffc6e93914a410755f1f61057ba04" - integrity sha512-RdbYKZCGOH8gWebO7r6WvNnQMxHrNXInY/gPHPzMjbQF6UatA6fNM2G2tdgS5j5u7FTqlCI10stNXrknaNdzog== - dependencies: - "@confio/ics23" "^0.6.8" - "@cosmjs/amino" "^0.30.1" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/proto-signing" "^0.30.1" - "@cosmjs/stream" "^0.30.1" - "@cosmjs/tendermint-rpc" "^0.30.1" - "@cosmjs/utils" "^0.30.1" - cosmjs-types "^0.7.1" - long "^4.0.0" - protobufjs "~6.11.3" - xstream "^11.14.0" - -"@cosmjs/stargate@^0.31.1": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.31.3.tgz#a2b38e398097a00f897dbd8f02d4d347d8fed818" - integrity sha512-53NxnzmB9FfXpG4KjOUAYAvWLYKdEmZKsutcat/u2BrDXNZ7BN8jim/ENcpwXfs9/Og0K24lEIdvA4gsq3JDQw== - dependencies: - "@confio/ics23" "^0.6.8" - "@cosmjs/amino" "^0.31.3" - "@cosmjs/encoding" "^0.31.3" - "@cosmjs/math" "^0.31.3" - "@cosmjs/proto-signing" "^0.31.3" - "@cosmjs/stream" "^0.31.3" - "@cosmjs/tendermint-rpc" "^0.31.3" - "@cosmjs/utils" "^0.31.3" - cosmjs-types "^0.8.0" - long "^4.0.0" - protobufjs "~6.11.3" - xstream "^11.14.0" - -"@cosmjs/stream@^0.30.0", "@cosmjs/stream@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.30.1.tgz#ba038a2aaf41343696b1e6e759d8e03a9516ec1a" - integrity sha512-Fg0pWz1zXQdoxQZpdHRMGvUH5RqS6tPv+j9Eh7Q953UjMlrwZVo0YFLC8OTf/HKVf10E4i0u6aM8D69Q6cNkgQ== - dependencies: - xstream "^11.14.0" - -"@cosmjs/stream@^0.31.3": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.31.3.tgz#53428fd62487ec08fc3886a50a3feeb8b2af2e66" - integrity sha512-8keYyI7X0RjsLyVcZuBeNjSv5FA4IHwbFKx7H60NHFXszN8/MvXL6aZbNIvxtcIHHsW7K9QSQos26eoEWlAd+w== - dependencies: - xstream "^11.14.0" - -"@cosmjs/tendermint-rpc@^0.30.0", "@cosmjs/tendermint-rpc@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.30.1.tgz#c16378892ba1ac63f72803fdf7567eab9d4f0aa0" - integrity sha512-Z3nCwhXSbPZJ++v85zHObeUggrEHVfm1u18ZRwXxFE9ZMl5mXTybnwYhczuYOl7KRskgwlB+rID0WYACxj4wdQ== - dependencies: - "@cosmjs/crypto" "^0.30.1" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/json-rpc" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/socket" "^0.30.1" - "@cosmjs/stream" "^0.30.1" - "@cosmjs/utils" "^0.30.1" - axios "^0.21.2" - readonly-date "^1.0.0" - xstream "^11.14.0" - -"@cosmjs/tendermint-rpc@^0.31.3": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.31.3.tgz#d1a2bc5b3c98743631c9b55888589d352403c9b3" - integrity sha512-s3TiWkPCW4QceTQjpYqn4xttUJH36mTPqplMl+qyocdqk5+X5mergzExU/pHZRWQ4pbby8bnR7kMvG4OC1aZ8g== - dependencies: - "@cosmjs/crypto" "^0.31.3" - "@cosmjs/encoding" "^0.31.3" - "@cosmjs/json-rpc" "^0.31.3" - "@cosmjs/math" "^0.31.3" - "@cosmjs/socket" "^0.31.3" - "@cosmjs/stream" "^0.31.3" - "@cosmjs/utils" "^0.31.3" - axios "^0.21.2" - readonly-date "^1.0.0" - xstream "^11.14.0" - -"@cosmjs/utils@^0.30.0", "@cosmjs/utils@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.30.1.tgz#6d92582341be3c2ec8d82090253cfa4b7f959edb" - integrity sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g== - -"@cosmjs/utils@^0.31.3": - version "0.31.3" - resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.31.3.tgz#f97bbfda35ad69e80cd5c7fe0a270cbda16db1ed" - integrity sha512-VBhAgzrrYdIe0O5IbKRqwszbQa7ZyQLx9nEQuHQ3HUplQW7P44COG/ye2n6AzCudtqxmwdX7nyX8ta1J07GoqA== - -"@cosmjs/utils@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.32.2.tgz#324304aa85bfa6f10561cc17781d824d02130897" - integrity sha512-Gg5t+eR7vPJMAmhkFt6CZrzPd0EKpAslWwk5rFVYZpJsM8JG5KT9XQ99hgNM3Ov6ScNoIWbXkpX27F6A9cXR4Q== - -"@dabh/diagnostics@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" - integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== - dependencies: - colorspace "1.1.x" - enabled "2.0.x" - kuler "^2.0.0" - -"@endo/base64@0.2.31": - version "0.2.31" - resolved "https://registry.yarnpkg.com/@endo/base64/-/base64-0.2.31.tgz#92378462cd791e0258a2291d44d2cfd15415cf32" - integrity sha512-7IndkaZ7buIuFw8oBovNZV7epuyFWs0gdusSJ/zrx6fMXRqX0ycSTtxr6M5xADQGss1I9fqP3vteVLiNFlyIbw== - -"@endo/base64@^0.2.31", "@endo/base64@^0.2.32", "@endo/base64@^0.2.35": - version "0.2.35" - resolved "https://registry.yarnpkg.com/@endo/base64/-/base64-0.2.35.tgz#7d18203d5807748388c935df7eb79c7672a0b64e" - integrity sha512-rsAicKvgNq/ar+9b3ElXRXglMiJcg1IErz3lx1HFYZUzfWp8r/Dibi3TEjYpSBmtOeYN9CeWH8CBluN0uFqdag== - -"@endo/bundle-source@2.5.2-upstream-rollup": - version "2.5.2-upstream-rollup" - resolved "https://registry.yarnpkg.com/@endo/bundle-source/-/bundle-source-2.5.2-upstream-rollup.tgz#89fdc6b1b6625ca8c484c12e7762f04cd711ca9f" - integrity sha512-UoQlCMZ8jnQA6ulKYII+plWdyK0/XAj1clHPnAW1ILEthQWN1h9WeQT26mIWowGp+sX8CIyiRSVRQN/0pC35Fw== - dependencies: - "@agoric/babel-generator" "^7.17.4" - "@babel/parser" "^7.17.3" - "@babel/traverse" "^7.17.3" - "@endo/base64" "^0.2.31" - "@endo/compartment-mapper" "^0.8.4" - "@endo/init" "^0.5.56" - "@endo/promise-kit" "^0.2.56" - "@rollup/plugin-commonjs" "^19.0.0" - "@rollup/plugin-node-resolve" "^13.0.0" - acorn "^8.2.4" - jessie.js "^0.3.2" - rollup "^2.79.1" - source-map "^0.7.3" - -"@endo/bundle-source@^2.5.1", "@endo/bundle-source@^2.5.2-upstream-rollup": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@endo/bundle-source/-/bundle-source-2.8.0.tgz#56f25b3d9c74d3d0bede5c526647aaf02c0a8f94" - integrity sha512-nDiM3u/LKWq5xAnJ+zm35HC6kMKF3IG6Y5V0385slFHZVT8mXzRJ5ztEqRsVzvVeITfz3ZRFOaFer6v4V8Lkjg== - dependencies: - "@agoric/babel-generator" "^7.17.4" - "@babel/parser" "^7.17.3" - "@babel/traverse" "^7.17.3" - "@endo/base64" "^0.2.35" - "@endo/compartment-mapper" "^0.9.2" - "@endo/init" "^0.5.60" - "@endo/promise-kit" "^0.2.60" - "@endo/where" "^0.3.5" - "@rollup/plugin-commonjs" "^19.0.0" - "@rollup/plugin-node-resolve" "^13.0.0" - acorn "^8.2.4" - jessie.js "^0.3.2" - rollup "^2.79.1" - source-map "^0.7.3" - -"@endo/captp@3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@endo/captp/-/captp-3.1.1.tgz#538cdb7deec694cfce1015e1ccb387270172642d" - integrity sha512-M+EiRxtm5xzKmZtOQmTtk5IfscPUKGSDGhmcxGTm4g4WvukFKSAB8hLHAbeurLaWVQG/ZcqZBffAZL/SGUZbmw== - dependencies: - "@endo/eventual-send" "^0.17.2" - "@endo/marshal" "^0.8.5" - "@endo/nat" "^4.1.27" - "@endo/promise-kit" "^0.2.56" - -"@endo/captp@^3.1.1": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@endo/captp/-/captp-3.1.5.tgz#4cf0eeedc4728e856bd3e71cfc42cba3ab02449c" - integrity sha512-uyhECyTQqZcxt31YzCQ+n2nKu1+YE1qCuH00FFmK2qKGdF92gkluTvmDHcgxJ6lsKl/QBkQcuch51GZqXDs+xQ== - dependencies: - "@endo/eventual-send" "^0.17.6" - "@endo/marshal" "^0.8.9" - "@endo/nat" "^4.1.31" - "@endo/promise-kit" "^0.2.60" - -"@endo/check-bundle@0.2.18": - version "0.2.18" - resolved "https://registry.yarnpkg.com/@endo/check-bundle/-/check-bundle-0.2.18.tgz#0880f4237dbc1c72c292aab3eccd7b1c20506a97" - integrity sha512-PQB8ACM6ukv8dihzvqyfnHaKNr/+pKdJKmtZSxBvPmyBR4VnmLRSeTWMgMKnnmd27AyYN7vxdvKrL+qZDMA4RQ== - dependencies: - "@endo/base64" "^0.2.31" - "@endo/compartment-mapper" "^0.8.4" - -"@endo/check-bundle@^0.2.18": - version "0.2.22" - resolved "https://registry.yarnpkg.com/@endo/check-bundle/-/check-bundle-0.2.22.tgz#1a978e71401b61ce9e091ac6c6bfd037140263b8" - integrity sha512-xAIcx8PCnvpSRmaSqo0iA7AeIhHrx9er5fEoz/lnXxHNngYcGaPnzux5B57kLdcJs3lBNCIzaUuh4HRhCNpIJA== - dependencies: - "@endo/base64" "^0.2.35" - "@endo/compartment-mapper" "^0.9.2" - -"@endo/cjs-module-analyzer@^0.2.31", "@endo/cjs-module-analyzer@^0.2.32", "@endo/cjs-module-analyzer@^0.2.35": - version "0.2.35" - resolved "https://registry.yarnpkg.com/@endo/cjs-module-analyzer/-/cjs-module-analyzer-0.2.35.tgz#0de39d2306bba5671e121efa091bf6cb9990f11e" - integrity sha512-Ldr1auybH9AzrR/WV6bzP4aLRpv8CCl98mv0IAui4uQmmFOPOGchshyBfpiDF5XMKM6wh7z0VgmvmydQ5/7AHQ== - -"@endo/compartment-mapper@0.8.4": - version "0.8.4" - resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-0.8.4.tgz#afae6a4dfc64dff7082e90d7f215a072fb0a9b85" - integrity sha512-OXK3pfsFWa+k6I1sA4UH+XBsXyCd1G8YEJo0PYsHyzErDSnVYQZ8Ka+M+8Jq8jJtE4SFqZqp1KwihCvMJSA6oA== - dependencies: - "@endo/cjs-module-analyzer" "^0.2.31" - "@endo/static-module-record" "^0.7.19" - "@endo/zip" "^0.2.31" - ses "^0.18.4" - -"@endo/compartment-mapper@^0.8.4", "@endo/compartment-mapper@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-0.8.5.tgz#6910d2be41754fde90190671d2fc5dc48d6fb787" - integrity sha512-PKJ1WgYRBkSEJTYOXZTOf9tYQLEkuGTfhAPoKm22loAuaXWI1ortJ7UdRAPLWt95Cd71KGrmfd1FpemGvmr3lQ== - dependencies: - "@endo/cjs-module-analyzer" "^0.2.32" - "@endo/static-module-record" "^0.7.20" - "@endo/zip" "^0.2.32" - ses "^0.18.5" - -"@endo/compartment-mapper@^0.9.2": - version "0.9.2" - resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-0.9.2.tgz#48bfa610179cc5521c745c7b2d1eb5fab52ed29a" - integrity sha512-zsAyTf87zBsE1yZ2CBzEGhcGZGGv5m93/CXZHQhut53o4DWwhuS/WTQ4cBoVFSGKWz63JbbA/7qa4fcOnv5dDw== - dependencies: - "@endo/cjs-module-analyzer" "^0.2.35" - "@endo/static-module-record" "^0.8.2" - "@endo/zip" "^0.2.35" - ses "^0.18.8" - -"@endo/env-options@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@endo/env-options/-/env-options-0.1.4.tgz#e516bc3864f00b154944e444fb8996a9a0c23a45" - integrity sha512-Ol8ct0aW8VK1ZaqntnUJfrYT59P6Xn36XPbHzkqQhsYkpudKDn5ILYEwGmSO/Ff+XJjv/pReNI0lhOyyrDa9mg== - -"@endo/eslint-plugin@^0.4.4": - version "0.4.5" - resolved "https://registry.yarnpkg.com/@endo/eslint-plugin/-/eslint-plugin-0.4.5.tgz#55018581fe1f8bb6107daa68dc45bfaed2ebfd51" - integrity sha512-XpZ1H/MR/NoJVS1N3IyOU9O4/bo+DhOG/yU4FpElY+6lJU2GJGZvKLJ6JYzX9bvhr+3css/IQdQFiUrD1a+sow== - dependencies: - "@typescript-eslint/utils" "~5.59.9" - requireindex "~1.1.0" - tsutils "~3.21.0" - typescript "~5.1.3" - -"@endo/eventual-send@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@endo/eventual-send/-/eventual-send-0.17.2.tgz#c8710d557c2f57723be05fe99e941cd893acc5d2" - integrity sha512-nux02l2yYXXUeUA2PigOO1K0gbVVMYx3prfYrW/G7Ny6PiDLtOyaeMWwKQwFTgJV2yAkOfvycr4LC1+tm7hu/Q== - -"@endo/eventual-send@^0.17.2", "@endo/eventual-send@^0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@endo/eventual-send/-/eventual-send-0.17.6.tgz#86719e4e3ff76991c49f6680309dc77dff65fe55" - integrity sha512-73cKY2uiWdzMJn7i284NJyD3K0UKjpksBg/EA2GT8YJa0TgeBczFQIm81vC08itK5gHuDDH2vC5COSGR6hxKIg== - dependencies: - "@endo/env-options" "^0.1.4" - -"@endo/exo@0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@endo/exo/-/exo-0.2.2.tgz#eeebe3eeb40dcf9b409fddf8d5ff73821b470515" - integrity sha512-4787jRJe7nQLV02mCCd1fQ8Ai25ParaIzLBUrxl7UKtsP98LcTlQKAON+OQmnSbV6jjXINa/wHdUeoi8/0xZDA== - dependencies: - "@endo/far" "^0.2.18" - "@endo/patterns" "^0.2.2" - -"@endo/exo@^0.2.2": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@endo/exo/-/exo-0.2.6.tgz#09721063377981d4376b3cf8aa534dd0d49939dc" - integrity sha512-fk4EYdHRZectyLt0cn0aT8PIlb8BgE5ji6DD4AHJ9Q6TFrGr6RRV0aXs8xW9LAs7MIduz+j7vtpeURxugN8KvQ== - dependencies: - "@endo/env-options" "^0.1.4" - "@endo/far" "^0.2.22" - "@endo/pass-style" "^0.1.7" - "@endo/patterns" "^0.2.6" - -"@endo/far@0.2.18": - version "0.2.18" - resolved "https://registry.yarnpkg.com/@endo/far/-/far-0.2.18.tgz#8d8ca8ac1f7c4b57871e55c2c2f06c8e4fcf3839" - integrity sha512-NJPz5x11AOsFgxZNSIW4+llQtSUNQtcYCrvxpMwhofti3hncMjhIiUUrMVggw99pdHNmXEBr0gl16H3n/1X0sw== - dependencies: - "@endo/eventual-send" "^0.17.2" - "@endo/pass-style" "^0.1.3" - -"@endo/far@^0.2.18", "@endo/far@^0.2.22", "@endo/far@^0.2.3": - version "0.2.22" - resolved "https://registry.yarnpkg.com/@endo/far/-/far-0.2.22.tgz#fda187289a903ee3f9d6dcc5664ee7fef1994b1f" - integrity sha512-LFOicqyHslKOSk/H5EfGOcw347ftDSwYHARPasnrG4UJOEkcU1ZG5bN/BmfONtcidB776gWZKrV/tNl4WLIlyw== - dependencies: - "@endo/eventual-send" "^0.17.6" - "@endo/pass-style" "^0.1.7" - -"@endo/import-bundle@0.3.4": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@endo/import-bundle/-/import-bundle-0.3.4.tgz#dd93dca2aa595f669365f05d03affd4465837919" - integrity sha512-MjB7VBJYFgcUhelMddJQf9uMwxqXV1McjVGqoJ3ZJ/OIQZ5BTYqR+uyZOI8CaUqpVmhNbsg3qMw8/wXW304YlA== - dependencies: - "@endo/base64" "^0.2.31" - "@endo/compartment-mapper" "^0.8.4" - -"@endo/import-bundle@^0.3.4": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@endo/import-bundle/-/import-bundle-0.3.5.tgz#b2b21f58c9fd077857754ccb7e9d0a91868de88d" - integrity sha512-jYBXGnvWhw4w/N8ZPGar+sftNg/wgI5mCCE0ooUYMUBvM5ulPHI+/KYW3FD9pSwU8h7d5Nvs3bvA4w6dN7b67A== - dependencies: - "@endo/base64" "^0.2.32" - "@endo/compartment-mapper" "^0.8.5" - -"@endo/init@0.5.56": - version "0.5.56" - resolved "https://registry.yarnpkg.com/@endo/init/-/init-0.5.56.tgz#c241de519434309f362dc676e76ee36c93240151" - integrity sha512-BKA7O2uy9uaGw9dB9X515SIaTumaO58HD30AXkJllW6bmLM/BxxFM3GCgS127x0Wot1ni32Y0DxkwxdEXFXJEQ== - dependencies: - "@endo/base64" "^0.2.31" - "@endo/eventual-send" "^0.17.2" - "@endo/lockdown" "^0.1.28" - "@endo/promise-kit" "^0.2.56" - -"@endo/init@^0.5.56", "@endo/init@^0.5.60": - version "0.5.60" - resolved "https://registry.yarnpkg.com/@endo/init/-/init-0.5.60.tgz#e78051b13cd4a04c72d5ec1d2a6011b7f987f7ff" - integrity sha512-AbAvs6Nk01fyJ+PaW0RzwemIWyomjzDf8ZEhVa3jCOhr8kBBsTnJdX0v7XkbZ/Y8NQxlrFaW0fPqlJK6aMWTlQ== - dependencies: - "@endo/base64" "^0.2.35" - "@endo/eventual-send" "^0.17.6" - "@endo/lockdown" "^0.1.32" - "@endo/promise-kit" "^0.2.60" - -"@endo/lockdown@0.1.28": - version "0.1.28" - resolved "https://registry.yarnpkg.com/@endo/lockdown/-/lockdown-0.1.28.tgz#43f23dcbb12b6ebd3ad2a3dc8c6bb3609dd9e95f" - integrity sha512-YqurtDU23+0kuWq4J2c94HyRB1aqSB8xEwrx5xTZA9IY/anrtppEiTFGU8tQXqZFhE6bfRzSGWDIVKaXCcm4Lw== - dependencies: - ses "^0.18.4" - -"@endo/lockdown@^0.1.28", "@endo/lockdown@^0.1.32": - version "0.1.32" - resolved "https://registry.yarnpkg.com/@endo/lockdown/-/lockdown-0.1.32.tgz#2d13a9ca336d5dce243a3cf919c543b55973153c" - integrity sha512-AN696XS3robsopxVg7gc/6c9TXPGosGmKfcM0g9SNnD1rqgo1EakS4wf7f3AbICU9iJdo0e4V5JjzWPnjqoR0g== - dependencies: - ses "^0.18.8" - -"@endo/marshal@0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@endo/marshal/-/marshal-0.8.5.tgz#c1a10ed4d9b37ee7444d314d8dec9a9a96728d64" - integrity sha512-oj2Ag/TlkoMPv8m00fjoa1uWPgDwm5w8nYUU0DPqaCLfTNGRe8a8s7kYDPbv+sQdiQbkZ1RgUQjdyr/O2Mvs+A== - dependencies: - "@endo/eventual-send" "^0.17.2" - "@endo/nat" "^4.1.27" - "@endo/pass-style" "^0.1.3" - "@endo/promise-kit" "^0.2.56" - -"@endo/marshal@^0.8.5", "@endo/marshal@^0.8.9": - version "0.8.9" - resolved "https://registry.yarnpkg.com/@endo/marshal/-/marshal-0.8.9.tgz#f6fcaf23ecad828f6d086657f1d1590ea8ef3840" - integrity sha512-wzYlY5/JFzY/wAVxZ6h0BxlRaAS/9KKnhircKO/tGw5bZYHFvLeSeMCBZ4VCSZg5aNgDlhuvB0S6iCwS5MYqcg== - dependencies: - "@endo/eventual-send" "^0.17.6" - "@endo/nat" "^4.1.31" - "@endo/pass-style" "^0.1.7" - "@endo/promise-kit" "^0.2.60" - -"@endo/nat@4.1.27": - version "4.1.27" - resolved "https://registry.yarnpkg.com/@endo/nat/-/nat-4.1.27.tgz#8f1a398b39f994b0769070a3fb36d3397bf86794" - integrity sha512-mKRdIc4NvrxZ1qPBcYZH6zaj0RsRwADaCcfPNRnGWcHC9dY8DmZDDcgqNdSBFLiEto1RnXeoKAEGxk6hn253Ow== - -"@endo/nat@^4.1.27", "@endo/nat@^4.1.31": - version "4.1.31" - resolved "https://registry.yarnpkg.com/@endo/nat/-/nat-4.1.31.tgz#ca738f472481a572f47749b41529b3261ebb4c1e" - integrity sha512-tz0PnEmzX9BAtKEawYndsx+XC6f+2CKErtrpbpOuX3uct5VNLdw6q6cArSYtnHbxRHR0YaHUdeG0W6okmup4bg== - -"@endo/netstring@0.3.26": - version "0.3.26" - resolved "https://registry.yarnpkg.com/@endo/netstring/-/netstring-0.3.26.tgz#7da8338cb372772894e1ebcc0728b23666fa2c89" - integrity sha512-IT3epH32/jLiNBwKhM+7BRjm0OwFjRooeQyymfGZUKGN95fm+hKHEbm8pDmWT8bnwSzHB++wsaQJTpi39U+obg== - dependencies: - "@endo/init" "^0.5.56" - "@endo/stream" "^0.3.25" - ses "^0.18.4" - -"@endo/netstring@^0.3.26": - version "0.3.30" - resolved "https://registry.yarnpkg.com/@endo/netstring/-/netstring-0.3.30.tgz#ee0f29c4fc33674733833610129136435b56b044" - integrity sha512-Z3e2duj7Qumt+xm1RVQq/O74ORfM87WBXgBQyxIgTAxBT1o0qjR+BnPBWSyzWg4+JBtax0qgge8KiKpfoECa4g== - dependencies: - "@endo/init" "^0.5.60" - "@endo/stream" "^0.3.29" - ses "^0.18.8" - -"@endo/pass-style@0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@endo/pass-style/-/pass-style-0.1.3.tgz#951056a2869b04f2aab0928b61a91ae7252ddbe4" - integrity sha512-V2FLPBUJXsJYWjMSoZW2IopOuggEX14pm8AHfOVXUceF3uvHbdJj7qwKAuIIOhPApZ/TV+6nWYi86eb393Ic2w== - dependencies: - "@endo/promise-kit" "^0.2.56" - "@fast-check/ava" "^1.1.3" - -"@endo/pass-style@^0.1.3", "@endo/pass-style@^0.1.7": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@endo/pass-style/-/pass-style-0.1.7.tgz#ea22568e8b86fb2d1a14a5fc042374cc0d8e310b" - integrity sha512-dlB62Ptjcy/+iachy7qzAdgIwaU60rE+XLummLRpE2tDSJF2jSFJlVwa/QuGw1KKO7Rt4vog/51sKev3EbJZQg== - dependencies: - "@endo/promise-kit" "^0.2.60" - "@fast-check/ava" "^1.1.5" - -"@endo/patterns@0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@endo/patterns/-/patterns-0.2.2.tgz#d4c4d63bf450477ed9a9cf194b4a8daa56fcb4f4" - integrity sha512-rbS4BLRohZQhB+0aEPBoxmzOfOie9nAu8Qx55Fxe8xFQKS4k9acafeIYmKh9nvslEJISYQmogy5Lewm5mgdSjg== - dependencies: - "@endo/eventual-send" "^0.17.2" - "@endo/marshal" "^0.8.5" - "@endo/promise-kit" "^0.2.56" - -"@endo/patterns@^0.2.2", "@endo/patterns@^0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@endo/patterns/-/patterns-0.2.6.tgz#abbbc3743ee313ffc6167d783d5fc78de74125fe" - integrity sha512-FbayXMv9sY4qP5vSaPhq9RSJmsTykImbCy0FN1YmZzaChGwOfSPOJw4898xVLDK5Xi6f+6zV02uXjuMTuZt6UA== - dependencies: - "@endo/eventual-send" "^0.17.6" - "@endo/marshal" "^0.8.9" - "@endo/promise-kit" "^0.2.60" - -"@endo/promise-kit@0.2.56": - version "0.2.56" - resolved "https://registry.yarnpkg.com/@endo/promise-kit/-/promise-kit-0.2.56.tgz#24ed3cf87af1eec65f4635643b7e67617b909e71" - integrity sha512-eKlOg353jJCHwDAwXCajtcAiTTjGkd7oWBXniEEc97gZHK83MeB3pnGT2lhoeq3xzdNw3Xv2DDsowBI194AXeA== - dependencies: - ses "^0.18.4" - -"@endo/promise-kit@^0.2.56", "@endo/promise-kit@^0.2.59", "@endo/promise-kit@^0.2.60": - version "0.2.60" - resolved "https://registry.yarnpkg.com/@endo/promise-kit/-/promise-kit-0.2.60.tgz#8012ada06970c7eaf965cd856563b34a1790e163" - integrity sha512-6Zp9BqBbc3ywaG+iLRrQRmO/VLKrMnvsbgOKKPMpjEC3sUlksYA09uaH3GrKZgoGChF8m9bXK8eFW39z7wJNUw== - dependencies: - ses "^0.18.8" - -"@endo/ses-ava@0.2.40": - version "0.2.40" - resolved "https://registry.yarnpkg.com/@endo/ses-ava/-/ses-ava-0.2.40.tgz#8a6c1f668131ecbe4d06339cac2a8346253089b8" - integrity sha512-YIiAPuUfjS5dzyqeiV36FASv4YiSdkRzdxXbntNTBdOvdDymbT37SMkG0mUxD5YZRQuKMTu9xQyaGYSRqf8zaw== - dependencies: - ses "^0.18.4" - -"@endo/ses-ava@^0.2.40": - version "0.2.44" - resolved "https://registry.yarnpkg.com/@endo/ses-ava/-/ses-ava-0.2.44.tgz#b97b0d5a457b30b73c74b19091d67840984cf47e" - integrity sha512-Pp0os/ZN7r0L94eCxWFYhSWt+DIdIASIVlY4oYCwMLxLa28cuswCjRQvPKLINBpZezogCKKptEWJTyHhGWpVQw== - dependencies: - ses "^0.18.8" - -"@endo/static-module-record@^0.7.19", "@endo/static-module-record@^0.7.20": - version "0.7.20" - resolved "https://registry.yarnpkg.com/@endo/static-module-record/-/static-module-record-0.7.20.tgz#5d9583aaa8042b8a6de58c72f765e5a28e880489" - integrity sha512-qpow712L7Bh7F3olFW9e15PcDWnC2eSY4xPdhpZoYTzedsyjCETRgxFWY6+DdT193lNlyKIn0On1O1Go+5WmBA== - dependencies: - "@agoric/babel-generator" "^7.17.6" - "@babel/parser" "^7.17.3" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - ses "^0.18.5" - -"@endo/static-module-record@^0.8.2": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@endo/static-module-record/-/static-module-record-0.8.2.tgz#25f66d555d1a075e5258520405410fd01fc2d1f7" - integrity sha512-wHJLX/hU/MoSFvnFN9sZ/49DYPlbASHlVQrJszeKH3xIpBtl3SG4JdRswO6RQgLREQJD/HV/ZN5V8x2bCpMu4Q== - dependencies: - "@agoric/babel-generator" "^7.17.6" - "@babel/parser" "^7.17.3" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - ses "^0.18.8" - -"@endo/stream-node@0.2.26": - version "0.2.26" - resolved "https://registry.yarnpkg.com/@endo/stream-node/-/stream-node-0.2.26.tgz#bf3c6ce6c506cde4468a64d220b8df4224638e16" - integrity sha512-+UUr1/wZZIWz3KhuAwQr9HPsZv5P8zykw+z1aVFDckTMcdKRyK8yxSg35iEcntvyZoP40LEdnArCXuuEWjm0qw== - dependencies: - "@endo/init" "^0.5.56" - "@endo/stream" "^0.3.25" - ses "^0.18.4" - -"@endo/stream-node@^0.2.26": - version "0.2.30" - resolved "https://registry.yarnpkg.com/@endo/stream-node/-/stream-node-0.2.30.tgz#4af1989976eaad385663cd2a3342072cf9dbea7c" - integrity sha512-KZZJ6MWeTxFYScuuIj5BwGVX6Y5F9+RzW8RhVZy7Najr/irgdGnF/oGk8QeUIHuVzTgL4HLJP+XATnHaLKOcGw== - dependencies: - "@endo/init" "^0.5.60" - "@endo/stream" "^0.3.29" - ses "^0.18.8" - -"@endo/stream@0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@endo/stream/-/stream-0.3.25.tgz#a49b012b62f345e3de6b360dc30ec27cc32a455f" - integrity sha512-qSl9Q9o20/4nKdXlXYCs6KJfeANMKBLrsi7JIxWV1jP9YzIDdq/PkEJsMNq89Z/HWXtPRfEQ4JEMd3O1WBYU5Q== - dependencies: - "@endo/eventual-send" "^0.17.2" - "@endo/promise-kit" "^0.2.56" - ses "^0.18.4" - -"@endo/stream@^0.3.25", "@endo/stream@^0.3.29": - version "0.3.29" - resolved "https://registry.yarnpkg.com/@endo/stream/-/stream-0.3.29.tgz#f49c24629429a3650ddd0e5e9fb90e36ef44ed0a" - integrity sha512-C850JqDGYsObE0fAC2uUw/IrN3kUpECddiARIGDpe/y3wnWu5fsau52FkGOKY4lno5kyAhfyvZ9MxhigYnXxEg== - dependencies: - "@endo/eventual-send" "^0.17.6" - "@endo/promise-kit" "^0.2.60" - ses "^0.18.8" - -"@endo/where@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@endo/where/-/where-0.3.5.tgz#df7661ec38ab6a327ef050aa88b50555876c39ef" - integrity sha512-y9agS7UWpSY9YSAAYwtn6sAE7zfU2BmYGOUJpw859WcmRt5ufCRi2XAXDcvIugAUPTsSVPqJj6FO3uZNVRmXPw== - -"@endo/zip@0.2.31": - version "0.2.31" - resolved "https://registry.yarnpkg.com/@endo/zip/-/zip-0.2.31.tgz#371b1a9ca8b3216ad8a3564e97e3d747be42a657" - integrity sha512-rNCZtQzPm6Q8kW69gyeU0hUwKZtwuR8cX1+URgpDuUuaMUbKWBaqURKOmrqKVtE5fkqCE7pSrHvGH02DMDbDHQ== - -"@endo/zip@^0.2.31", "@endo/zip@^0.2.32", "@endo/zip@^0.2.35": - version "0.2.35" - resolved "https://registry.yarnpkg.com/@endo/zip/-/zip-0.2.35.tgz#37a7f9266ca9c9167de5e42b55b0d9c979598d87" - integrity sha512-UM+mMZjBtJf33lXj38xXIEIe1B5wrgg/nT9CHrC8s+Pj/h63eMpQmcJzjL2vMKrvq3Tsj+TDzmQhtYcbrFACqQ== - -"@es-joy/jsdoccomment@~0.41.0": - version "0.41.0" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz#4a2f7db42209c0425c71a1476ef1bdb6dcd836f6" - integrity sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw== - dependencies: - comment-parser "1.4.1" - esquery "^1.5.0" - jsdoc-type-pratt-parser "~4.0.0" - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== - -"@fast-check/ava@^1.1.3", "@fast-check/ava@^1.1.5": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@fast-check/ava/-/ava-1.2.1.tgz#4f6621d039e855cbd3ee40512f442f82913c5a31" - integrity sha512-d7O8CjYV2e+JFnN67Yofw+tt16fJI7kuX1K7OZCNxqQL5XNrkipWBmAmW9sPxYVjaItPBPvTPp7nORsO9KuBgg== - dependencies: - fast-check "^3.0.0" - -"@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@github/browserslist-config@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@github/browserslist-config/-/browserslist-config-1.0.0.tgz#952fe6da3e6b8ed6a368f3a1a08a9d2ef84e8d04" - integrity sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw== - -"@humanwhocodes/config-array@^0.11.13": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== - -"@iarna/toml@^2.2.3": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" - integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== - -"@jessie.js/eslint-plugin@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@jessie.js/eslint-plugin/-/eslint-plugin-0.4.0.tgz#a351695c63a0fc1cc530a6cb67e8ebe451c8ec58" - integrity sha512-rzryGvF22+mm9Ge1UW+alh9S/gPuDI7pxRSbjGymJPU515KGOl1Fym4Fvt6G4elePHYX/ZFmh/uF2888HsuQ0A== - dependencies: - requireindex "~1.1.0" - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.22" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" - integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@mapbox/node-pre-gyp@1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz#09a8781a3a036151cdebbe8719d6f8b25d4058bc" - integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" - -"@noble/hashes@^1", "@noble/hashes@^1.0.0": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" - integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== - dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" - -"@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@opentelemetry/api@~1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.3.0.tgz#27c6f776ac3c1c616651e506a89f438a0ed6a055" - integrity sha512-YveTnGNsFFixTKJz09Oi4zYkiLT5af3WpZDu4aIUM7xX+2bHAkOJayFTVQd6zB8kkWPpbua4Ha6Ql00grdLlJQ== - -"@opentelemetry/core@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.9.1.tgz#e343337e1a7bf30e9a6aef3ef659b9b76379762a" - integrity sha512-6/qon6tw2I8ZaJnHAQUUn4BqhTbTNRS0WP8/bA0ynaX+Uzp/DDbd0NS0Cq6TMlh8+mrlsyqDE7mO50nmv2Yvlg== - dependencies: - "@opentelemetry/semantic-conventions" "1.9.1" - -"@opentelemetry/exporter-prometheus@~0.35.0": - version "0.35.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.35.1.tgz#c2fd5fcd17dac8106b33e5d354d98c47ebaa8804" - integrity sha512-HeCM+1C19Ccj1D3lz450HaPZSxHvd9nGalRKMYUWc4ipga6rJIUHDAaIm4uanRaEgesrRnullkO4/G0dJsYKsg== - dependencies: - "@opentelemetry/core" "1.9.1" - "@opentelemetry/resources" "1.9.1" - "@opentelemetry/sdk-metrics" "1.9.1" - -"@opentelemetry/exporter-trace-otlp-http@~0.35.0": - version "0.35.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.35.1.tgz#9bf988f91fb145b29a051bce8ff5ef85029ca575" - integrity sha512-EJgAsrvscKsqb/GzF1zS74vM+Z/aQRhrFE7hs/1GK1M9bLixaVyMGwg2pxz1wdYdjxS1mqpHMhXU+VvMvFCw1w== - dependencies: - "@opentelemetry/core" "1.9.1" - "@opentelemetry/otlp-exporter-base" "0.35.1" - "@opentelemetry/otlp-transformer" "0.35.1" - "@opentelemetry/resources" "1.9.1" - "@opentelemetry/sdk-trace-base" "1.9.1" - -"@opentelemetry/otlp-exporter-base@0.35.1": - version "0.35.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.35.1.tgz#535166608d5d36e6c959b2857d01245ee3a916b1" - integrity sha512-Sc0buJIs8CfUeQCL/12vDDjBREgsqHdjboBa/kPQDgMf008OBJSM02Ijj6T1TH+QVHl/VHBBEVJF+FTf0EH9Vg== - dependencies: - "@opentelemetry/core" "1.9.1" - -"@opentelemetry/otlp-transformer@0.35.1": - version "0.35.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.35.1.tgz#d4333b71324b83dbb1b0b3a4cfd769b3e214c6f9" - integrity sha512-c0HXcJ49MKoWSaA49J8PXlVx48CeEFpL0odP6KBkVT+Bw6kAe8JlI3mIezyN05VCDJGtS2I5E6WEsE+DJL1t9A== - dependencies: - "@opentelemetry/core" "1.9.1" - "@opentelemetry/resources" "1.9.1" - "@opentelemetry/sdk-metrics" "1.9.1" - "@opentelemetry/sdk-trace-base" "1.9.1" - -"@opentelemetry/resources@1.9.1", "@opentelemetry/resources@~1.9.0": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.9.1.tgz#5ad3d80ba968a3a0e56498ce4bc82a6a01f2682f" - integrity sha512-VqBGbnAfubI+l+yrtYxeLyOoL358JK57btPMJDd3TCOV3mV5TNBmzvOfmesM4NeTyXuGJByd3XvOHvFezLn3rQ== - dependencies: - "@opentelemetry/core" "1.9.1" - "@opentelemetry/semantic-conventions" "1.9.1" - -"@opentelemetry/sdk-metrics@1.9.1", "@opentelemetry/sdk-metrics@~1.9.0": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.9.1.tgz#babc162a81df9884c16b1e67c2dd26ab478f3080" - integrity sha512-AyhKDcA8NuV7o1+9KvzRMxNbATJ8AcrutKilJ6hWSo9R5utnzxgffV4y+Hp4mJn84iXxkv+CBb99GOJ2A5OMzA== - dependencies: - "@opentelemetry/core" "1.9.1" - "@opentelemetry/resources" "1.9.1" - lodash.merge "4.6.2" - -"@opentelemetry/sdk-trace-base@1.9.1", "@opentelemetry/sdk-trace-base@~1.9.0": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.9.1.tgz#c349491b432a7e0ae7316f0b48b2d454d79d2b84" - integrity sha512-Y9gC5M1efhDLYHeeo2MWcDDMmR40z6QpqcWnPCm4Dmh+RHAMf4dnEBBntIe1dDpor686kyU6JV1D29ih1lZpsQ== - dependencies: - "@opentelemetry/core" "1.9.1" - "@opentelemetry/resources" "1.9.1" - "@opentelemetry/semantic-conventions" "1.9.1" - -"@opentelemetry/semantic-conventions@1.9.1", "@opentelemetry/semantic-conventions@~1.9.0": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.9.1.tgz#ad3367684a57879392513479e0a436cb2ac46dad" - integrity sha512-oPQdbFDmZvjXk5ZDoBGXG8B4tSB/qW5vQunJWQMFUBp7Xe8O1ByPANueJ+Jzg58esEBegyyxZ7LRmfJr7kFcFg== - -"@pkgr/core@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" - integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@rollup/plugin-commonjs@^19.0.0": - version "19.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz#1ccc3d63878d1bc9846f8969f09dd3b3e4ecc244" - integrity sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA== - dependencies: - "@rollup/pluginutils" "^3.1.0" - commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" - -"@rollup/plugin-node-resolve@^13.0.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" - integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - deepmerge "^4.2.2" - is-builtin-module "^3.1.0" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@types/estree@*": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/http-proxy@^1.17.8": - version "1.17.14" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec" - integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== - dependencies: - "@types/node" "*" - -"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/long@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - -"@types/node@*", "@types/node@>=13.7.0": - version "20.11.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" - integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== - dependencies: - undici-types "~5.26.4" - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@types/semver@^7.3.12", "@types/semver@^7.5.0": - version "7.5.7" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e" - integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== - -"@types/triple-beam@^1.3.2": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" - integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== - -"@typescript-eslint/eslint-plugin@^6.0.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" - integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/type-utils" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.0.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== - dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.59.11": - version "5.59.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.11.tgz#5d131a67a19189c42598af9fb2ea1165252001ce" - integrity sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q== - dependencies: - "@typescript-eslint/types" "5.59.11" - "@typescript-eslint/visitor-keys" "5.59.11" - -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - -"@typescript-eslint/type-utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" - integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== - dependencies: - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@5.59.11": - version "5.59.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.11.tgz#1a9018fe3c565ba6969561f2a49f330cf1fe8db1" - integrity sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA== - -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== - -"@typescript-eslint/typescript-estree@5.59.11": - version "5.59.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz#b2caaa31725e17c33970c1197bcd54e3c5f42b9f" - integrity sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA== - dependencies: - "@typescript-eslint/types" "5.59.11" - "@typescript-eslint/visitor-keys" "5.59.11" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" - -"@typescript-eslint/utils@~5.59.9": - version "5.59.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.11.tgz#9dbff49dc80bfdd9289f9f33548f2e8db3c59ba1" - integrity sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.11" - "@typescript-eslint/types" "5.59.11" - "@typescript-eslint/typescript-estree" "5.59.11" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.59.11": - version "5.59.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz#dca561ddad169dc27d62396d64f45b2d2c3ecc56" - integrity sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA== - dependencies: - "@typescript-eslint/types" "5.59.11" - eslint-visitor-keys "^3.3.0" - -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== - dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - -abbrev@1, abbrev@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.2.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.2.4, acorn@^8.7.1, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -aggregate-error@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-4.0.1.tgz#25091fe1573b9e0be892aeda15c7c66a545f758e" - integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== - dependencies: - clean-stack "^4.0.0" - indent-string "^5.0.0" - -agoric@^0.21.2-u11wf.0: - version "0.21.2-u12.0" - resolved "https://registry.yarnpkg.com/agoric/-/agoric-0.21.2-u12.0.tgz#10014ba4ed5162555f971b6f8ddf220a869781cc" - integrity sha512-EZlgmvaTzn+el2FornYr5tFKYQHbp8UwC9/N5WzWqde1qLQr61iLIjA3l8iQ+/MXGHD9SDQ9GVoGeUwtHQztDQ== - dependencies: - "@agoric/access-token" "^0.4.22-u11wf.0" - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/cache" "^0.3.3-u12.0" - "@agoric/casting" "^0.4.3-u12.0" - "@agoric/cosmic-proto" "^0.3.0" - "@agoric/ertp" "^0.16.3-u12.0" - "@agoric/inter-protocol" "^0.16.2-u12.0" - "@agoric/internal" "^0.4.0-u12.0" - "@agoric/smart-wallet" "^0.5.4-u12.0" - "@agoric/store" "^0.9.3-u12.0" - "@agoric/swingset-vat" "^0.32.3-u12.0" - "@agoric/vats" "^0.15.2-u12.0" - "@agoric/zoe" "^0.26.3-u12.0" - "@agoric/zone" "^0.2.3-u12.0" - "@confio/relayer" "^0.9.0" - "@cosmjs/crypto" "^0.30.1" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/proto-signing" "^0.30.1" - "@cosmjs/stargate" "^0.30.1" - "@endo/bundle-source" "2.5.2-upstream-rollup" - "@endo/captp" "3.1.1" - "@endo/compartment-mapper" "0.8.4" - "@endo/far" "0.2.18" - "@endo/init" "0.5.56" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - "@iarna/toml" "^2.2.3" - anylogger "^0.21.0" - chalk "^5.2.0" - commander "^10.0.0" - deterministic-json "^1.0.5" - esm agoric-labs/esm#Agoric-built - inquirer "^8.2.2" - opener "^1.5.2" - tmp "^0.2.1" - ws "^7.2.0" - -agoric@agoric-upgrade-11: - version "0.21.2-u11wf.0" - resolved "https://registry.yarnpkg.com/agoric/-/agoric-0.21.2-u11wf.0.tgz#04e27f7be7e30f78fefadcc7d4d4b466b6098585" - integrity sha512-w6N2CtmoLexNqDs+GqWt3jvkQ57SkozaST9hhjPj083/YxCzmO5Ky6c2DtVFy1ixv4G7E1yrfRWhOiPvuWASxw== - dependencies: - "@agoric/access-token" "^0.4.22-u11wf.0" - "@agoric/assert" "^0.6.1-u11wf.0" - "@agoric/cache" "^0.3.3-u11wf.0" - "@agoric/casting" "^0.4.3-u11wf.0" - "@agoric/cosmic-proto" "^0.3.0" - "@agoric/ertp" "^0.16.3-u11wf.0" - "@agoric/inter-protocol" "^0.16.2-u11wf.0" - "@agoric/internal" "^0.3.3-u11wf.0" - "@agoric/smart-wallet" "^0.5.4-u11wf.0" - "@agoric/store" "^0.9.3-u11wf.0" - "@agoric/swingset-vat" "^0.32.3-u11wf.0" - "@agoric/vats" "^0.15.2-u11wf.0" - "@agoric/zoe" "^0.26.3-u11wf.0" - "@agoric/zone" "^0.2.3-u11wf.0" - "@confio/relayer" "^0.9.0" - "@cosmjs/crypto" "^0.30.1" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/proto-signing" "^0.30.1" - "@cosmjs/stargate" "^0.30.1" - "@endo/bundle-source" "2.5.2-upstream-rollup" - "@endo/captp" "3.1.1" - "@endo/compartment-mapper" "0.8.4" - "@endo/far" "0.2.18" - "@endo/init" "0.5.56" - "@endo/marshal" "0.8.5" - "@endo/nat" "4.1.27" - "@endo/promise-kit" "0.2.56" - "@iarna/toml" "^2.2.3" - anylogger "^0.21.0" - chalk "^5.2.0" - commander "^10.0.0" - deterministic-json "^1.0.5" - esm agoric-labs/esm#Agoric-built - inquirer "^8.2.2" - opener "^1.5.2" - tmp "^0.2.1" - ws "^7.2.0" - -ajv@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.1.tgz#1e6b37a454021fa9941713f38b952fc1c8d32a84" - integrity sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -anylogger@^0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/anylogger/-/anylogger-0.21.0.tgz#b6cbea631cd5e1c884e5c0fa007d80bde1b22bd4" - integrity sha512-XJVplwflEff43l7aE48lW9gNoS0fpb1Ha4WttzjfTFlN3uJUIKALZ5oNWtwgRXPm/Q2dbp1EIddMbQ/AGHVX1A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-docs-informative@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" - integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-query@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-includes@^3.1.6, array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.filter@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" - integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -array.prototype.findlastindex@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" - integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.3.0" - es-shim-unscopables "^1.0.2" - -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" - -arrgv@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arrgv/-/arrgv-1.0.2.tgz#025ed55a6a433cad9b604f8112fc4292715a6ec0" - integrity sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw== - -arrify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-3.0.0.tgz#ccdefb8eaf2a1d2ab0da1ca2ce53118759fd46bc" - integrity sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw== - -ast-types-flow@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" - integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== - -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -ava@^4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/ava/-/ava-4.3.3.tgz#4ddcb650ed059e4e999a4b640de53ff00f4a008b" - integrity sha512-9Egq/d9R74ExrWohHeqUlexjDbgZJX5jA1Wq4KCTqc3wIfpGEK79zVy4rBtofJ9YKIxs4PzhJ8BgbW5PlAYe6w== - dependencies: - acorn "^8.7.1" - acorn-walk "^8.2.0" - ansi-styles "^6.1.0" - arrgv "^1.0.2" - arrify "^3.0.0" - callsites "^4.0.0" - cbor "^8.1.0" - chalk "^5.0.1" - chokidar "^3.5.3" - chunkd "^2.0.1" - ci-info "^3.3.1" - ci-parallel-vars "^1.0.1" - clean-yaml-object "^0.1.0" - cli-truncate "^3.1.0" - code-excerpt "^4.0.0" - common-path-prefix "^3.0.0" - concordance "^5.0.4" - currently-unhandled "^0.4.1" - debug "^4.3.4" - del "^6.1.1" - emittery "^0.11.0" - figures "^4.0.1" - globby "^13.1.1" - ignore-by-default "^2.1.0" - indent-string "^5.0.0" - is-error "^2.2.2" - is-plain-object "^5.0.0" - is-promise "^4.0.0" - matcher "^5.0.0" - mem "^9.0.2" - ms "^2.1.3" - p-event "^5.0.1" - p-map "^5.4.0" - picomatch "^2.3.1" - pkg-conf "^4.0.0" - plur "^5.1.0" - pretty-ms "^7.0.1" - resolve-cwd "^3.0.0" - slash "^3.0.0" - stack-utils "^2.0.5" - strip-ansi "^7.0.1" - supertap "^3.0.1" - temp-dir "^2.0.0" - write-file-atomic "^4.0.1" - yargs "^17.5.1" - -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== - -axe-core@=4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" - integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== - -axios@0.21.4, axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axobject-query@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" - -babel-eslint@^10.0.3: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.0, base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -basic-auth@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== - dependencies: - safe-buffer "5.1.2" - -bech32@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -better-sqlite3@^8.2.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.7.0.tgz#bcc341856187b1d110a8a47234fa89c48c8ef538" - integrity sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw== - dependencies: - bindings "^1.5.0" - prebuild-install "^7.1.1" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.2.1, bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bintrees@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" - integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blueimp-md5@^2.10.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0" - integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== - -bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browserslist@^4.21.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bufferfromfile@agoric-labs/BufferFromFile#Agoric-built: - version "0.4.377" - resolved "https://codeload.github.com/agoric-labs/BufferFromFile/tar.gz/691031035856fadba2603e52f4411160d7f34ed6" - dependencies: - "@mapbox/node-pre-gyp" "1.0.9" - node-gyp "^9.3.1" - wbasenodejscpp latest - -builtin-modules@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -builtins@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-4.1.0.tgz#1edd016dd91ce771a1ed6fc3b2b71fb918953250" - integrity sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w== - dependencies: - semver "^7.0.0" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^2.0.0" - -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -callsites@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-4.1.0.tgz#de72b98612eed4e1e2564c952498677faa9d86c2" - integrity sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw== - -caniuse-lite@^1.0.30001587: - version "1.0.30001587" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" - integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== - -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.0.1, chalk@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chokidar@^3.5.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chunkd@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/chunkd/-/chunkd-2.0.1.tgz#49cd1d7b06992dc4f7fccd962fe2a101ee7da920" - integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== - -ci-info@^3.3.1, ci-info@^3.7.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -ci-parallel-vars@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz#e87ff0625ccf9d286985b29b4ada8485ca9ffbc2" - integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-stack@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-4.2.0.tgz#c464e4cde4ac789f4e0735c5d75beb49d7b30b31" - integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== - dependencies: - escape-string-regexp "5.0.0" - -clean-yaml-object@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" - integrity sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -code-excerpt@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-4.0.0.tgz#2de7d46e98514385cb01f7b3b741320115f4c95e" - integrity sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA== - dependencies: - convert-to-spaces "^2.0.1" - -color-convert@^1.9.0, color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.6.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color-support@^1.1.2, color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -color@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -colorspace@1.1.x: - version "1.1.4" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" - integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== - dependencies: - color "^3.1.3" - text-hex "1.0.x" - -commander@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" - integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -comment-parser@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" - integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concordance@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.4.tgz#9896073261adced72f88d60e4d56f8efc4bbbbd2" - integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== - dependencies: - date-time "^3.1.0" - esutils "^2.0.3" - fast-diff "^1.2.0" - js-string-escape "^1.0.1" - lodash "^4.17.15" - md5-hex "^3.0.1" - semver "^7.3.2" - well-known-symbols "^2.0.0" - -confusing-browser-globals@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-to-spaces@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz#61a6c98f8aa626c16b296b862a91412a33bceb6b" - integrity sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -cosmjs-types@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.7.2.tgz#a757371abd340949c5bd5d49c6f8379ae1ffd7e2" - integrity sha512-vf2uLyktjr/XVAgEq0DjMxeAWh1yYREe7AMHDKd7EiHVqxBPCaBS+qEEQUkXbR9ndnckqr1sUG8BQhazh4X5lA== - dependencies: - long "^4.0.0" - protobufjs "~6.11.2" - -cosmjs-types@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.8.0.tgz#2ed78f3e990f770229726f95f3ef5bf9e2b6859b" - integrity sha512-Q2Mj95Fl0PYMWEhA2LuGEIhipF7mQwd9gTQ85DdP9jjjopeoGaDxvmPa5nakNzsq7FnO1DMTatXTAx6bxMH7Lg== - dependencies: - long "^4.0.0" - protobufjs "~6.11.2" - -cosmjs-types@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.9.0.tgz#c3bc482d28c7dfa25d1445093fdb2d9da1f6cfcc" - integrity sha512-MN/yUe6mkJwHnCFfsNPeCfXVhyxHYW6c/xDUzrSbBycYzw++XvWDMJArXp2pLdgD6FQ8DW79vkPjeNKVrXaHeQ== - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== - dependencies: - array-find-index "^1.0.1" - -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -date-time@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/date-time/-/date-time-3.1.0.tgz#0d1e934d170579f481ed8df1e2b8ff70ee845e1e" - integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== - dependencies: - time-zone "^1.0.0" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-data-property@^1.0.1, define-data-property@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -del@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-libc@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - -deterministic-json@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/deterministic-json/-/deterministic-json-1.0.5.tgz#718230459840122a1558007b483cf72753c00f21" - integrity sha512-JSD3TNaM+xEgvV9JK+7hnQvEIAHD9ZvhTl4h2EmH5rDxmyN1o4/RSC0lH82anzt5b6IUW4Tb4d5uzE00vH/tMw== - dependencies: - json-stable-stringify "^1.0.1" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.668: - version "1.4.672" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.672.tgz#f8ce803b43898b7e91dcfcf70d6fd656b11a645d" - integrity sha512-YYCy+goe3UqZqa3MOQCI5Mx/6HdBLzXL/mkbGCEWL3sP3Z1BP9zqAzeD3YEmLZlespYGFtyM8tRp5i2vfaUGCA== - -elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emittery@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.11.0.tgz#eb5f756a200d3431de2c6e850cb2d8afd97a03b9" - integrity sha512-S/7tzL6v5i+4iJd627Nhv9cLFIo5weAIlGccqJFpnBoDB8U1TF2k5tez4J/QNuxyyhWuFqHg1L84Kd3m7iXg6g== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -enabled@2.0.x: - version "2.0.0" - resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" - integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhance-visitors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/enhance-visitors/-/enhance-visitors-1.0.0.tgz#aa945d05da465672a1ebd38fee2ed3da8518e95a" - integrity sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA== - dependencies: - lodash "^4.13.1" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: - version "1.22.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" - integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.6" - call-bind "^1.0.7" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.1" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.0" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.1" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.14" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-iterator-helpers@^1.0.15: - version "1.0.17" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" - integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== - dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.22.4" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - has-property-descriptors "^1.0.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - iterator.prototype "^1.1.2" - safe-array-concat "^1.1.0" - -es-set-tostringtag@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== - dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" - -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-airbnb-base@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" - integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.5" - semver "^6.3.0" - -eslint-config-jessie@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/eslint-config-jessie/-/eslint-config-jessie-0.0.6.tgz#429de65983cdfcb161c62a5169605ded6130487b" - integrity sha512-L19U3+qWJdhdUjxW7NkkB9X+343MwUB81dplbxwcbBCvrWA8WwmiWYww0g23j4Oz/Vy8KmdW1cyW5Ii6s5IJzQ== - -eslint-config-prettier@>=8.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== - -eslint-config-prettier@^8.8.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== - -eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-ava@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-ava/-/eslint-plugin-ava-14.0.0.tgz#3319e5e470342c17a467a3a3e08b0cebb88050ca" - integrity sha512-XmKT6hppaipwwnLVwwvQliSU6AF1QMHiNoLD5JQfzhUhf0jY7CO0O624fQrE+Y/fTb9vbW8r77nKf7M/oHulxw== - dependencies: - enhance-visitors "^1.0.0" - eslint-utils "^3.0.0" - espree "^9.0.0" - espurify "^2.1.1" - import-modules "^2.1.0" - micro-spelling-correcter "^1.1.1" - pkg-dir "^5.0.0" - resolve-from "^5.0.0" - -eslint-plugin-escompat@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-escompat/-/eslint-plugin-escompat-3.4.0.tgz#cfd8d3b44fd0bc3d07b8ca15e4b0c15de88a0192" - integrity sha512-ufTPv8cwCxTNoLnTZBFTQ5SxU2w7E7wiMIS7PSxsgP1eAxFjtSaoZ80LRn64hI8iYziE6kJG6gX/ZCJVxh48Bg== - dependencies: - browserslist "^4.21.0" - -eslint-plugin-eslint-comments@^3.1.2, eslint-plugin-eslint-comments@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa" - integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== - dependencies: - escape-string-regexp "^1.0.5" - ignore "^5.0.5" - -eslint-plugin-filenames@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz#7094f00d7aefdd6999e3ac19f72cea058e590cf7" - integrity sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w== - dependencies: - lodash.camelcase "4.3.0" - lodash.kebabcase "4.1.1" - lodash.snakecase "4.1.1" - lodash.upperfirst "4.3.1" - -eslint-plugin-github@^4.8.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-github/-/eslint-plugin-github-4.10.1.tgz#b315660ec3734dc01a7a4ddb54490c4d6b37a07c" - integrity sha512-1AqQBockOM+m0ZUpwfjWtX0lWdX5cRi/hwJnSNvXoOmz/Hh+ULH6QFz6ENWueTWjoWpgPv0af3bj+snps6o4og== - dependencies: - "@github/browserslist-config" "^1.0.0" - "@typescript-eslint/eslint-plugin" "^6.0.0" - "@typescript-eslint/parser" "^6.0.0" - aria-query "^5.3.0" - eslint-config-prettier ">=8.0.0" - eslint-plugin-escompat "^3.3.3" - eslint-plugin-eslint-comments "^3.2.0" - eslint-plugin-filenames "^1.3.2" - eslint-plugin-i18n-text "^1.0.1" - eslint-plugin-import "^2.25.2" - eslint-plugin-jsx-a11y "^6.7.1" - eslint-plugin-no-only-tests "^3.0.0" - eslint-plugin-prettier "^5.0.0" - eslint-rule-documentation ">=1.0.0" - jsx-ast-utils "^3.3.2" - prettier "^3.0.0" - svg-element-attributes "^1.3.1" - -eslint-plugin-i18n-text@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz#69ce14f9af7d135cbe8114b1b144a57bb83291dc" - integrity sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA== - -eslint-plugin-import@^2.25.2, eslint-plugin-import@^2.25.3: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== - dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.15.0" - -eslint-plugin-jsdoc@^46.4.3: - version "46.10.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz#77c871309c4ed93758a3b2fdf384dc6189cf8605" - integrity sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag== - dependencies: - "@es-joy/jsdoccomment" "~0.41.0" - are-docs-informative "^0.0.2" - comment-parser "1.4.1" - debug "^4.3.4" - escape-string-regexp "^4.0.0" - esquery "^1.5.0" - is-builtin-module "^3.2.1" - semver "^7.5.4" - spdx-expression-parse "^4.0.0" - -eslint-plugin-jsx-a11y@^6.7.1: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" - integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== - dependencies: - "@babel/runtime" "^7.23.2" - aria-query "^5.3.0" - array-includes "^3.1.7" - array.prototype.flatmap "^1.3.2" - ast-types-flow "^0.0.8" - axe-core "=4.7.0" - axobject-query "^3.2.1" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.15" - hasown "^2.0.0" - jsx-ast-utils "^3.3.5" - language-tags "^1.0.9" - minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" - -eslint-plugin-no-only-tests@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.1.0.tgz#f38e4935c6c6c4842bf158b64aaa20c366fe171b" - integrity sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw== - -eslint-plugin-prettier@^5.0.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" - integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.8.6" - -eslint-rule-documentation@>=1.0.0: - version "1.0.23" - resolved "https://registry.yarnpkg.com/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz#4e0886145597a78d24524ec7e0cf18c6fedc23a8" - integrity sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.47.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -esm@agoric-labs/esm#Agoric-built: - version "3.2.25" - resolved "https://codeload.github.com/agoric-labs/esm/tar.gz/3603726ad4636b2f865f463188fcaade6375638e" - -espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -espurify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/espurify/-/espurify-2.1.1.tgz#afb043f22fac908d991dd25f7bf40bcf03935b9c" - integrity sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ== - -esquery@^1.4.2, esquery@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.2, esutils@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -express@^4.17.1: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -fast-check@^3.0.0: - version "3.15.1" - resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-3.15.1.tgz#36fae8176ac00e470b59e30c0aefa3b0aa432d61" - integrity sha512-GutOXZ+SCxGaFWfHe0Pbeq8PrkpGtPxA9/hdkI3s9YzqeMlrq5RdJ+QfYZ/S93jMX+tAyqgW0z5c9ppD+vkGUw== - dependencies: - pure-rand "^6.0.0" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2, fast-diff@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-safe-stringify@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.4.tgz#4fe828718aa61dbcf9119c3c24e79cc4dea973b2" - integrity sha512-mNlGUdKOeGNleyrmgbKYtbnCr9KZkZXU7eM89JRo8vY10f7Ul1Fbj07hUBW3N4fC0xM+fmfFfa2zM7mIizhpNQ== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fecha@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" - integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -figures@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/figures/-/figures-4.0.1.tgz#27b26609907bc888b3e3b0ef5403643f80aa2518" - integrity sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w== - dependencies: - escape-string-regexp "^5.0.0" - is-unicode-supported "^1.2.0" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -find-yarn-workspace-root@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" - integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== - dependencies: - micromatch "^4.0.2" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - -fn.name@1.x.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" - integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== - -follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.1, globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.0.1, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.1.1: - version "13.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0, hasown@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== - dependencies: - function-bind "^1.1.2" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http-proxy-middleware@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-by-default@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-2.1.0.tgz#c0e0de1a99b6065bdc93315a6f728867981464db" - integrity sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw== - -ignore@^5.0.5, ignore@^5.2.0, ignore@^5.2.4: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-meta-resolve@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz#244fd542fd1fae73550d4f8b3cde3bba1d7b2b18" - integrity sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A== - dependencies: - builtins "^4.0.0" - -import-meta-resolve@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz#75237301e72d1f0fbd74dbc6cca9324b164c2cc9" - integrity sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA== - -import-modules@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-2.1.0.tgz#abe7df297cb6c1f19b57246eb8b8bd9664b6d8c2" - integrity sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indent-string@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" - integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^8.2.2: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^6.0.1" - -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -irregular-plurals@^3.3.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.5.0.tgz#0835e6639aa8425bdc8b0d33d0dc4e89d9c01d2b" - integrity sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ== - -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-builtin-module@^3.1.0, is-builtin-module@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" - integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== - dependencies: - builtin-modules "^3.3.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-error@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843" - integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== - dependencies: - call-bind "^1.0.2" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2, is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-promise@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - -is-reference@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.13, is-typed-array@^1.1.9: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-unicode-supported@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== - dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" - -jessie.js@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/jessie.js/-/jessie.js-0.3.3.tgz#c79a8b1f105b41f4e5a278f8dc67339c273b5900" - integrity sha512-qtm2JSB/ZeH9xNNPjVkeTFH+Hoq9BxAzakgf6WK1PLarIoXJ9roSi+Z5UF65K47rT7QteWrP8b6RPBVquvIwsg== - dependencies: - "@endo/far" "^0.2.3" - -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" - integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -jsdoc-type-pratt-parser@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" - integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stable-stringify@^1.0.1, json-stable-stringify@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" - integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== - dependencies: - call-bind "^1.0.5" - isarray "^2.0.5" - jsonify "^0.0.1" - object-keys "^1.1.1" - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== - -jsx-ast-utils@^3.3.2, jsx-ast-utils@^3.3.5: - version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -klaw-sync@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" - integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== - dependencies: - graceful-fs "^4.1.11" - -kuler@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" - integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== - -language-subtag-registry@^0.3.20: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== - -language-tags@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" - integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== - dependencies: - language-subtag-registry "^0.3.20" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libsodium-sumo@^0.7.13: - version "0.7.13" - resolved "https://registry.yarnpkg.com/libsodium-sumo/-/libsodium-sumo-0.7.13.tgz#533b97d2be44b1277e59c1f9f60805978ac5542d" - integrity sha512-zTGdLu4b9zSNLfovImpBCbdAA4xkpkZbMnSQjP8HShyOutnGjRHmSOKlsylh1okao6QhLiz7nG98EGn+04cZjQ== - -libsodium-wrappers-sumo@^0.7.11: - version "0.7.13" - resolved "https://registry.yarnpkg.com/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.13.tgz#a33aea845a0bb56db067548f04feba28c730ab8e" - integrity sha512-lz4YdplzDRh6AhnLGF2Dj2IUj94xRN6Bh8T0HLNwzYGwPehQJX6c7iYVrFUPZ3QqxE0bqC+K0IIqqZJYWumwSQ== - dependencies: - libsodium-sumo "^0.7.13" - -libsodium-wrappers@^0.7.6: - version "0.7.13" - resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz#83299e06ee1466057ba0e64e532777d2929b90d3" - integrity sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw== - dependencies: - libsodium "^0.7.13" - -libsodium@^0.7.13: - version "0.7.13" - resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.7.13.tgz#230712ec0b7447c57b39489c48a4af01985fb393" - integrity sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw== - -load-json-file@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-7.0.1.tgz#a3c9fde6beffb6bedb5acf104fad6bb1604e1b00" - integrity sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ== - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -locate-path@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash.camelcase@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.kebabcase@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - -lodash.merge@4.6.2, lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.snakecase@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash.upperfirst@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" - integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== - -lodash@4.17.21, lodash@^4.13.1, lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -logform@^2.2.0, logform@^2.3.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" - integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== - dependencies: - "@colors/colors" "1.6.0" - "@types/triple-beam" "^1.3.2" - fecha "^4.2.0" - ms "^2.1.1" - safe-stable-stringify "^2.3.1" - triple-beam "^1.3.0" - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -long@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.7.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - -magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-fetch-happen@^10.0.3: - version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" - -map-age-cleaner@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -matcher@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-5.0.0.tgz#cd82f1c7ae7ee472a9eeaf8ec7cac45e0fe0da62" - integrity sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw== - dependencies: - escape-string-regexp "^5.0.0" - -md5-hex@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" - integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== - dependencies: - blueimp-md5 "^2.10.0" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -mem@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/mem/-/mem-9.0.2.tgz#bbc2d40be045afe30749681e8f5d554cee0c0354" - integrity sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A== - dependencies: - map-age-cleaner "^0.1.3" - mimic-fn "^4.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micro-spelling-correcter@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz#805a06a26ccfcad8f3e5c6a1ac5ff29d4530166e" - integrity sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg== - -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -microtime@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/microtime/-/microtime-3.1.1.tgz#f3ce12f4091c55fb2982c87205e2e7698afdcd0c" - integrity sha512-to1r7o24cDsud9IhN6/8wGmMx5R2kT0w2Xwm5okbYI3d1dk6Xv0m+Z+jg2vS9pt+ocgQHTCtgs/YuyJhySzxNg== - dependencies: - node-addon-api "^5.0.0" - node-gyp-build "^4.4.0" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== - dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -morgan@^1.9.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" - integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== - dependencies: - basic-auth "~2.0.1" - debug "2.6.9" - depd "~2.0.0" - on-finished "~2.3.0" - on-headers "~1.0.2" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -n-readlines@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/n-readlines/-/n-readlines-1.0.1.tgz#bbb7364d38bc31a170a199f986fcacfa76b95f6e" - integrity sha512-z4SyAIVgMy7CkgsoNw7YVz40v0g4+WWvvqy8+ZdHrCtgevcEO758WQyrYcw3XPxcLxF+//RszTz/rO48nzD0wQ== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -napi-thread-safe-callback@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/napi-thread-safe-callback/-/napi-thread-safe-callback-0.0.6.tgz#ef86a149b5312e480f74e89a614e6d9e3b17b456" - integrity sha512-X7uHCOCdY4u0yamDxDrv3jF2NtYc8A1nvPzBQgvpoSX+WB3jAe2cVNsY448V1ucq7Whf9Wdy02HEUoLW5rJKWg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -node-abi@^3.3.0: - version "3.54.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.54.0.tgz#f6386f7548817acac6434c6cba02999c9aebcc69" - integrity sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA== - dependencies: - semver "^7.3.5" - -node-addon-api@^1.7.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" - integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== - -node-addon-api@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" - integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== - -node-fetch@^2.6.0, node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@^4.4.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" - integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== - -node-gyp@^9.3.1: - version "9.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" - integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.5, object.entries@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.groupby@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" - integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== - dependencies: - array.prototype.filter "^1.0.3" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - -object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -one-time@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" - integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== - dependencies: - fn.name "1.x.x" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^7.4.2: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== - -p-event@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-5.0.1.tgz#614624ec02ae7f4f13d09a721c90586184af5b0c" - integrity sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ== - dependencies: - p-timeout "^5.0.2" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-5.5.0.tgz#054ca8ca778dfa4cf3f8db6638ccb5b937266715" - integrity sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg== - dependencies: - aggregate-error "^4.0.0" - -p-timeout@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" - integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== - -pako@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" - integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -patch-package@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61" - integrity sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA== - dependencies: - "@yarnpkg/lockfile" "^1.1.0" - chalk "^4.1.2" - ci-info "^3.7.0" - cross-spawn "^7.0.3" - find-yarn-workspace-root "^2.0.0" - fs-extra "^9.0.0" - json-stable-stringify "^1.0.2" - klaw-sync "^6.0.0" - minimist "^1.2.6" - open "^7.4.2" - rimraf "^2.6.3" - semver "^7.5.3" - slash "^2.0.0" - tmp "^0.0.33" - yaml "^2.2.2" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pkg-conf@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-4.0.0.tgz#63ace00cbacfa94c2226aee133800802d3e3b80c" - integrity sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w== - dependencies: - find-up "^6.0.0" - load-json-file "^7.0.0" - -pkg-dir@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" - integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== - dependencies: - find-up "^5.0.0" - -plur@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/plur/-/plur-5.1.0.tgz#bff58c9f557b9061d60d8ebf93959cf4b08594ae" - integrity sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg== - dependencies: - irregular-plurals "^3.3.0" - -prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.2.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -prettier@^3.0.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== - -pretty-ms@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" - integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== - dependencies: - parse-ms "^2.1.0" - -prom-client@13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-13.1.0.tgz#1185caffd8691e28d32e373972e662964e3dba45" - integrity sha512-jT9VccZCWrJWXdyEtQddCDszYsiuWj5T0ekrPszi/WEegj3IZy6Mm09iOOVM86A4IKMWq8hZkT2dD9MaSe+sng== - dependencies: - tdigest "^0.1.1" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -protobufjs@^6.10.3, protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: - version "6.11.4" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" - integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" ">=13.7.0" - long "^4.0.0" - -protobufjs@^7.0.0: - version "7.2.6" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.6.tgz#4a0ccd79eb292717aacf07530a07e0ed20278215" - integrity sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -readonly-date@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/readonly-date/-/readonly-date-1.0.0.tgz#5af785464d8c7d7c40b9d738cbde8c646f97dcd9" - integrity sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ== - -reflect.getprototypeof@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" - integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - get-intrinsic "^1.2.3" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== - dependencies: - call-bind "^1.0.6" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requireindex@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" - integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.12.0, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rollup@^2.79.1: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== - optionalDependencies: - fsevents "~2.3.2" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" - integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== - dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - -safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-error@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" - integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== - dependencies: - type-fest "^0.13.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -ses@^0.18.4, ses@^0.18.5, ses@^0.18.8: - version "0.18.8" - resolved "https://registry.yarnpkg.com/ses/-/ses-0.18.8.tgz#88036511ac3b3c07e4d82dd8cfc6e5f3788205b6" - integrity sha512-kOH1AhJc6gWDXKURKeU1w7iFUdImAegAljVvBg5EUBgNqjH4bxcEsGVUadVEPtA2PVRMyQp1fiSMDwEZkQNj1g== - dependencies: - "@endo/env-options" "^0.1.4" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== - dependencies: - define-data-property "^1.1.2" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.1" - -set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.3.tgz#7d8a75d7ce845c0a96f710917174dba0d543a785" - integrity sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" - integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.17" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" - integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== - -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -ssri@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== - -stack-utils@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -supertap@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/supertap/-/supertap-3.0.1.tgz#aa89e4522104402c6e8fe470a7d2db6dc4037c6a" - integrity sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw== - dependencies: - indent-string "^5.0.0" - js-yaml "^3.14.1" - serialize-error "^7.0.1" - strip-ansi "^7.0.1" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-element-attributes@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz#0c55afac6284291ab563d0913c062cf78a8c0ddb" - integrity sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA== - -symbol-observable@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" - integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== - -synckit@^0.8.6: - version "0.8.8" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" - integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== - dependencies: - "@pkgr/core" "^0.1.0" - tslib "^2.6.2" - -table@^6.7.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.1.11, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tdigest@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.2.tgz#96c64bac4ff10746b910b0e23b515794e12faced" - integrity sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA== - dependencies: - bintrees "1.0.2" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -temp@^0.9.1: - version "0.9.4" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" - integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== - dependencies: - mkdirp "^0.5.1" - rimraf "~2.6.2" - -text-hex@1.0.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" - integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -time-zone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" - integrity sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -triple-beam@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" - integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== - -triple-beam@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" - integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== - -ts-api-utils@^1.0.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" - integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsutils@^3.21.0, tsutils@~3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" - integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typescript@~5.1.3: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== - dependencies: - unique-slug "^3.0.0" - -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== - dependencies: - imurmurhash "^0.1.4" - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -wbasenodejscpp@latest: - version "0.3.134" - resolved "https://registry.yarnpkg.com/wbasenodejscpp/-/wbasenodejscpp-0.3.134.tgz#c23c06bd8c3e170afe59084cfa6e7d41c07b0ffa" - integrity sha512-B3cyJ14XNKe7gfu+pQPdCkDKTMu4DiFS/iKWE+1AhroChj+hLiNYCcoUuvsjEocQtBPItjb57mbhdKCJ80pjCA== - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -well-known-symbols@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" - integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.14, which-typed-array@^1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== - dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.1" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.2, wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -winston-transport@^4.4.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" - integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== - dependencies: - logform "^2.3.2" - readable-stream "^3.6.0" - triple-beam "^1.3.0" - -winston@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" - integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== - dependencies: - "@dabh/diagnostics" "^2.0.2" - async "^3.1.0" - is-stream "^2.0.0" - logform "^2.2.0" - one-time "^1.0.0" - readable-stream "^3.4.0" - stack-trace "0.0.x" - triple-beam "^1.3.0" - winston-transport "^4.4.0" - -wrap-ansi@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -ws@^7, ws@^7.2.0: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xstream@^11.14.0: - version "11.14.0" - resolved "https://registry.yarnpkg.com/xstream/-/xstream-11.14.0.tgz#2c071d26b18310523b6877e86b4e54df068a9ae5" - integrity sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw== - dependencies: - globalthis "^1.0.1" - symbol-observable "^2.0.3" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.2.2: - version "2.3.4" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" - integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.5.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: 10c0/53c2b231a61a46792b39a0d43bc4f4f776bb4542aa57ee04930676802e5501282c2fc8aac14e4cd1f1120ff8b52616b6ff5ab539ad30aa2277d726444b71619f + languageName: node + linkType: hard + +"@agoric/access-token@npm:^0.4.22-u11wf.0": + version: 0.4.22-u11wf.0 + resolution: "@agoric/access-token@npm:0.4.22-u11wf.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + n-readlines: "npm:^1.0.0" + tmp: "npm:^0.2.1" + checksum: 10c0/d6051398c6a0c279c67e9eaba3305eb9e958d1beffa5c9171edf269af19894b746afe1e477fa2b116ed82f7b52040c37e1b790554b8ec8c2aa98ed74a48f7bb2 + languageName: node + linkType: hard + +"@agoric/assert@npm:dev": + version: 0.6.1-dev-0705f2c.0 + resolution: "@agoric/assert@npm:0.6.1-dev-0705f2c.0" + checksum: 10c0/c217dc93d2a765dd4cfe74918554a4a9618f2ef385472f2d0c39372e22323193d83f75741a20c9c9b9a96cc1db4548c6c6121de32001f631bd5c0ee0201cce09 + languageName: node + linkType: hard + +"@agoric/babel-generator@npm:^7.17.6": + version: 7.17.6 + resolution: "@agoric/babel-generator@npm:7.17.6" + dependencies: + "@babel/types": "npm:^7.17.0" + jsesc: "npm:^2.5.1" + source-map: "npm:^0.5.0" + checksum: 10c0/59db151ae737bd9b1f21c1589df4c7da9cbf484de5b5cc8352052825c2d977283d975303f55acb54d0210c176cb405da263073ceba1d3a6db65c6e21cc6e663f + languageName: node + linkType: hard + +"@agoric/base-zone@npm:0.1.1-dev-5a4fc01.0+5a4fc01": + version: 0.1.1-dev-5a4fc01.0 + resolution: "@agoric/base-zone@npm:0.1.1-dev-5a4fc01.0" + dependencies: + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/far": "npm:^1.1.8" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/d9232aa36561e9b4ab98348fbfd909f0e77034db5136623e06184228fb39c4675c3568b3578bac3d7056a68190a6b9a5d9d47e5a9f5cc670c5fac21443fced13 + languageName: node + linkType: hard + +"@agoric/cache@npm:^0.3.3-u11wf.0, @agoric/cache@npm:^0.3.3-u12.0": + version: 0.3.3-u13.0 + resolution: "@agoric/cache@npm:0.3.3-u13.0" + dependencies: + "@agoric/internal": "npm:^0.4.0-u13.0" + "@agoric/notifier": "npm:^0.6.3-u13.0" + "@agoric/store": "npm:^0.9.3-u13.0" + "@agoric/vat-data": "npm:^0.5.3-u13.0" + "@endo/far": "npm:0.2.18" + "@endo/marshal": "npm:0.8.5" + checksum: 10c0/154c83f415d379758a637d9d38c2b1874bf85f756a8dcd7d2878d5ea52946a016ea5e6d031753cd975c793ccc9ab460599c5bf98d06b957f663f481cf6230b81 + languageName: node + linkType: hard + +"@agoric/casting@npm:^0.4.3-u11wf.0, @agoric/casting@npm:^0.4.3-u12.0, @agoric/casting@npm:^0.4.3-u13.0": + version: 0.4.3-u13.0 + resolution: "@agoric/casting@npm:0.4.3-u13.0" + dependencies: + "@agoric/internal": "npm:^0.4.0-u13.0" + "@agoric/notifier": "npm:^0.6.3-u13.0" + "@agoric/spawner": "npm:^0.6.9-u13.0" + "@agoric/store": "npm:^0.9.3-u13.0" + "@cosmjs/encoding": "npm:^0.30.1" + "@cosmjs/proto-signing": "npm:^0.30.1" + "@cosmjs/stargate": "npm:^0.30.1" + "@cosmjs/tendermint-rpc": "npm:^0.30.1" + "@endo/far": "npm:0.2.18" + "@endo/init": "npm:0.5.56" + "@endo/lockdown": "npm:0.1.28" + "@endo/marshal": "npm:0.8.5" + "@endo/promise-kit": "npm:0.2.56" + node-fetch: "npm:^2.6.0" + checksum: 10c0/a5e52fe55fb397e30b9167e0c20b7a0fa8575e7975f7db9fd43e12ce65dd83efd5104171064d373674e5e177a9ae77404b93c8235c58ec206e1777a95bdc2025 + languageName: node + linkType: hard + +"@agoric/cosmic-proto@npm:dev": + version: 0.4.1-dev-5a4fc01.0 + resolution: "@agoric/cosmic-proto@npm:0.4.1-dev-5a4fc01.0" + dependencies: + "@endo/base64": "npm:^1.0.8" + "@endo/init": "npm:^1.1.6" + checksum: 10c0/3bdd45c33cf9f23e49f718a0551367a647e3943fbb4c333ca49eaeb6e765f4e10bc03cef216657bc6b387d17fcf3499d9dade6fdff289b2af1a8517a5a8ccebb + languageName: node + linkType: hard + +"@agoric/cosmic-swingset@npm:^0.42.0-u11wf.0": + version: 0.42.0-u13.0 + resolution: "@agoric/cosmic-swingset@npm:0.42.0-u13.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/cosmos": "npm:^0.35.0-u13.0" + "@agoric/deploy-script-support": "npm:^0.10.4-u13.0" + "@agoric/internal": "npm:^0.4.0-u13.0" + "@agoric/store": "npm:^0.9.3-u13.0" + "@agoric/swing-store": "npm:^0.9.2-u13.0" + "@agoric/swingset-vat": "npm:^0.32.3-u13.0" + "@agoric/telemetry": "npm:^0.6.3-u13.0" + "@endo/far": "npm:0.2.18" + "@endo/import-bundle": "npm:0.3.4" + "@endo/init": "npm:0.5.56" + "@endo/marshal": "npm:0.8.5" + "@endo/nat": "npm:4.1.27" + "@endo/promise-kit": "npm:0.2.56" + "@iarna/toml": "npm:^2.2.3" + "@opentelemetry/api": "npm:~1.3.0" + "@opentelemetry/sdk-metrics": "npm:~1.9.0" + anylogger: "npm:^0.21.0" + deterministic-json: "npm:^1.0.5" + import-meta-resolve: "npm:^2.2.1" + tmp: "npm:^0.2.1" + bin: + ag-chain-cosmos: src/entrypoint.js + checksum: 10c0/8cbc61bd49356aaac43875694afe96f0e2478d631bd1f8cdcc7f66967399b37a756e66541a701999f8d4cb5b2e37db2755d4fddcd31725f840b20b7a5ba03971 + languageName: node + linkType: hard + +"@agoric/cosmic-swingset@npm:agoric-upgrade-11": + version: 0.42.0-u11wf.0 + resolution: "@agoric/cosmic-swingset@npm:0.42.0-u11wf.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/cosmos": "npm:^0.35.0-u11wf.0" + "@agoric/deploy-script-support": "npm:^0.10.4-u11wf.0" + "@agoric/internal": "npm:^0.3.3-u11wf.0" + "@agoric/store": "npm:^0.9.3-u11wf.0" + "@agoric/swing-store": "npm:^0.9.2-u11wf.0" + "@agoric/swingset-vat": "npm:^0.32.3-u11wf.0" + "@agoric/telemetry": "npm:^0.6.3-u11wf.0" + "@endo/far": "npm:0.2.18" + "@endo/import-bundle": "npm:0.3.4" + "@endo/init": "npm:0.5.56" + "@endo/marshal": "npm:0.8.5" + "@endo/nat": "npm:4.1.27" + "@endo/promise-kit": "npm:0.2.56" + "@iarna/toml": "npm:^2.2.3" + "@opentelemetry/api": "npm:~1.3.0" + "@opentelemetry/sdk-metrics": "npm:~1.9.0" + anylogger: "npm:^0.21.0" + deterministic-json: "npm:^1.0.5" + import-meta-resolve: "npm:^2.2.1" + tmp: "npm:^0.2.1" + bin: + ag-chain-cosmos: src/entrypoint.js + checksum: 10c0/837c6c3d9fe2f6444522afd6541d7506f35c337a12a175996f0951495833200543d7789841d0d860375576203eb0a5dc60d4c14a4e4e81f765188ea531b0b7df + languageName: node + linkType: hard + +"@agoric/cosmos@npm:^0.35.0-u11wf.0, @agoric/cosmos@npm:^0.35.0-u13.0": + version: 0.35.0-u13.0 + resolution: "@agoric/cosmos@npm:0.35.0-u13.0" + dependencies: + bindings: "npm:^1.2.1" + napi-thread-safe-callback: "npm:0.0.6" + node-addon-api: "npm:^1.7.1" + checksum: 10c0/7e4a240da55b593e1a0cbd6b4f830b6f711f54c3e5b174dae1ebfed23d0918add0e41d82b150fec0b363fe74fee4a4d4c080d309b31ebb1f8b0936413432a04c + languageName: node + linkType: hard + +"@agoric/deploy-script-support@npm:dev": + version: 0.10.4-dev-5a4fc01.0 + resolution: "@agoric/deploy-script-support@npm:0.10.4-dev-5a4fc01.0" + dependencies: + "@agoric/ertp": "npm:0.16.3-dev-5a4fc01.0+5a4fc01" + "@agoric/import-manager": "npm:0.3.12-dev-5a4fc01.0+5a4fc01" + "@agoric/internal": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/notifier": "npm:0.6.3-dev-5a4fc01.0+5a4fc01" + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@agoric/time": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/zoe": "npm:0.26.3-dev-5a4fc01.0+5a4fc01" + "@endo/base64": "npm:^1.0.8" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/promise-kit": "npm:^1.1.7" + "@endo/zip": "npm:^1.0.8" + checksum: 10c0/aa30943d203aebc10df17ccbbbc742f93a0cd5e2e3c032bc1312614df0503d8a0cff91787defd0500219c5e55b6df7bbc67b73aed7ea32ce410890c5a7617e0d + languageName: node + linkType: hard + +"@agoric/ertp@npm:dev": + version: 0.16.3-dev-5a4fc01.0 + resolution: "@agoric/ertp@npm:0.16.3-dev-5a4fc01.0" + dependencies: + "@agoric/notifier": "npm:0.6.3-dev-5a4fc01.0+5a4fc01" + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@agoric/vat-data": "npm:0.5.3-dev-5a4fc01.0+5a4fc01" + "@agoric/zone": "npm:0.2.3-dev-5a4fc01.0+5a4fc01" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/bb27e7bd49f495fcaff3f3dff1bf5bd0b4f84664555b10a6a3020f6dae6606ac647804b330cad14fe141fcc1378b9661d2a46ee05187f2ac050f97ae2a7c39c8 + languageName: node + linkType: hard + +"@agoric/eslint-config@npm:agoric-upgrade-11": + version: 0.4.1-u11wf.0 + resolution: "@agoric/eslint-config@npm:0.4.1-u11wf.0" + peerDependencies: + "@endo/eslint-plugin": 0.4.4 + "@jessie.js/eslint-plugin": ^0.3.0 + "@typescript-eslint/parser": ^5.55.0 + eslint: ^8.36.0 + eslint-config-airbnb-base: ^15.0.0 + eslint-config-jessie: ^0.0.6 + eslint-config-prettier: ^8.8.0 + eslint-plugin-import: ^2.25.3 + eslint-plugin-jsdoc: ^40.1.0 + eslint-plugin-jsx-a11y: ^6.5.1 + eslint-plugin-prettier: ^4.2.1 + eslint-plugin-react: ^7.28.0 + eslint-plugin-react-hooks: ^4.3.0 + prettier: ^2.8.1 + checksum: 10c0/52f3c271919a0eb157a729a74ac671e62fa484a265631d1acf9ea64b464a998c7c50b43fa98872552c634aa9f358e07aa2f2142783dc8bb22990fb9f25205eaa + languageName: node + linkType: hard + +"@agoric/governance@npm:dev": + version: 0.10.4-dev-5a4fc01.0 + resolution: "@agoric/governance@npm:0.10.4-dev-5a4fc01.0" + dependencies: + "@agoric/ertp": "npm:0.16.3-dev-5a4fc01.0+5a4fc01" + "@agoric/internal": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/notifier": "npm:0.6.3-dev-5a4fc01.0+5a4fc01" + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@agoric/time": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/vat-data": "npm:0.5.3-dev-5a4fc01.0+5a4fc01" + "@agoric/zoe": "npm:0.26.3-dev-5a4fc01.0+5a4fc01" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/captp": "npm:^4.4.2" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/promise-kit": "npm:^1.1.7" + import-meta-resolve: "npm:^2.2.1" + checksum: 10c0/6f6ad9f0729bd7436d741bfe1f338723e9a056e10e392eb9e1d8778eb70f633b5b55b90dffd06241d4da32f14aae642557fdd75739a0a772daae2ec81afe319b + languageName: node + linkType: hard + +"@agoric/import-manager@npm:0.3.12-dev-5a4fc01.0+5a4fc01": + version: 0.3.12-dev-5a4fc01.0 + resolution: "@agoric/import-manager@npm:0.3.12-dev-5a4fc01.0" + checksum: 10c0/aa164b8714a5f0f4cde202a66e86697ce5606df900494c2e53f317be9ba28fc6ac0f26c960393ecaec4d3dcddc383b97fc737c5aeb40c97905529bee6d67cabf + languageName: node + linkType: hard + +"@agoric/inter-protocol@npm:^0.16.2-u11wf.0, @agoric/inter-protocol@npm:^0.16.2-u12.0": + version: 0.16.2-u13.0 + resolution: "@agoric/inter-protocol@npm:0.16.2-u13.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/ertp": "npm:^0.16.3-u13.0" + "@agoric/governance": "npm:^0.10.4-u13.0" + "@agoric/internal": "npm:^0.4.0-u13.0" + "@agoric/notifier": "npm:^0.6.3-u13.0" + "@agoric/store": "npm:^0.9.3-u13.0" + "@agoric/time": "npm:^0.3.3-u13.0" + "@agoric/vat-data": "npm:^0.5.3-u13.0" + "@agoric/vats": "npm:^0.15.2-u13.0" + "@agoric/zoe": "npm:^0.26.3-u13.0" + "@endo/captp": "npm:3.1.1" + "@endo/eventual-send": "npm:0.17.2" + "@endo/far": "npm:0.2.18" + "@endo/marshal": "npm:0.8.5" + "@endo/nat": "npm:4.1.27" + jessie.js: "npm:^0.3.2" + checksum: 10c0/326ae57bf128f30dff660e5983d97175a555fa449c5fae2a614ea05956a9b0eccfdfeeb564b478365b2e541bdcf2d5261733e70b4fe58262c4003c09ee21feb6 + languageName: node + linkType: hard + +"@agoric/internal@npm:dev": + version: 0.3.3-dev-5a4fc01.0 + resolution: "@agoric/internal@npm:0.3.3-dev-5a4fc01.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-5a4fc01.0+5a4fc01" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + "@endo/stream": "npm:^1.2.7" + anylogger: "npm:^0.21.0" + jessie.js: "npm:^0.3.4" + checksum: 10c0/75b7c19bfc3d139753ec07e06072a043cfea65eed4a5e4bfc874e7fcc9b039a0b6dae0e06ff68556fbba8c529ba53bd1cd4713391f4bccc2c94e61059fd0e202 + languageName: node + linkType: hard + +"@agoric/kmarshal@npm:0.1.1-dev-5a4fc01.0+5a4fc01": + version: 0.1.1-dev-5a4fc01.0 + resolution: "@agoric/kmarshal@npm:0.1.1-dev-5a4fc01.0" + dependencies: + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + checksum: 10c0/257a3becdb5bf40cb6577b73747c0908f29b1cbb55515460191737e9a456f226cafc6af505ca0677f8cade27bef474fc2103e485338a7b7a857f03350ccb8ffc + languageName: node + linkType: hard + +"@agoric/network@npm:0.1.1-dev-5a4fc01.0+5a4fc01": + version: 0.1.1-dev-5a4fc01.0 + resolution: "@agoric/network@npm:0.1.1-dev-5a4fc01.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@agoric/vat-data": "npm:0.5.3-dev-5a4fc01.0+5a4fc01" + "@endo/base64": "npm:^1.0.8" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/09015eaaad8dbd7c49f98c94008b2e04f970ca83f82119ee510797ef523d449479815a522485a01d732d18b2fc47189c48042b35ee8e003269429020bee0353f + languageName: node + linkType: hard + +"@agoric/notifier@npm:dev": + version: 0.6.3-dev-5a4fc01.0 + resolution: "@agoric/notifier@npm:0.6.3-dev-5a4fc01.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/vat-data": "npm:0.5.3-dev-5a4fc01.0+5a4fc01" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/bd2385b271415970e864957b6c856ffc090d297b7f742aa6275886d3eeaaf5387de850cc029413473265f1dc311d506035536e3679cd4463c025dbf0cf8d64c1 + languageName: node + linkType: hard + +"@agoric/smart-wallet@npm:^0.5.4-u11wf.0, @agoric/smart-wallet@npm:^0.5.4-u12.0": + version: 0.5.4-u13.0 + resolution: "@agoric/smart-wallet@npm:0.5.4-u13.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/casting": "npm:^0.4.3-u13.0" + "@agoric/ertp": "npm:^0.16.3-u13.0" + "@agoric/internal": "npm:^0.4.0-u13.0" + "@agoric/notifier": "npm:^0.6.3-u13.0" + "@agoric/store": "npm:^0.9.3-u13.0" + "@agoric/swingset-vat": "npm:^0.32.3-u13.0" + "@agoric/vat-data": "npm:^0.5.3-u13.0" + "@agoric/vats": "npm:^0.15.2-u13.0" + "@agoric/zoe": "npm:^0.26.3-u13.0" + "@endo/eventual-send": "npm:0.17.2" + "@endo/far": "npm:0.2.18" + "@endo/marshal": "npm:0.8.5" + "@endo/nat": "npm:4.1.27" + "@endo/promise-kit": "npm:0.2.56" + checksum: 10c0/b48b3be38bd5316598ef7f62760345a914f8d5592583f0ba182419b85afabc467d7454c2b249a90d9d78d7bb9ddf1b400679a06b989447985c7e71f2f767c643 + languageName: node + linkType: hard + +"@agoric/solo@npm:agoric-upgrade-11": + version: 0.10.4-u11wf.0 + resolution: "@agoric/solo@npm:0.10.4-u11wf.0" + dependencies: + "@agoric/access-token": "npm:^0.4.22-u11wf.0" + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/cache": "npm:^0.3.3-u11wf.0" + "@agoric/cosmic-swingset": "npm:^0.42.0-u11wf.0" + "@agoric/internal": "npm:^0.3.3-u11wf.0" + "@agoric/notifier": "npm:^0.6.3-u11wf.0" + "@agoric/spawner": "npm:^0.6.9-u11wf.0" + "@agoric/store": "npm:^0.9.3-u11wf.0" + "@agoric/swing-store": "npm:^0.9.2-u11wf.0" + "@agoric/swingset-vat": "npm:^0.32.3-u11wf.0" + "@agoric/telemetry": "npm:^0.6.3-u11wf.0" + "@agoric/time": "npm:^0.3.3-u11wf.0" + "@agoric/vats": "npm:^0.15.2-u11wf.0" + "@agoric/wallet": "npm:^0.18.4-u11wf.0" + "@endo/captp": "npm:3.1.1" + "@endo/eventual-send": "npm:0.17.2" + "@endo/import-bundle": "npm:0.3.4" + "@endo/init": "npm:0.5.56" + "@endo/marshal": "npm:0.8.5" + "@endo/promise-kit": "npm:0.2.56" + agoric: "npm:^0.21.2-u11wf.0" + anylogger: "npm:^0.21.0" + deterministic-json: "npm:^1.0.5" + esm: "github:agoric-labs/esm#Agoric-built" + express: "npm:^4.17.1" + http-proxy-middleware: "npm:^2.0.6" + import-meta-resolve: "npm:^2.2.1" + minimist: "npm:^1.2.0" + morgan: "npm:^1.9.1" + node-fetch: "npm:^2.6.0" + temp: "npm:^0.9.1" + tmp: "npm:^0.2.1" + ws: "npm:^7.2.0" + bin: + ag-solo: src/entrypoint.js + checksum: 10c0/b3c8000bb928b4c3ff633d4587e4965e6fcaa3668d665355ab75534fe81aab21f1fba2757429592ed9e184e31945f7d8220ea04f0a554ff650953c53eb44e883 + languageName: node + linkType: hard + +"@agoric/spawner@npm:^0.6.9-u11wf.0, @agoric/spawner@npm:^0.6.9-u13.0": + version: 0.6.9-u13.0 + resolution: "@agoric/spawner@npm:0.6.9-u13.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@endo/eventual-send": "npm:0.17.2" + "@endo/import-bundle": "npm:0.3.4" + "@endo/marshal": "npm:0.8.5" + checksum: 10c0/6c4a72505b4d60a7f33069bcf27d9520a6a21532927acbdb9392cecb56835021ac866c8798a955a36d5ec37ed7787f75b196fa39690d9f0c829f3ba4f85f5925 + languageName: node + linkType: hard + +"@agoric/store@npm:dev": + version: 0.9.3-dev-5a4fc01.0 + resolution: "@agoric/store@npm:0.9.3-dev-5a4fc01.0" + dependencies: + "@endo/errors": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/8fbe59f1a8860a514b80d158119e8b3de6f608eec8c55473bc0a1595e08bf0e380f04fcf90bbf5d1c06114f01a59dec8f3b7ab7eaf6cfb80bbc98a6ea15bc6b1 + languageName: node + linkType: hard + +"@agoric/swing-store@npm:0.9.2-dev-5a4fc01.0+5a4fc01": + version: 0.9.2-dev-5a4fc01.0 + resolution: "@agoric/swing-store@npm:0.9.2-dev-5a4fc01.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@endo/base64": "npm:^1.0.8" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/check-bundle": "npm:^1.0.11" + "@endo/errors": "npm:^1.2.7" + "@endo/nat": "npm:^5.0.12" + better-sqlite3: "npm:^9.1.1" + checksum: 10c0/ac7001be7e1d08460d1f812563777308eca367fcf0f4b40d57f9031ae02dcdde897a52b94bad81866afcbfc2c1849c4a46ef5a8e8e113d5dc3d6683f3e53782f + languageName: node + linkType: hard + +"@agoric/swing-store@npm:^0.9.1": + version: 0.9.1 + resolution: "@agoric/swing-store@npm:0.9.1" + dependencies: + "@agoric/assert": "npm:^0.6.0" + "@agoric/internal": "npm:^0.3.2" + "@endo/base64": "npm:^0.2.31" + "@endo/bundle-source": "npm:^2.5.1" + "@endo/check-bundle": "npm:^0.2.18" + "@endo/nat": "npm:^4.1.27" + better-sqlite3: "npm:^8.2.0" + checksum: 10c0/523a61c2109e550305a111e6573d180e4dbe2806c1abc2fc623f8e40a74171c7351af69d2864010bfccc75ddc0fa7d67d613460be3729243718cc66f4d0eb148 + languageName: node + linkType: hard + +"@agoric/swing-store@npm:^0.9.2-u11wf.0, @agoric/swing-store@npm:^0.9.2-u13.0": + version: 0.9.2-u13.0 + resolution: "@agoric/swing-store@npm:0.9.2-u13.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/internal": "npm:^0.4.0-u13.0" + "@endo/base64": "npm:0.2.31" + "@endo/bundle-source": "npm:2.5.2-upstream-rollup" + "@endo/check-bundle": "npm:0.2.18" + "@endo/nat": "npm:4.1.27" + better-sqlite3: "npm:^8.2.0" + checksum: 10c0/b4f1b3ec84b3937238c23039cee5f17d621371d077b7412e184147fd85265435e5c44ea725718148e75deb286a9ed8333e01e5888812d36e37aedcd8ef26c190 + languageName: node + linkType: hard + +"@agoric/swingset-liveslots@npm:0.10.3-dev-5a4fc01.0+5a4fc01": + version: 0.10.3-dev-5a4fc01.0 + resolution: "@agoric/swingset-liveslots@npm:0.10.3-dev-5a4fc01.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@endo/env-options": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/far": "npm:^1.1.8" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/b562c018de66950e7ce8ac7c3897fb635ec96b7eb2c327d9a0f57b00e711d33b42bf767ba714fa77064f591cb471222edc8fd46d4df562e5e47a23f0c5c7ebda + languageName: node + linkType: hard + +"@agoric/swingset-liveslots@npm:^0.10.2": + version: 0.10.2 + resolution: "@agoric/swingset-liveslots@npm:0.10.2" + dependencies: + "@agoric/assert": "npm:^0.6.0" + "@agoric/internal": "npm:^0.3.2" + "@agoric/store": "npm:^0.9.2" + "@agoric/vat-data": "npm:^0.5.2" + "@endo/eventual-send": "npm:^0.17.2" + "@endo/exo": "npm:^0.2.2" + "@endo/init": "npm:^0.5.56" + "@endo/marshal": "npm:^0.8.5" + "@endo/nat": "npm:^4.1.27" + "@endo/pass-style": "npm:^0.1.3" + "@endo/patterns": "npm:^0.2.2" + "@endo/promise-kit": "npm:^0.2.56" + peerDependencies: + "@endo/far": ^0.2.18 + "@endo/ses-ava": ^0.2.40 + ava: ^5.2.0 + checksum: 10c0/b4eb50845fe87172ae192629fa0e7d7603d2af84565c163d9320403d9eb4a1dccbe592e75c5af82969f4b72ad3b1329fceb5b85cc981f26ad0452d5d25db1b0b + languageName: node + linkType: hard + +"@agoric/swingset-liveslots@npm:^0.10.3-u13.0": + version: 0.10.3-u13.0 + resolution: "@agoric/swingset-liveslots@npm:0.10.3-u13.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/internal": "npm:^0.4.0-u13.0" + "@agoric/store": "npm:^0.9.3-u13.0" + "@agoric/vat-data": "npm:^0.5.3-u13.0" + "@endo/eventual-send": "npm:0.17.2" + "@endo/exo": "npm:0.2.2" + "@endo/far": "npm:0.2.18" + "@endo/init": "npm:0.5.56" + "@endo/marshal": "npm:0.8.5" + "@endo/nat": "npm:4.1.27" + "@endo/pass-style": "npm:0.1.3" + "@endo/patterns": "npm:0.2.2" + "@endo/promise-kit": "npm:0.2.56" + checksum: 10c0/a00058ff9d6b5baca54d60b44fce7418ee6380b3f022adbc074b6ce7e19ecf4b8eff1b22940ee2449d7ed702a9362d22909776a7b754affdc8aa99c24e7575b3 + languageName: node + linkType: hard + +"@agoric/swingset-vat@npm:0.32.3-dev-5a4fc01.0+5a4fc01": + version: 0.32.3-dev-5a4fc01.0 + resolution: "@agoric/swingset-vat@npm:0.32.3-dev-5a4fc01.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/kmarshal": "npm:0.1.1-dev-5a4fc01.0+5a4fc01" + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@agoric/swing-store": "npm:0.9.2-dev-5a4fc01.0+5a4fc01" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-5a4fc01.0+5a4fc01" + "@agoric/swingset-xsnap-supervisor": "npm:0.10.3-dev-5a4fc01.0+5a4fc01" + "@agoric/time": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/vat-data": "npm:0.5.3-dev-5a4fc01.0+5a4fc01" + "@agoric/xsnap-lockdown": "npm:0.14.1-dev-5a4fc01.0+5a4fc01" + "@endo/base64": "npm:^1.0.8" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/captp": "npm:^4.4.2" + "@endo/check-bundle": "npm:^1.0.11" + "@endo/compartment-mapper": "npm:^1.3.1" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/import-bundle": "npm:^1.3.1" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + "@endo/ses-ava": "npm:^1.2.7" + "@endo/stream": "npm:^1.2.7" + "@endo/zip": "npm:^1.0.8" + ansi-styles: "npm:^6.2.1" + anylogger: "npm:^0.21.0" + better-sqlite3: "npm:^9.1.1" + import-meta-resolve: "npm:^2.2.1" + microtime: "npm:^3.1.0" + semver: "npm:^6.3.0" + tmp: "npm:^0.2.1" + yargs-parser: "npm:^21.1.1" + peerDependencies: + "@agoric/xsnap": ^0.14.2 + ava: ^5.3.0 + bin: + vat: bin/vat + checksum: 10c0/3a3ffbfcfe6ffd053bd01a804dd47bb291252164ed55d0076bf56bfff11b8599c8daa7e2e8f4897dbfa2def57e51c1177294829c1348c015728b728b5a0576c5 + languageName: node + linkType: hard + +"@agoric/swingset-vat@npm:^0.32.2": + version: 0.32.2 + resolution: "@agoric/swingset-vat@npm:0.32.2" + dependencies: + "@agoric/assert": "npm:^0.6.0" + "@agoric/internal": "npm:^0.3.2" + "@agoric/store": "npm:^0.9.2" + "@agoric/swing-store": "npm:^0.9.1" + "@agoric/swingset-liveslots": "npm:^0.10.2" + "@agoric/swingset-xsnap-supervisor": "npm:^0.10.2" + "@agoric/time": "npm:^0.3.2" + "@agoric/vat-data": "npm:^0.5.2" + "@agoric/xsnap": "npm:^0.14.2" + "@agoric/xsnap-lockdown": "npm:^0.14.0" + "@endo/base64": "npm:^0.2.31" + "@endo/bundle-source": "npm:^2.5.1" + "@endo/captp": "npm:^3.1.1" + "@endo/check-bundle": "npm:^0.2.18" + "@endo/compartment-mapper": "npm:^0.8.4" + "@endo/eventual-send": "npm:^0.17.2" + "@endo/far": "npm:^0.2.18" + "@endo/import-bundle": "npm:^0.3.4" + "@endo/init": "npm:^0.5.56" + "@endo/marshal": "npm:^0.8.5" + "@endo/nat": "npm:^4.1.27" + "@endo/promise-kit": "npm:^0.2.56" + "@endo/zip": "npm:^0.2.31" + ansi-styles: "npm:^6.2.1" + anylogger: "npm:^0.21.0" + import-meta-resolve: "npm:^2.2.1" + microtime: "npm:^3.1.0" + semver: "npm:^6.3.0" + tmp: "npm:^0.2.1" + peerDependencies: + "@endo/ses-ava": ^0.2.40 + ava: ^5.2.0 + bin: + vat: bin/vat + checksum: 10c0/de7adb1a526acab998c5074a62e5ed31fdd3c5a768634ff79c84f29b7d2df332d0b78d7486ae7c49c7e66022081eaf6ff5f0fd17d79a72a285fa49d009892cd8 + languageName: node + linkType: hard + +"@agoric/swingset-vat@npm:^0.32.3-u11wf.0, @agoric/swingset-vat@npm:^0.32.3-u12.0, @agoric/swingset-vat@npm:^0.32.3-u13.0": + version: 0.32.3-u13.0 + resolution: "@agoric/swingset-vat@npm:0.32.3-u13.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/internal": "npm:^0.4.0-u13.0" + "@agoric/store": "npm:^0.9.3-u13.0" + "@agoric/swing-store": "npm:^0.9.2-u13.0" + "@agoric/swingset-liveslots": "npm:^0.10.3-u13.0" + "@agoric/swingset-xsnap-supervisor": "npm:^0.10.3-u13.0" + "@agoric/time": "npm:^0.3.3-u13.0" + "@agoric/vat-data": "npm:^0.5.3-u13.0" + "@agoric/xsnap": "npm:^0.14.3-u13.0" + "@agoric/xsnap-lockdown": "npm:^0.14.1-u13.0" + "@endo/base64": "npm:0.2.31" + "@endo/bundle-source": "npm:2.5.2-upstream-rollup" + "@endo/captp": "npm:3.1.1" + "@endo/check-bundle": "npm:0.2.18" + "@endo/compartment-mapper": "npm:0.8.4" + "@endo/eventual-send": "npm:0.17.2" + "@endo/far": "npm:0.2.18" + "@endo/import-bundle": "npm:0.3.4" + "@endo/init": "npm:0.5.56" + "@endo/marshal": "npm:0.8.5" + "@endo/nat": "npm:4.1.27" + "@endo/promise-kit": "npm:0.2.56" + "@endo/ses-ava": "npm:0.2.40" + "@endo/zip": "npm:0.2.31" + ansi-styles: "npm:^6.2.1" + anylogger: "npm:^0.21.0" + import-meta-resolve: "npm:^2.2.1" + microtime: "npm:^3.1.0" + semver: "npm:^6.3.0" + tmp: "npm:^0.2.1" + peerDependencies: + ava: ^5.2.0 + bin: + vat: bin/vat + checksum: 10c0/0bb0ed167a18b46c09ce5585f2b450076dbb6c5e8f0a7470d0bbf8079f206ed48912c93e37c3c5c9afa5b2afad504f957d9696ce46dc3d4df266f43420bce353 + languageName: node + linkType: hard + +"@agoric/swingset-xsnap-supervisor@npm:0.10.3-dev-5a4fc01.0+5a4fc01": + version: 0.10.3-dev-5a4fc01.0 + resolution: "@agoric/swingset-xsnap-supervisor@npm:0.10.3-dev-5a4fc01.0" + checksum: 10c0/f5b8de4002e896b762a4a6c4e14a123082e27b33b8e7e63f19d1d5d8afe6e1fefe2fe4b57e0a2ce0986e296b21a96d0e55e91a77e33ff086dfa60a7a374ec927 + languageName: node + linkType: hard + +"@agoric/swingset-xsnap-supervisor@npm:^0.10.2": + version: 0.10.2 + resolution: "@agoric/swingset-xsnap-supervisor@npm:0.10.2" + checksum: 10c0/b699758bbd0b8718d3a095d9d79e3e09aa0ec45dd04e94f65a49bde2c8600ac1ce1117d43911df6e2de1c2904438deaa1f3038e8978d5c1859efa019b2292980 + languageName: node + linkType: hard + +"@agoric/swingset-xsnap-supervisor@npm:^0.10.3-u13.0": + version: 0.10.3-u13.0 + resolution: "@agoric/swingset-xsnap-supervisor@npm:0.10.3-u13.0" + checksum: 10c0/ba1b64a6e9db08365f09759f0f37b37268e3c70730f704e421110a4ae03d161b08ca5d6b6691cb7f285dec686bdc0ffa6603654793e471313fd173b468cc9519 + languageName: node + linkType: hard + +"@agoric/telemetry@npm:^0.6.3-u11wf.0, @agoric/telemetry@npm:^0.6.3-u13.0": + version: 0.6.3-u13.0 + resolution: "@agoric/telemetry@npm:0.6.3-u13.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/internal": "npm:^0.4.0-u13.0" + "@agoric/store": "npm:^0.9.3-u13.0" + "@endo/init": "npm:0.5.56" + "@endo/marshal": "npm:0.8.5" + "@endo/stream": "npm:0.3.25" + "@opentelemetry/api": "npm:~1.3.0" + "@opentelemetry/exporter-prometheus": "npm:~0.35.0" + "@opentelemetry/exporter-trace-otlp-http": "npm:~0.35.0" + "@opentelemetry/resources": "npm:~1.9.0" + "@opentelemetry/sdk-metrics": "npm:~1.9.0" + "@opentelemetry/sdk-trace-base": "npm:~1.9.0" + "@opentelemetry/semantic-conventions": "npm:~1.9.0" + anylogger: "npm:^0.21.0" + better-sqlite3: "npm:^8.2.0" + bufferfromfile: "github:agoric-labs/BufferFromFile#Agoric-built" + tmp: "npm:^0.2.1" + bin: + frcat: src/frcat-entrypoint.js + checksum: 10c0/02963e6c92be7ebce29974bdd130776fce434fff958cdde6f05dc2cbc86c9ecf88b8b5da3e4cb34136d5b714037f6052b8cb8d0b9490cb482deed16151efc816 + languageName: node + linkType: hard + +"@agoric/time@npm:dev": + version: 0.3.3-dev-5a4fc01.0 + resolution: "@agoric/time@npm:0.3.3-dev-5a4fc01.0" + dependencies: + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@endo/errors": "npm:^1.2.7" + "@endo/nat": "npm:^5.0.12" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/3ec3e3aea96be0f738116acd5de789ddf7c4bc209d77f6170defdd373a2f94821017d0dee200fb7f8c1be3776e0fe9c7f7d6238881313d1b8670b87cadcb3989 + languageName: node + linkType: hard + +"@agoric/vat-data@npm:dev": + version: 0.5.3-dev-5a4fc01.0 + resolution: "@agoric/vat-data@npm:0.5.3-dev-5a4fc01.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-5a4fc01.0+5a4fc01" + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-5a4fc01.0+5a4fc01" + "@endo/errors": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/2a1c6444ddf8ecd5f58ce53dcb29cb0b8ebd3b2ce86cdca670b9c0fccc19b7e2092fa0e8080922a243b01b5afe48566f2185be6b87373f461ab62e7b31ce9b9f + languageName: node + linkType: hard + +"@agoric/vats@npm:dev": + version: 0.15.2-dev-5a4fc01.0 + resolution: "@agoric/vats@npm:0.15.2-dev-5a4fc01.0" + dependencies: + "@agoric/cosmic-proto": "npm:0.4.1-dev-5a4fc01.0+5a4fc01" + "@agoric/ertp": "npm:0.16.3-dev-5a4fc01.0+5a4fc01" + "@agoric/governance": "npm:0.10.4-dev-5a4fc01.0+5a4fc01" + "@agoric/internal": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/network": "npm:0.1.1-dev-5a4fc01.0+5a4fc01" + "@agoric/notifier": "npm:0.6.3-dev-5a4fc01.0+5a4fc01" + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@agoric/swingset-vat": "npm:0.32.3-dev-5a4fc01.0+5a4fc01" + "@agoric/time": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/vat-data": "npm:0.5.3-dev-5a4fc01.0+5a4fc01" + "@agoric/vow": "npm:0.1.1-dev-5a4fc01.0+5a4fc01" + "@agoric/zoe": "npm:0.26.3-dev-5a4fc01.0+5a4fc01" + "@agoric/zone": "npm:0.2.3-dev-5a4fc01.0+5a4fc01" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/import-bundle": "npm:^1.3.1" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + import-meta-resolve: "npm:^2.2.1" + jessie.js: "npm:^0.3.4" + checksum: 10c0/d3b8f03ac33fe384e6adda6440d6141f1ba70e62035920d9281e71c2362ebc6b3ffdd2d20e8e175d4b2005f572c5c79752ee6bf1c87b5521b4d110456ecd5f20 + languageName: node + linkType: hard + +"@agoric/vow@npm:0.1.1-dev-5a4fc01.0+5a4fc01": + version: 0.1.1-dev-5a4fc01.0 + resolution: "@agoric/vow@npm:0.1.1-dev-5a4fc01.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-5a4fc01.0+5a4fc01" + "@agoric/internal": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@endo/env-options": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/de85aa932829e4787dc6e720e0892d6383c0d7b5c7873bba7234327c13ab9b4f26638a0775c343c6ff4f74db750833ed89502c15385f4524c76a8e7b50f017a9 + languageName: node + linkType: hard + +"@agoric/wallet-ui@npm:0.1.3-solo.0": + version: 0.1.3-solo.0 + resolution: "@agoric/wallet-ui@npm:0.1.3-solo.0" + checksum: 10c0/f55195f9800e19aff595d6f084e0e4b39b02e7f9dbfd9ed3f762d81212aefb690a983779683bd0d98fb4e58795eaa1580db0e86305b998b1655e7943307178e0 + languageName: node + linkType: hard + +"@agoric/wallet@npm:^0.18.4-u11wf.0": + version: 0.18.4-u13.0 + resolution: "@agoric/wallet@npm:0.18.4-u13.0" + dependencies: + "@agoric/wallet-ui": "npm:0.1.3-solo.0" + babel-eslint: "npm:^10.0.3" + eslint-plugin-eslint-comments: "npm:^3.1.2" + import-meta-resolve: "npm:^2.2.1" + checksum: 10c0/00fda700df5305a019ba5c4389dab8e8c4b77c05f0c43133c2f0fa899d18c2011e565ec3aa70f7fe786f1aa478a8fbae4556a77f9f7f803ce7cc1bb2787e447f + languageName: node + linkType: hard + +"@agoric/xsnap-lockdown@npm:0.14.1-dev-5a4fc01.0+5a4fc01": + version: 0.14.1-dev-5a4fc01.0 + resolution: "@agoric/xsnap-lockdown@npm:0.14.1-dev-5a4fc01.0" + checksum: 10c0/13b5431f3b54969deb867c4a9ef006de21218b10b13bfa73e8c39c69c1175b747b8b9d311cbf1c117e8941f92c5b5a7d3a3104f73a7b080d52a2e7733456de64 + languageName: node + linkType: hard + +"@agoric/xsnap-lockdown@npm:^0.14.0": + version: 0.14.0 + resolution: "@agoric/xsnap-lockdown@npm:0.14.0" + checksum: 10c0/c9babe5d8eb47c8dd3e29516a4927e2fa9b76a05421e7a87f104cb7b54f23484c810108a7f6904d479ca19dadf61c535860f17eaf54baf9b8934192f3bf8aedb + languageName: node + linkType: hard + +"@agoric/xsnap-lockdown@npm:^0.14.1-u13.0": + version: 0.14.1-u13.0 + resolution: "@agoric/xsnap-lockdown@npm:0.14.1-u13.0" + checksum: 10c0/91a20c010727144f2b150357d9b8491795cd296419b27c862738e31bb4d5ae22049af5f3fdacf4f4070a407e4fb6a653f0e265499dce8ecd5f898a12f924a0fa + languageName: node + linkType: hard + +"@agoric/xsnap@npm:^0.14.2": + version: 0.14.2 + resolution: "@agoric/xsnap@npm:0.14.2" + dependencies: + "@agoric/assert": "npm:^0.6.0" + "@agoric/internal": "npm:^0.3.2" + "@agoric/xsnap-lockdown": "npm:^0.14.0" + "@endo/bundle-source": "npm:^2.5.1" + "@endo/eventual-send": "npm:^0.17.2" + "@endo/init": "npm:^0.5.56" + "@endo/netstring": "npm:^0.3.26" + "@endo/promise-kit": "npm:^0.2.56" + "@endo/stream": "npm:^0.3.25" + "@endo/stream-node": "npm:^0.2.26" + glob: "npm:^7.1.6" + tmp: "npm:^0.2.1" + bin: + ava-xs: src/ava-xs.js + xsrepl: src/xsrepl + checksum: 10c0/432bf7ed200f56156db84aad8031932cb1ed229280a35ee374bd339a1a1ee9bf3201b871b81b13407768aad3ab6c2ea784d521757f3d565ccb604eaa898aa879 + languageName: node + linkType: hard + +"@agoric/xsnap@npm:^0.14.3-u13.0": + version: 0.14.3-u13.0 + resolution: "@agoric/xsnap@npm:0.14.3-u13.0" + dependencies: + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/internal": "npm:^0.4.0-u13.0" + "@agoric/xsnap-lockdown": "npm:^0.14.1-u13.0" + "@endo/bundle-source": "npm:2.5.2-upstream-rollup" + "@endo/eventual-send": "npm:0.17.2" + "@endo/init": "npm:0.5.56" + "@endo/netstring": "npm:0.3.26" + "@endo/promise-kit": "npm:0.2.56" + "@endo/stream": "npm:0.3.25" + "@endo/stream-node": "npm:0.2.26" + glob: "npm:^7.1.6" + tmp: "npm:^0.2.1" + bin: + ava-xs: src/ava-xs.js + xsrepl: src/xsrepl + checksum: 10c0/e47c37edb97c7b09a3072a9523aa6ad18ef616d603db4efa3c66c542d999127769f9d9d8f0384647e33a9e27fa23dfe81739bc26e3af939508599fac31da549e + languageName: node + linkType: hard + +"@agoric/zoe@npm:dev": + version: 0.26.3-dev-5a4fc01.0 + resolution: "@agoric/zoe@npm:0.26.3-dev-5a4fc01.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-5a4fc01.0+5a4fc01" + "@agoric/ertp": "npm:0.16.3-dev-5a4fc01.0+5a4fc01" + "@agoric/internal": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/notifier": "npm:0.6.3-dev-5a4fc01.0+5a4fc01" + "@agoric/store": "npm:0.9.3-dev-5a4fc01.0+5a4fc01" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-5a4fc01.0+5a4fc01" + "@agoric/swingset-vat": "npm:0.32.3-dev-5a4fc01.0+5a4fc01" + "@agoric/time": "npm:0.3.3-dev-5a4fc01.0+5a4fc01" + "@agoric/vat-data": "npm:0.5.3-dev-5a4fc01.0+5a4fc01" + "@agoric/vow": "npm:0.1.1-dev-5a4fc01.0+5a4fc01" + "@agoric/zone": "npm:0.2.3-dev-5a4fc01.0+5a4fc01" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/captp": "npm:^4.4.2" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/far": "npm:^1.1.8" + "@endo/import-bundle": "npm:^1.3.1" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/e036479dcfe36a9f28be428d7ea06a42a22e6393dc9974fd0a8b9cce286bcaed45d45e0e655e8fd1a5800651f9a01293a5b922c7e65023ffd2fb877b7d356093 + languageName: node + linkType: hard + +"@agoric/zone@npm:dev": + version: 0.2.3-dev-5a4fc01.0 + resolution: "@agoric/zone@npm:0.2.3-dev-5a4fc01.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-5a4fc01.0+5a4fc01" + "@agoric/vat-data": "npm:0.5.3-dev-5a4fc01.0+5a4fc01" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/pass-style": "npm:^1.4.6" + checksum: 10c0/bfed72195f26f9d19825c140be9748c741ad1dfaa35dde2c212a6b2c1ac22dac4db0abf5e0165e156adcb1c8f1fd5b13947191ada5432d56ee7486caf1073537 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" + dependencies: + "@babel/highlight": "npm:^7.23.4" + chalk: "npm:^2.4.2" + checksum: 10c0/a10e843595ddd9f97faa99917414813c06214f4d9205294013e20c70fbdf4f943760da37dec1d998bf3e6fc20fa2918a47c0e987a7e458663feb7698063ad7c6 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/generator@npm:7.23.6" + dependencies: + "@babel/types": "npm:^7.23.6" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: 10c0/53540e905cd10db05d9aee0a5304e36927f455ce66f95d1253bb8a179f286b88fa7062ea0db354c566fe27f8bb96567566084ffd259f8feaae1de5eccc8afbda + languageName: node + linkType: hard + +"@babel/generator@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/generator@npm:7.26.2" + dependencies: + "@babel/parser": "npm:^7.26.2" + "@babel/types": "npm:^7.26.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/167ebce8977142f5012fad6bd91da51ac52bcd752f2261a54b7ab605d928aebe57e21636cdd2a9c7757e552652c68d9fcb5d40b06fcb66e02d9ee7526e118a5c + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: 10c0/e762c2d8f5d423af89bd7ae9abe35bd4836d2eb401af868a63bbb63220c513c783e25ef001019418560b3fdc6d9a6fb67e6c0b650bcdeb3a2ac44b5c3d2bdd94 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": "npm:^7.22.15" + "@babel/types": "npm:^7.23.0" + checksum: 10c0/d771dd1f3222b120518176733c52b7cadac1c256ff49b1889dbbe5e3fed81db855b8cc4e40d949c9d3eae0e795e8229c1c8c24c0e83f27cfa6ee3766696c6428 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: 10c0/60a3077f756a1cd9f14eb89f0037f487d81ede2b7cfe652ea6869cd4ec4c782b0fb1de01b8494b9a2d2050e3d154d7d5ad3be24806790acfb8cbe2073bf1e208 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: 10c0/d83e4b623eaa9622c267d3c83583b72f3aac567dc393dda18e559d79187961cb29ae9c57b2664137fc3d19508370b12ec6a81d28af73a50e0846819cb21c6e44 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: 10c0/f348d5637ad70b6b54b026d6544bd9040f78d24e7ec245a0fc42293968181f6ae9879c22d89744730d246ce8ec53588f716f102addd4df8bbc79b73ea10004ac + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 10c0/dcad63db345fb110e032de46c3688384b0008a42a4845180ce7cd62b1a9c0507a1bed727c4d1060ed1a03ae57b4d918570259f81724aaac1a5b776056f37504e + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.22.20" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + checksum: 10c0/fbff9fcb2f5539289c3c097d130e852afd10d89a3a08ac0b5ebebbc055cc84a4bcc3dcfed463d488cde12dd0902ef1858279e31d7349b2e8cee43913744bda33 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.17.3, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.7.0": + version: 7.23.9 + resolution: "@babel/parser@npm:7.23.9" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/7df97386431366d4810538db4b9ec538f4377096f720c0591c7587a16f6810e62747e9fbbfa1ff99257fd4330035e4fb1b5b77c7bd3b97ce0d2e3780a6618975 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.23.6, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/parser@npm:7.26.2" + dependencies: + "@babel/types": "npm:^7.26.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/751a743087b3a9172a7599f1421830d44c38f065ef781588d2bfb1c98f9b461719a226feb13c868d7a284783eee120c88ea522593118f2668f46ebfb1105c4d7 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.23.2": + version: 7.23.9 + resolution: "@babel/runtime@npm:7.23.9" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/e71205fdd7082b2656512cc98e647d9ea7e222e4fe5c36e9e5adc026446fcc3ba7b3cdff8b0b694a0b78bb85db83e7b1e3d4c56ef90726682b74f13249cf952d + languageName: node + linkType: hard + +"@babel/template@npm:^7.22.15": + version: 7.23.9 + resolution: "@babel/template@npm:7.23.9" + dependencies: + "@babel/code-frame": "npm:^7.23.5" + "@babel/parser": "npm:^7.23.9" + "@babel/types": "npm:^7.23.9" + checksum: 10c0/0e8b60119433787742bc08ae762bbd8d6755611c4cabbcb7627b292ec901a55af65d93d1c88572326069efb64136ef151ec91ffb74b2df7689bbab237030833a + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.7.0": + version: 7.23.9 + resolution: "@babel/traverse@npm:7.23.9" + dependencies: + "@babel/code-frame": "npm:^7.23.5" + "@babel/generator": "npm:^7.23.6" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.23.9" + "@babel/types": "npm:^7.23.9" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/d1615d1d02f04d47111a7ea4446a1a6275668ca39082f31d51f08380de9502e19862be434eaa34b022ce9a17dbb8f9e2b73a746c654d9575f3a680a7ffdf5630 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.6": + version: 7.25.9 + resolution: "@babel/traverse@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/e90be586a714da4adb80e6cb6a3c5cfcaa9b28148abdafb065e34cc109676fc3db22cf98cd2b2fff66ffb9b50c0ef882cab0f466b6844be0f6c637b82719bba1 + languageName: node + linkType: hard + +"@babel/types@npm:^7.17.0, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.7.0": + version: 7.23.9 + resolution: "@babel/types@npm:7.23.9" + dependencies: + "@babel/helper-string-parser": "npm:^7.23.4" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: 10c0/edc7bb180ce7e4d2aea10c6972fb10474341ac39ba8fdc4a27ffb328368dfdfbf40fca18e441bbe7c483774500d5c05e222cec276c242e952853dcaf4eb884f7 + languageName: node + linkType: hard + +"@babel/types@npm:^7.24.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.8.3": + version: 7.26.0 + resolution: "@babel/types@npm:7.26.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/b694f41ad1597127e16024d766c33a641508aad037abd08d0d1f73af753e1119fa03b4a107d04b5f92cc19c095a594660547ae9bead1db2299212d644b0a5cb8 + languageName: node + linkType: hard + +"@colors/colors@npm:1.6.0": + version: 1.6.0 + resolution: "@colors/colors@npm:1.6.0" + checksum: 10c0/9328a0778a5b0db243af54455b79a69e3fb21122d6c15ef9e9fcc94881d8d17352d8b2b2590f9bdd46fac5c2d6c1636dcfc14358a20c70e22daf89e1a759b629 + languageName: node + linkType: hard + +"@confio/ics23@npm:^0.6.8": + version: 0.6.8 + resolution: "@confio/ics23@npm:0.6.8" + dependencies: + "@noble/hashes": "npm:^1.0.0" + protobufjs: "npm:^6.8.8" + checksum: 10c0/2f3f5032cd6a34c9b2fbd64bbf7e1cdec75ca71f348a770f7b5474b5027b12202bfbcd404eca931efddb5901f769af035a87cb8bddbf3f23d7e5d93c9d3d7f6f + languageName: node + linkType: hard + +"@confio/relayer@npm:^0.9.0": + version: 0.9.0 + resolution: "@confio/relayer@npm:0.9.0" + dependencies: + "@cosmjs/cosmwasm-stargate": "npm:^0.30.0" + "@cosmjs/crypto": "npm:^0.30.0" + "@cosmjs/encoding": "npm:^0.30.0" + "@cosmjs/faucet-client": "npm:^0.30.0" + "@cosmjs/math": "npm:^0.30.0" + "@cosmjs/proto-signing": "npm:^0.30.0" + "@cosmjs/stargate": "npm:^0.30.0" + "@cosmjs/stream": "npm:^0.30.0" + "@cosmjs/tendermint-rpc": "npm:^0.30.0" + "@cosmjs/utils": "npm:^0.30.0" + ajv: "npm:7.1.1" + axios: "npm:0.21.4" + commander: "npm:7.1.0" + cosmjs-types: "npm:^0.7.1" + fast-safe-stringify: "npm:2.0.4" + js-yaml: "npm:4.0.0" + lodash: "npm:4.17.21" + prom-client: "npm:13.1.0" + protobufjs: "npm:^6.10.3" + table: "npm:^6.7.1" + triple-beam: "npm:1.3.0" + winston: "npm:3.3.3" + bin: + ibc-relayer: build/binary/ibc-relayer/index.js + ibc-setup: build/binary/ibc-setup/index.js + checksum: 10c0/1f2992b75d0f09f59fc9ca648e991f8597131ad8a0f02febda49b63bea624f1c4a8ca65b750bf45fbb61d7bbe08d5ab0ca5b42da3c7ab13eaf4a9173532117d6 + languageName: node + linkType: hard + +"@cosmjs/amino@npm:^0.30.1": + version: 0.30.1 + resolution: "@cosmjs/amino@npm:0.30.1" + dependencies: + "@cosmjs/crypto": "npm:^0.30.1" + "@cosmjs/encoding": "npm:^0.30.1" + "@cosmjs/math": "npm:^0.30.1" + "@cosmjs/utils": "npm:^0.30.1" + checksum: 10c0/f9f5c773484191a86b98a50e40fbf39adff0cad9936f5d0a30676682b7f17f663eef8368f9fe30da9454fe40afcd8bec4b661801d5f143b2eb7192f953c6f349 + languageName: node + linkType: hard + +"@cosmjs/amino@npm:^0.31.3": + version: 0.31.3 + resolution: "@cosmjs/amino@npm:0.31.3" + dependencies: + "@cosmjs/crypto": "npm:^0.31.3" + "@cosmjs/encoding": "npm:^0.31.3" + "@cosmjs/math": "npm:^0.31.3" + "@cosmjs/utils": "npm:^0.31.3" + checksum: 10c0/2f5f866df043bef072ef8802844beacd282027dcc32f69428fe98e256d5fec0dd4a45a4c7d6c45c8a7d7f4387893ef02c8b471a32d6450215f56157d6eaa467e + languageName: node + linkType: hard + +"@cosmjs/amino@npm:^0.32.2": + version: 0.32.2 + resolution: "@cosmjs/amino@npm:0.32.2" + dependencies: + "@cosmjs/crypto": "npm:^0.32.2" + "@cosmjs/encoding": "npm:^0.32.2" + "@cosmjs/math": "npm:^0.32.2" + "@cosmjs/utils": "npm:^0.32.2" + checksum: 10c0/306ec4a08713d0173af134e45d26647f0d456c0cfacf55779c159a7556d9614e763a70518a7b3aaa3c18e9f71ff33f30e5badaed1c50aa26dd37313f68267083 + languageName: node + linkType: hard + +"@cosmjs/cosmwasm-stargate@npm:^0.30.0": + version: 0.30.1 + resolution: "@cosmjs/cosmwasm-stargate@npm:0.30.1" + dependencies: + "@cosmjs/amino": "npm:^0.30.1" + "@cosmjs/crypto": "npm:^0.30.1" + "@cosmjs/encoding": "npm:^0.30.1" + "@cosmjs/math": "npm:^0.30.1" + "@cosmjs/proto-signing": "npm:^0.30.1" + "@cosmjs/stargate": "npm:^0.30.1" + "@cosmjs/tendermint-rpc": "npm:^0.30.1" + "@cosmjs/utils": "npm:^0.30.1" + cosmjs-types: "npm:^0.7.1" + long: "npm:^4.0.0" + pako: "npm:^2.0.2" + checksum: 10c0/33f65975c402deba462704b99410ffdf0dc5e5f10548b0d37f39cb327687e2e8351ec77ae7a486e64975ac94944aa319f4d42483bb6ede1b34d6861609cdda33 + languageName: node + linkType: hard + +"@cosmjs/crypto@npm:^0.32.1": + version: 0.32.2 + resolution: "@cosmjs/crypto@npm:0.32.2" + dependencies: + "@cosmjs/encoding": "npm:^0.32.2" + "@cosmjs/math": "npm:^0.32.2" + "@cosmjs/utils": "npm:^0.32.2" + "@noble/hashes": "npm:^1" + bn.js: "npm:^5.2.0" + elliptic: "npm:^6.5.4" + libsodium-wrappers-sumo: "npm:^0.7.11" + checksum: 10c0/cd89f8f450daf6eca1d625cb226da179c82fb97d108f1a3ab36c132f9c47fb4930c276f827d82d91b9c818360a4141cbd24e61a4026bb24b77c883b3fb825351 + languageName: node + linkType: hard + +"@cosmjs/encoding@npm:^0.32.1": + version: 0.32.2 + resolution: "@cosmjs/encoding@npm:0.32.2" + dependencies: + base64-js: "npm:^1.3.0" + bech32: "npm:^1.1.4" + readonly-date: "npm:^1.0.0" + checksum: 10c0/fe179c7c60c122da0bf7b8b0a76b729dc6a15280d9c32addc7a9efac0b86bbae13e2e51af2d968f72b1235d6f3e50da1ae06e77f96d7b2655be67a6ab23a934c + languageName: node + linkType: hard + +"@cosmjs/faucet-client@npm:^0.30.0": + version: 0.30.1 + resolution: "@cosmjs/faucet-client@npm:0.30.1" + dependencies: + axios: "npm:^0.21.2" + checksum: 10c0/6d6e81c34eefdd5b4fce0b419cb7c64057f3220b37c12226a17099c8398352272e0f235ff10f74a3edf9619d8ad7b703777613564624451ce68f0b679b2ac0be + languageName: node + linkType: hard + +"@cosmjs/json-rpc@npm:^0.30.1": + version: 0.30.1 + resolution: "@cosmjs/json-rpc@npm:0.30.1" + dependencies: + "@cosmjs/stream": "npm:^0.30.1" + xstream: "npm:^11.14.0" + checksum: 10c0/13711cb8477c9c5e9067b58fbd2f94a223127f50b549eb26be47db17bf4451a47fa4c5b428a9f1a44c0b635423f4edd75d6585548dc8b9e1b33c6d775f508f2f + languageName: node + linkType: hard + +"@cosmjs/json-rpc@npm:^0.31.3": + version: 0.31.3 + resolution: "@cosmjs/json-rpc@npm:0.31.3" + dependencies: + "@cosmjs/stream": "npm:^0.31.3" + xstream: "npm:^11.14.0" + checksum: 10c0/8cc8fa9490e512a2865e888b162e2cc38477a6a5b6261fce885579712c880087c8bb2733717eb5fe03c131f31064e1f9060f87ae2a4d1d01d6c465761ab1a32d + languageName: node + linkType: hard + +"@cosmjs/math@npm:^0.32.1": + version: 0.32.2 + resolution: "@cosmjs/math@npm:0.32.2" + dependencies: + bn.js: "npm:^5.2.0" + checksum: 10c0/be6590c61b1d8488c9405666b365892d8ad9a6c7d0e67fced18386c6fe3e0dd180db4b55e3c7009f4659123a531459916357218f4f153569a9a740d8fd749064 + languageName: node + linkType: hard + +"@cosmjs/proto-signing@npm:^0.32.1": + version: 0.32.2 + resolution: "@cosmjs/proto-signing@npm:0.32.2" + dependencies: + "@cosmjs/amino": "npm:^0.32.2" + "@cosmjs/crypto": "npm:^0.32.2" + "@cosmjs/encoding": "npm:^0.32.2" + "@cosmjs/math": "npm:^0.32.2" + "@cosmjs/utils": "npm:^0.32.2" + cosmjs-types: "npm:^0.9.0" + checksum: 10c0/351ae9d4e91b04926429dafd9342793958d2bfa2d84804a9195a1ba60ddb33491f66baa4dd17a4418bb53a7fb3a1ae6d4f4bb6f3a60b5f23bdcf62e70e987de2 + languageName: node + linkType: hard + +"@cosmjs/socket@npm:^0.30.1": + version: 0.30.1 + resolution: "@cosmjs/socket@npm:0.30.1" + dependencies: + "@cosmjs/stream": "npm:^0.30.1" + isomorphic-ws: "npm:^4.0.1" + ws: "npm:^7" + xstream: "npm:^11.14.0" + checksum: 10c0/d49c85b15deaf27b82e54ca6c6934b30611a784d379b50de2120284a2512210af91f6981579e491d0d5a14387a736eaf9a3e527f3b82f5aba6f55b141bdb5295 + languageName: node + linkType: hard + +"@cosmjs/socket@npm:^0.31.3": + version: 0.31.3 + resolution: "@cosmjs/socket@npm:0.31.3" + dependencies: + "@cosmjs/stream": "npm:^0.31.3" + isomorphic-ws: "npm:^4.0.1" + ws: "npm:^7" + xstream: "npm:^11.14.0" + checksum: 10c0/35ce93726f1c5c7d4cdf49c68d754b5587ac94fa65fd66f3db625c4794413359e225ddcaa55ee0bb17806a0b9cc13f884a7ec780503267addc6d03aacee1770c + languageName: node + linkType: hard + +"@cosmjs/stargate@npm:^0.31.1": + version: 0.31.3 + resolution: "@cosmjs/stargate@npm:0.31.3" + dependencies: + "@confio/ics23": "npm:^0.6.8" + "@cosmjs/amino": "npm:^0.31.3" + "@cosmjs/encoding": "npm:^0.31.3" + "@cosmjs/math": "npm:^0.31.3" + "@cosmjs/proto-signing": "npm:^0.31.3" + "@cosmjs/stream": "npm:^0.31.3" + "@cosmjs/tendermint-rpc": "npm:^0.31.3" + "@cosmjs/utils": "npm:^0.31.3" + cosmjs-types: "npm:^0.8.0" + long: "npm:^4.0.0" + protobufjs: "npm:~6.11.3" + xstream: "npm:^11.14.0" + checksum: 10c0/85ce69ac6314f5194206c01f6ef346dd3e1fbfbe4489adf5926badfabcc61913ef97e5f6d155bd2370e4e5cdedfcfb951248321b37fdfaf8e866fa0711c5cfbd + languageName: node + linkType: hard + +"@cosmjs/stream@npm:^0.30.0, @cosmjs/stream@npm:^0.30.1": + version: 0.30.1 + resolution: "@cosmjs/stream@npm:0.30.1" + dependencies: + xstream: "npm:^11.14.0" + checksum: 10c0/6fd2dbb916cf2fd8278ad864052dadd09c8a4d81b948d91bfe5fda3da294ac3346afa0ebed462a7b342394527063fca0814d40bf8b413906e77d7ed448ef0e41 + languageName: node + linkType: hard + +"@cosmjs/stream@npm:^0.31.3": + version: 0.31.3 + resolution: "@cosmjs/stream@npm:0.31.3" + dependencies: + xstream: "npm:^11.14.0" + checksum: 10c0/e0279b925c4f02535ba9b1f6f9563a1db4fb53ed1396e4e3958fcad887e047a78b431a227dd7c159aadb6e0e054db9dfb34b7a9128f2082ff3114bcfd74516c3 + languageName: node + linkType: hard + +"@cosmjs/tendermint-rpc@npm:^0.30.0, @cosmjs/tendermint-rpc@npm:^0.30.1": + version: 0.30.1 + resolution: "@cosmjs/tendermint-rpc@npm:0.30.1" + dependencies: + "@cosmjs/crypto": "npm:^0.30.1" + "@cosmjs/encoding": "npm:^0.30.1" + "@cosmjs/json-rpc": "npm:^0.30.1" + "@cosmjs/math": "npm:^0.30.1" + "@cosmjs/socket": "npm:^0.30.1" + "@cosmjs/stream": "npm:^0.30.1" + "@cosmjs/utils": "npm:^0.30.1" + axios: "npm:^0.21.2" + readonly-date: "npm:^1.0.0" + xstream: "npm:^11.14.0" + checksum: 10c0/2c2f67a2b77c1168cc62e30b4ce773a24fb403cd2e4b1e3c524cb1b1b9cf646bdff8e21a22f41b8b41abe39af57bec8046abb896d5f24bd7ac003f37136ab2e9 + languageName: node + linkType: hard + +"@cosmjs/tendermint-rpc@npm:^0.31.3": + version: 0.31.3 + resolution: "@cosmjs/tendermint-rpc@npm:0.31.3" + dependencies: + "@cosmjs/crypto": "npm:^0.31.3" + "@cosmjs/encoding": "npm:^0.31.3" + "@cosmjs/json-rpc": "npm:^0.31.3" + "@cosmjs/math": "npm:^0.31.3" + "@cosmjs/socket": "npm:^0.31.3" + "@cosmjs/stream": "npm:^0.31.3" + "@cosmjs/utils": "npm:^0.31.3" + axios: "npm:^0.21.2" + readonly-date: "npm:^1.0.0" + xstream: "npm:^11.14.0" + checksum: 10c0/1d8d8a78cc1dc54884c0916e709c98d533215f2235ce48f2079cbd8b3a9edf7aa14f216b815d727cacabfead54c0b15ca622fd43243260d8d311bc408edd0f11 + languageName: node + linkType: hard + +"@cosmjs/utils@npm:^0.30.0, @cosmjs/utils@npm:^0.30.1": + version: 0.30.1 + resolution: "@cosmjs/utils@npm:0.30.1" + checksum: 10c0/c257c2922c9f990d9c894166507e0ad49b8725604f0fcc3fa6cdb21fdbec5c938126ee1d41cb45d1c76c96b135c6c31809a857de949c4207303d67f134074a99 + languageName: node + linkType: hard + +"@cosmjs/utils@npm:^0.31.3": + version: 0.31.3 + resolution: "@cosmjs/utils@npm:0.31.3" + checksum: 10c0/26266e1206ed8c7c4e744db1e97fc7a341ffee383ca9f43e6c9e8ff596039a90068c39aadc4f6524b6f2b5b6d581318657f3eb272f98b9e430f2d0df79382b6a + languageName: node + linkType: hard + +"@cosmjs/utils@npm:^0.32.2": + version: 0.32.2 + resolution: "@cosmjs/utils@npm:0.32.2" + checksum: 10c0/53789110c65106ee2d200f59f37d7732e7027b8bfc042072e3ca0336e2cf9b288cbe4f3e4945515a3d0f6907a7586dc83e96b49ddfc8a10c26377e52b7c609e6 + languageName: node + linkType: hard + +"@dabh/diagnostics@npm:^2.0.2": + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" + dependencies: + colorspace: "npm:1.1.x" + enabled: "npm:2.0.x" + kuler: "npm:^2.0.0" + checksum: 10c0/a5133df8492802465ed01f2f0a5784585241a1030c362d54a602ed1839816d6c93d71dde05cf2ddb4fd0796238c19774406bd62fa2564b637907b495f52425fe + languageName: node + linkType: hard + +"@endo/base64@npm:0.2.31": + version: 0.2.31 + resolution: "@endo/base64@npm:0.2.31" + checksum: 10c0/6fb87ef466ed97e7c676e6e52203434a2881f43bbd95609e44385e4002fcc0869ad6f5c673423a4c060298b2e90c26cb671f03463f287a347b37cdb079caed32 + languageName: node + linkType: hard + +"@endo/base64@npm:^0.2.31, @endo/base64@npm:^0.2.32, @endo/base64@npm:^0.2.35": + version: 0.2.35 + resolution: "@endo/base64@npm:0.2.35" + checksum: 10c0/5935cd609cbe3da91e9bdbc1c3a2be0460c58302d0b92ae63054e537aa9e2e5648a238810ec548d7367166c72094c38e2dbf0b16a37c6987c8d7353d1b0123a1 + languageName: node + linkType: hard + +"@endo/base64@npm:^1.0.8, @endo/base64@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/base64@npm:1.0.9" + checksum: 10c0/63e487cf59b50a080fab389a8ab24d66264910ecf375dc19677c2ee7421d92a4be9c85e435b216b4adc9983384073a7eb753223f85ba77aec8d9fd3e0c1fe090 + languageName: node + linkType: hard + +"@endo/bundle-source@npm:^3.4.2": + version: 3.5.0 + resolution: "@endo/bundle-source@npm:3.5.0" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/evasive-transform": "npm:^1.3.3" + "@endo/init": "npm:^1.1.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/where": "npm:^1.0.9" + "@rollup/plugin-commonjs": "npm:^19.0.0" + "@rollup/plugin-json": "npm:^6.1.0" + "@rollup/plugin-node-resolve": "npm:^13.0.0" + acorn: "npm:^8.2.4" + rollup: "npm:^2.79.1" + ts-blank-space: "npm:^0.4.1" + bin: + bundle-source: ./src/tool.js + checksum: 10c0/7f97194c97eb28abbde6655f7de4410d5aae5d6a2a3d712e1418b9b4fd20823333b7fe8956401c2f201280340731e51e28d9c4fbe3b5a787b0abd00e3ac13b52 + languageName: node + linkType: hard + +"@endo/captp@npm:3.1.1": + version: 3.1.1 + resolution: "@endo/captp@npm:3.1.1" + dependencies: + "@endo/eventual-send": "npm:^0.17.2" + "@endo/marshal": "npm:^0.8.5" + "@endo/nat": "npm:^4.1.27" + "@endo/promise-kit": "npm:^0.2.56" + checksum: 10c0/45cbcd647843c4a22bc8ca2718a493afaae805c68cbbe959cb4d6828afd53c5714d6e13c0a7f327561f5c5e9fc3ee2fab0a228e6b4e4f74f1fb163af8a6adbdc + languageName: node + linkType: hard + +"@endo/captp@npm:^3.1.1": + version: 3.1.5 + resolution: "@endo/captp@npm:3.1.5" + dependencies: + "@endo/eventual-send": "npm:^0.17.6" + "@endo/marshal": "npm:^0.8.9" + "@endo/nat": "npm:^4.1.31" + "@endo/promise-kit": "npm:^0.2.60" + checksum: 10c0/bbae2b1ef1d509bb91373c0a05426b1b93a56bcd7371532025f64e524ae2878cf48bd89f442c4524a61caea06f8ee91956df3ba29a357d4bdb2ec352821e74a7 + languageName: node + linkType: hard + +"@endo/captp@npm:^4.4.2": + version: 4.4.3 + resolution: "@endo/captp@npm:4.4.3" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/0647dd6acc39c7a54a42d9f168861d11dc28248321be72529dd8574b52989957be8f7a5ec9985fc76a24b37cd6b6d190e5bfbbc1481594e367c8517c31fce0e2 + languageName: node + linkType: hard + +"@endo/check-bundle@npm:0.2.18": + version: 0.2.18 + resolution: "@endo/check-bundle@npm:0.2.18" + dependencies: + "@endo/base64": "npm:^0.2.31" + "@endo/compartment-mapper": "npm:^0.8.4" + checksum: 10c0/bf5c1a2974a790da3db158440686a6eec7cb67025082cd1382baf927f3744fd788be6c93aceed6dbe8cae1ff82b5412c3a8cbe331b488d552e5214888c128f98 + languageName: node + linkType: hard + +"@endo/check-bundle@npm:^0.2.18": + version: 0.2.22 + resolution: "@endo/check-bundle@npm:0.2.22" + dependencies: + "@endo/base64": "npm:^0.2.35" + "@endo/compartment-mapper": "npm:^0.9.2" + checksum: 10c0/aae5081aff9e75391100ec6e436a5c0e1811e6406019b835491a4d9a4b0a0fa4b94dab8c92450ea98e2692e6563f4b0ccd62c2785cfeeead7e4b19859c95ed3b + languageName: node + linkType: hard + +"@endo/check-bundle@npm:^1.0.11": + version: 1.0.12 + resolution: "@endo/check-bundle@npm:1.0.12" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + checksum: 10c0/73e146d9d4d5ee23936b0df368e51ebb3658eecc5efe308a1894f70339502e6de8fa065185e8518d1445bf8fbc4c5fae54fc7dab8794f02397f6694a7ab9af9c + languageName: node + linkType: hard + +"@endo/cjs-module-analyzer@npm:^0.2.31, @endo/cjs-module-analyzer@npm:^0.2.32, @endo/cjs-module-analyzer@npm:^0.2.35": + version: 0.2.35 + resolution: "@endo/cjs-module-analyzer@npm:0.2.35" + checksum: 10c0/26d571803afe889ba327979c9208a037d8cbbb6e689cf20e10bd8d0658936a35b37d61b86180dbed6ac49ac284307177b16eeb10d6afe61c7674d4c6507913ab + languageName: node + linkType: hard + +"@endo/cjs-module-analyzer@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/cjs-module-analyzer@npm:1.0.9" + checksum: 10c0/cb8c56d108b175f2f211c8292bac6cda35c44b9c16fb2763ab9a32b545895e1721633938b440bfe7a06f69e1f168e9b248ef103631a1d4c63fda8cbe580ca185 + languageName: node + linkType: hard + +"@endo/common@npm:^1.2.7, @endo/common@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/common@npm:1.2.8" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/c9465721095d9f06278b6550909a02c330c7a69223f11aff29759067586d41b86054127639fa2c2c0345d0d0aa43518e5b72d5c547b67bfe8e802cd21756d87b + languageName: node + linkType: hard + +"@endo/compartment-mapper@npm:0.8.4": + version: 0.8.4 + resolution: "@endo/compartment-mapper@npm:0.8.4" + dependencies: + "@endo/cjs-module-analyzer": "npm:^0.2.31" + "@endo/static-module-record": "npm:^0.7.19" + "@endo/zip": "npm:^0.2.31" + ses: "npm:^0.18.4" + checksum: 10c0/08c1959c927d04983a4f150a9eb37175dcbe33a1f97b916ce7ebfe0df71f72578d9d0916555915017f647e51ab11c1ec13cfcbfa9c09f3f669b6642d43f2745d + languageName: node + linkType: hard + +"@endo/compartment-mapper@npm:^0.8.4, @endo/compartment-mapper@npm:^0.8.5": + version: 0.8.5 + resolution: "@endo/compartment-mapper@npm:0.8.5" + dependencies: + "@endo/cjs-module-analyzer": "npm:^0.2.32" + "@endo/static-module-record": "npm:^0.7.20" + "@endo/zip": "npm:^0.2.32" + ses: "npm:^0.18.5" + checksum: 10c0/81e8c1c8052319ddd2d6328bc7f120e41593e01961a318192b71f12990a4fa5a014f56d5ef146f390c09a615118b61f4daae790972aa47530598b74189ead541 + languageName: node + linkType: hard + +"@endo/compartment-mapper@npm:^0.9.2": + version: 0.9.2 + resolution: "@endo/compartment-mapper@npm:0.9.2" + dependencies: + "@endo/cjs-module-analyzer": "npm:^0.2.35" + "@endo/static-module-record": "npm:^0.8.2" + "@endo/zip": "npm:^0.2.35" + ses: "npm:^0.18.8" + checksum: 10c0/ee42a78293f04924f3f65b123822e7f684c4337c3b3921cb78385c37ca4011ca89deca21488c7a44a9d472b196036ba9549b3e727b2934b67a9cf8876f1a8b38 + languageName: node + linkType: hard + +"@endo/compartment-mapper@npm:^1.3.1, @endo/compartment-mapper@npm:^1.4.0": + version: 1.4.0 + resolution: "@endo/compartment-mapper@npm:1.4.0" + dependencies: + "@endo/cjs-module-analyzer": "npm:^1.0.9" + "@endo/module-source": "npm:^1.1.2" + "@endo/trampoline": "npm:^1.0.3" + "@endo/zip": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/2c4999962016f57c0f3a40ce1445a064b826eb101a972d26ba56d9dba6d3d8f66744912e3f7e24754018bd2c633663a00ea5ab0d7658c4907c9372ddd3e56464 + languageName: node + linkType: hard + +"@endo/env-options@npm:^0.1.4": + version: 0.1.4 + resolution: "@endo/env-options@npm:0.1.4" + checksum: 10c0/5bf49d362849090bff328b15f906adb5b8b6220815e8955e45f81e7ff9a8ab17e509fff8bf30f4c619772f4f1a8cba8f1ca90faec724b53b5b3f1c89050c6b44 + languageName: node + linkType: hard + +"@endo/env-options@npm:^1.1.7, @endo/env-options@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/env-options@npm:1.1.8" + checksum: 10c0/2f519f48a5b966dbd9e66134d4abc89ff02b9791d21146b49031ceb694584f3f41c6119125b6bb4eb0d347f5bcd846473b5f3c4ae6bae3dac19402fcaf522520 + languageName: node + linkType: hard + +"@endo/errors@npm:^1.2.7, @endo/errors@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/errors@npm:1.2.8" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/3f33fc7119ab840ad0f5bdfb70e73cc99630f09593c31928e30de4d9c8e898c85397c5170964d54c819a757a74d3b005f6275480ff8d0f1aa2aa8ef872852e97 + languageName: node + linkType: hard + +"@endo/eslint-plugin@npm:^0.4.4": + version: 0.4.5 + resolution: "@endo/eslint-plugin@npm:0.4.5" + dependencies: + "@typescript-eslint/utils": "npm:~5.59.9" + requireindex: "npm:~1.1.0" + tsutils: "npm:~3.21.0" + typescript: "npm:~5.1.3" + checksum: 10c0/42c525b2f34bd47d7f0538c26a23412e87a5a58b591a962fee7c294390f2ff92e2c5da5ea843a3fef482a3aed17fb124687eec2b9aff8154642dbf16f66c619f + languageName: node + linkType: hard + +"@endo/evasive-transform@npm:^1.3.3": + version: 1.3.3 + resolution: "@endo/evasive-transform@npm:1.3.3" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + source-map-js: "npm:^1.2.0" + checksum: 10c0/34fae4789ab3142ab73a5c94a46954908737bbc72f1e302c338941ca2556ab2127505ecee57a1c0d11e0b9c7070b4a579ce4e7e60585990161cec64ce0955211 + languageName: node + linkType: hard + +"@endo/eventual-send@npm:^1.2.7": + version: 1.2.8 + resolution: "@endo/eventual-send@npm:1.2.8" + dependencies: + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/d7c16c935441b67d029fcb6785f425a1194fb7f936e4b20dde21eb393266cb7366edf7a95d3fdfa96cd4a3246a3659a06d0dbb3c1217045e1718e1cf34c7a3bd + languageName: node + linkType: hard + +"@endo/exo@npm:0.2.2": + version: 0.2.2 + resolution: "@endo/exo@npm:0.2.2" + dependencies: + "@endo/far": "npm:^0.2.18" + "@endo/patterns": "npm:^0.2.2" + checksum: 10c0/e54512d524b7bfc4c2bc88ec6ba64e5ddcd92a6cfc424230dbc936aed670a8932587301227918eee8315dcefe56e817faa9ab283bda6e66b3237fdeb512a9633 + languageName: node + linkType: hard + +"@endo/exo@npm:^0.2.2": + version: 0.2.6 + resolution: "@endo/exo@npm:0.2.6" + dependencies: + "@endo/env-options": "npm:^0.1.4" + "@endo/far": "npm:^0.2.22" + "@endo/pass-style": "npm:^0.1.7" + "@endo/patterns": "npm:^0.2.6" + checksum: 10c0/aad124b36e323eeb969df9572f9243ef64e28ca99bb37ef2700c050be3fc78140b0192b32cbeb6e1b52f4c04237a9bfeed6deb400ba2ade6c7ad01071fc1fed9 + languageName: node + linkType: hard + +"@endo/exo@npm:^1.5.6": + version: 1.5.7 + resolution: "@endo/exo@npm:1.5.7" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/0193de0606a7f07f207f3dd8bb71ec6be0acfb0ff5ef570f03cbbcaed888db68e451082c34764de8ee301f8d2d175e6c5a5405e76367c27151d644536bdf57a4 + languageName: node + linkType: hard + +"@endo/far@npm:^1.1.5": + version: 1.1.9 + resolution: "@endo/far@npm:1.1.9" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/pass-style": "npm:^1.4.7" + checksum: 10c0/e0d95743c25183b961aa1f11dd81c067739fd2fb3deeab58520e949961eacba9ed109bb01b9ed820d596e8a043b6721d650d9624abf0263296cca647e7286a2e + languageName: node + linkType: hard + +"@endo/import-bundle@npm:0.3.4": + version: 0.3.4 + resolution: "@endo/import-bundle@npm:0.3.4" + dependencies: + "@endo/base64": "npm:^0.2.31" + "@endo/compartment-mapper": "npm:^0.8.4" + checksum: 10c0/3d5b235867c210deb90b5981a309142010e2e63d3ee1492855676e182529e091fbf27282dff5756fefcdbc9ae86f42746701b66398754d094e486e06afa940fc + languageName: node + linkType: hard + +"@endo/import-bundle@npm:^0.3.4": + version: 0.3.5 + resolution: "@endo/import-bundle@npm:0.3.5" + dependencies: + "@endo/base64": "npm:^0.2.32" + "@endo/compartment-mapper": "npm:^0.8.5" + checksum: 10c0/a86572e8fea258bb4c047c6ddc5e033f524f4885b304188405c5bf5f1234be128d3e97e62dfc45b7dfe7760194c8cfc67686d83004d9007f8bc68fbae651aded + languageName: node + linkType: hard + +"@endo/import-bundle@npm:^1.3.1": + version: 1.3.2 + resolution: "@endo/import-bundle@npm:1.3.2" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/where": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/cc38bb7858c4b3a3d1cfbf70b0af3b05b527019452eb922313b4adf87e5590f5cacf4ff5dbd7a44c172d3c220de41edc3fa8895551f76071c85f1450ff94b09a + languageName: node + linkType: hard + +"@endo/init@npm:^1.1.4": + version: 1.1.7 + resolution: "@endo/init@npm:1.1.7" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/lockdown": "npm:^1.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/6cfcc244f02da9883f65a8f34da9483a628d5350192983c53d5116b12403dc5693145c6349b6c3ca381b6b8d9590cee16f90440dc0e2da5f525e13079d6c9a2f + languageName: node + linkType: hard + +"@endo/lockdown@npm:0.1.28": + version: 0.1.28 + resolution: "@endo/lockdown@npm:0.1.28" + dependencies: + ses: "npm:^0.18.4" + checksum: 10c0/99ab7b0929159d1f4da7fef613e5c5b2fc468cd099040521dc09c2ee6843ade599b4915dfe93ee95048e7f75fcbf3557459aa431349765ce10edd152c580cc1b + languageName: node + linkType: hard + +"@endo/lockdown@npm:^1.0.13": + version: 1.0.13 + resolution: "@endo/lockdown@npm:1.0.13" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/9df04cc477595b368088a1d445f2241d8a152cb4dcf6a79d39d4804594dd8ff472380ab2bdf262adeb5b4b7cfc73effb6cc716c5a3aeca282801d57fe8a018a0 + languageName: node + linkType: hard + +"@endo/marshal@npm:^1.6.1": + version: 1.6.2 + resolution: "@endo/marshal@npm:1.6.2" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/bdb634a77c2147c1359792531822aabe642a5e4d39f496dd57bb97367617a2f2d72edaaa50c51ed6a2ec1f2c08deab6a571c3dd8ffa260d441d25f53606902b1 + languageName: node + linkType: hard + +"@endo/module-source@npm:^1.1.2": + version: 1.1.2 + resolution: "@endo/module-source@npm:1.1.2" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + "@babel/types": "npm:^7.24.0" + ses: "npm:^1.10.0" + checksum: 10c0/3d64ff5430f288531a00e124ae0620e137dab0fdaba00f2d41066b8307eb2da30e3987d84fe450d55d844e0f96feafa36a825cecc615c05d96224a209832c95c + languageName: node + linkType: hard + +"@endo/nat@npm:4.1.27": + version: 4.1.27 + resolution: "@endo/nat@npm:4.1.27" + checksum: 10c0/41407ce76ca14f1cd6919ca8017e587f0f15abf8afc4367213d77200e776397ac3a796039be2d45a70b9c75225fccf83f10bfe0f66aa01bf04705b71b3d325d9 + languageName: node + linkType: hard + +"@endo/nat@npm:^4.1.27, @endo/nat@npm:^4.1.31": + version: 4.1.31 + resolution: "@endo/nat@npm:4.1.31" + checksum: 10c0/d77f2663b6f22cf4912e71d9a7b9e3e8268519a46d95675197bb2eaf788cccfefda909e632db446d161701a77595d7bb481afc0b1fe026167cbbf245ed3ccdb8 + languageName: node + linkType: hard + +"@endo/nat@npm:^5.0.12, @endo/nat@npm:^5.0.13": + version: 5.0.13 + resolution: "@endo/nat@npm:5.0.13" + checksum: 10c0/78578de4567c9bc4c6f50638c688886c07c38177a8d44192230d344221da06ccffc6d9ef8d423e27198d864ed7c57ef5ced9b1d05922eaa4e40bf82856b1aa11 + languageName: node + linkType: hard + +"@endo/netstring@npm:0.3.26": + version: 0.3.26 + resolution: "@endo/netstring@npm:0.3.26" + dependencies: + "@endo/init": "npm:^0.5.56" + "@endo/stream": "npm:^0.3.25" + ses: "npm:^0.18.4" + checksum: 10c0/5581de2cead9b37bf77688a4a2021db1cf5ce1a9d6334dc77eb3b15a100de2ae4ce73adde554813b38907eb5ec64157c3bc9e670c60fad3e316f53e959ce4316 + languageName: node + linkType: hard + +"@endo/netstring@npm:^0.3.26": + version: 0.3.30 + resolution: "@endo/netstring@npm:0.3.30" + dependencies: + "@endo/init": "npm:^0.5.60" + "@endo/stream": "npm:^0.3.29" + ses: "npm:^0.18.8" + checksum: 10c0/9a5910962884f4e5d7cba57cd0e5625241e89af3505d8698b5066c396f2fe16083a4cfc1ac99c950148db36d56a73dac62a086c25538e6ea44288ffc25e4ccff + languageName: node + linkType: hard + +"@endo/pass-style@npm:0.1.3": + version: 0.1.3 + resolution: "@endo/pass-style@npm:0.1.3" + dependencies: + "@endo/promise-kit": "npm:^0.2.56" + "@fast-check/ava": "npm:^1.1.3" + checksum: 10c0/9d2667694a66d87f5ef45449fe426c94aa0a862a298c5f2694ec71bf3f500cae3499e96011e26d38ef02bebdc7f24b16809892694437e9dee6d40066d6507fcd + languageName: node + linkType: hard + +"@endo/pass-style@npm:^0.1.3, @endo/pass-style@npm:^0.1.7": + version: 0.1.7 + resolution: "@endo/pass-style@npm:0.1.7" + dependencies: + "@endo/promise-kit": "npm:^0.2.60" + "@fast-check/ava": "npm:^1.1.5" + checksum: 10c0/0fc8ca918e4b2888619fa10765b9a414f1ab921b590f257421f4af4a523b80b2afc736280691ed99e8f8807ead3afc478c1a855772c52a4c8fbe43733f3fe656 + languageName: node + linkType: hard + +"@endo/pass-style@npm:^1.4.6, @endo/pass-style@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/pass-style@npm:1.4.7" + dependencies: + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + "@fast-check/ava": "npm:^1.1.5" + checksum: 10c0/ee30e011fb08c292718a315f2ebd5ee2da6d918bf2cdaf2b269e123207c642fa1525493c41180db8c941e1a1959369730114b116656c99e8bb107ca5917f3f4e + languageName: node + linkType: hard + +"@endo/patterns@npm:^1.4.6": + version: 1.4.7 + resolution: "@endo/patterns@npm:1.4.7" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/358720438a019847406dfad9f23fc9b565c955ffd86d75693cea994c492dd46efaf189502f04b04f8870e6d50ffcb44ffa1e1dd3a0d6b2dfbbe57edeb994b83b + languageName: node + linkType: hard + +"@endo/promise-kit@npm:0.2.56": + version: 0.2.56 + resolution: "@endo/promise-kit@npm:0.2.56" + dependencies: + ses: "npm:^0.18.4" + checksum: 10c0/ceb59dae724681f0f88a863efbabbd25a142b536664c2c6cbdd8532bc45317f99bc70d837c77d8c54d39d7baeac8fd70fa9787304fd169d5f2a1f014f46b9498 + languageName: node + linkType: hard + +"@endo/promise-kit@npm:^0.2.56, @endo/promise-kit@npm:^0.2.59, @endo/promise-kit@npm:^0.2.60": + version: 0.2.60 + resolution: "@endo/promise-kit@npm:0.2.60" + dependencies: + ses: "npm:^0.18.8" + checksum: 10c0/45fa191d0211cf9e99a6b300c373849c7662e8832e20fbcfa4a8f4938d9c9509f22c3a76377629be70447adc1d2e4e99a56a99395af19ba2a0c1010bfe1da4dd + languageName: node + linkType: hard + +"@endo/promise-kit@npm:^1.1.7, @endo/promise-kit@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/promise-kit@npm:1.1.8" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/3a51755822bd4112474bec584005b81f9ffe6a6b590faa16cff7a4994010d001d6d190f58a1e890d85b0feb0eb052d79ed2c5ed88977afb0e47ca53b6b199196 + languageName: node + linkType: hard + +"@endo/ses-ava@npm:^1.2.7": + version: 1.2.8 + resolution: "@endo/ses-ava@npm:1.2.8" + dependencies: + "@endo/env-options": "npm:^1.1.8" + "@endo/init": "npm:^1.1.7" + ses: "npm:^1.10.0" + peerDependencies: + ava: ^5.3.0 || ^6.1.2 + checksum: 10c0/c1ef65d182f3bfa1ec0d5d0434da9d28bb0925f485629fcd5c42dc89db99e65a5b44e352e1fd2a577778b2905d6f36b009e4f2953aa0257ec1b049019e37b2cf + languageName: node + linkType: hard + +"@endo/static-module-record@npm:^0.7.19, @endo/static-module-record@npm:^0.7.20": + version: 0.7.20 + resolution: "@endo/static-module-record@npm:0.7.20" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.17.3" + "@babel/traverse": "npm:^7.17.3" + "@babel/types": "npm:^7.17.0" + ses: "npm:^0.18.5" + checksum: 10c0/420ca948cd7b764f0a8dca8224e9e73536769e801c2aa7f6070dc22c41080a95026675a37d306b6d143b735bb2bc2013944c9e88448457df5e6f01908bdf7b25 + languageName: node + linkType: hard + +"@endo/static-module-record@npm:^0.8.2": + version: 0.8.2 + resolution: "@endo/static-module-record@npm:0.8.2" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.17.3" + "@babel/traverse": "npm:^7.17.3" + "@babel/types": "npm:^7.17.0" + ses: "npm:^0.18.8" + checksum: 10c0/85b3cc7c11568706c51c85b665b3a49cc141bc7ca023531dbff6cd46e3cd00ddfc6edc58b4dc171a0fb352dd6a33d17b867531d9e1c8a7951eef770635535f51 + languageName: node + linkType: hard + +"@endo/stream-node@npm:0.2.26": + version: 0.2.26 + resolution: "@endo/stream-node@npm:0.2.26" + dependencies: + "@endo/init": "npm:^0.5.56" + "@endo/stream": "npm:^0.3.25" + ses: "npm:^0.18.4" + checksum: 10c0/23a1d48ac1c7ad722c02b825225936e9e78c9c2f4a348977ffa4141a3c89665a133daa070a7da3cc5b0b52ac9e4a93bdb4850b695e9d174ee4fb52713485c789 + languageName: node + linkType: hard + +"@endo/stream-node@npm:^0.2.26": + version: 0.2.30 + resolution: "@endo/stream-node@npm:0.2.30" + dependencies: + "@endo/init": "npm:^0.5.60" + "@endo/stream": "npm:^0.3.29" + ses: "npm:^0.18.8" + checksum: 10c0/e64838d4552715b72f01635e8ff70552eb66c078382a48b3e3ce70af78d0eb5333c39d691a6bc43e5b61a3b535dcde2ac10b6b51886b5f88715a03ffbe783565 + languageName: node + linkType: hard + +"@endo/stream@npm:0.3.25": + version: 0.3.25 + resolution: "@endo/stream@npm:0.3.25" + dependencies: + "@endo/eventual-send": "npm:^0.17.2" + "@endo/promise-kit": "npm:^0.2.56" + ses: "npm:^0.18.4" + checksum: 10c0/3a572465c33d5a66da697780da9e236e3caa80d3f43c2e35af6aadd11b43d10968573125c876a6b24ec716866c090ad0782b2df59f0834873059294867d4752c + languageName: node + linkType: hard + +"@endo/stream@npm:^0.3.25, @endo/stream@npm:^0.3.29": + version: 0.3.29 + resolution: "@endo/stream@npm:0.3.29" + dependencies: + "@endo/eventual-send": "npm:^0.17.6" + "@endo/promise-kit": "npm:^0.2.60" + ses: "npm:^0.18.8" + checksum: 10c0/a1bbf1d643193650efb4b68784193729ed6c1e2c9039ba2a51502b0ebf37691b338961ed9f69e81d4edec1b40e1f6d4ab1887a6ddf824bcda5d094e6d1489282 + languageName: node + linkType: hard + +"@endo/stream@npm:^1.2.7": + version: 1.2.8 + resolution: "@endo/stream@npm:1.2.8" + dependencies: + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + ses: "npm:^1.10.0" + checksum: 10c0/f435f7650020b32c10bb4cb139910b363b4d4f22bcf9e7a659d3d2eae694a3ea43c3af49c80370760a573370429e5fbe1619dec631251578d4c5eba9ff161613 + languageName: node + linkType: hard + +"@endo/trampoline@npm:^1.0.3": + version: 1.0.3 + resolution: "@endo/trampoline@npm:1.0.3" + checksum: 10c0/be0c3784b17f422ae04e28a6722e2abd193a5585a82acf5eb388476094c026aa5e76a383db887bdf6a032ccf0a12c38a967f5f1e71cef44a4659606be789b548 + languageName: node + linkType: hard + +"@endo/where@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/where@npm:1.0.9" + checksum: 10c0/dd8f8fb601fb54e7cef64d7b32f91595d01151acf1e63c46257c905afb75760d80f2eec5d71cfb1f9251e435990256d56f35d6f8b4851f5e6fbe6b393b535028 + languageName: node + linkType: hard + +"@endo/zip@npm:0.2.31": + version: 0.2.31 + resolution: "@endo/zip@npm:0.2.31" + checksum: 10c0/6c3564be33ad7967678f7db2a942191ee12c43fe88868bba93e70ab882d3a650903597e2a85aaaf40aba86654bbc68d570970940440ea12ffe26a790c718d534 + languageName: node + linkType: hard + +"@endo/zip@npm:^0.2.31, @endo/zip@npm:^0.2.32, @endo/zip@npm:^0.2.35": + version: 0.2.35 + resolution: "@endo/zip@npm:0.2.35" + checksum: 10c0/bb81c085e47a5d67342dcc039b2f471e4679e08de95cea3cdba598e2644125ec0b2002e7a1d3ff9a10977380487a58688d7e2c4d1d5525c16e46fed4b735372d + languageName: node + linkType: hard + +"@endo/zip@npm:^1.0.8, @endo/zip@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/zip@npm:1.0.9" + checksum: 10c0/3fccea31bd5dad938a3b5f531454d3c49513892d6d5aba1f0af1034ff0ae54c3e28a346a9df08bd9e5201354acccd631e45c9c0e68fa2848a876a3919f3830dc + languageName: node + linkType: hard + +"@es-joy/jsdoccomment@npm:~0.41.0": + version: 0.41.0 + resolution: "@es-joy/jsdoccomment@npm:0.41.0" + dependencies: + comment-parser: "npm:1.4.1" + esquery: "npm:^1.5.0" + jsdoc-type-pratt-parser: "npm:~4.0.0" + checksum: 10c0/1fa27531eba32e4699664da53a0865aeeda1f7e83ac156fe53b7a6b09d2f3816baa94a34845ff019c10289b09572bda5519ec917e3e241088975477fa880f72d + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: "npm:^3.3.0" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.10.0 + resolution: "@eslint-community/regexpp@npm:4.10.0" + checksum: 10c0/c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + languageName: node + linkType: hard + +"@eslint/js@npm:8.56.0": + version: 8.56.0 + resolution: "@eslint/js@npm:8.56.0" + checksum: 10c0/60b3a1cf240e2479cec9742424224465dc50e46d781da1b7f5ef240501b2d1202c225bd456207faac4b34a64f4765833345bc4ddffd00395e1db40fa8c426f5a + languageName: node + linkType: hard + +"@fast-check/ava@npm:^1.1.3, @fast-check/ava@npm:^1.1.5": + version: 1.2.1 + resolution: "@fast-check/ava@npm:1.2.1" + dependencies: + fast-check: "npm:^3.0.0" + peerDependencies: + ava: ^4 || ^5 || ^6 + checksum: 10c0/3800098fd7e8098102544a2f7a595351d063a7ebaeca18ed4901df5ec2679da2330ba8c0db2c820721d4cbb3e23d817ba22fec6d058957930e229f44fa71a684 + languageName: node + linkType: hard + +"@gar/promisify@npm:^1.1.3": + version: 1.1.3 + resolution: "@gar/promisify@npm:1.1.3" + checksum: 10c0/0b3c9958d3cd17f4add3574975e3115ae05dc7f1298a60810414b16f6f558c137b5fb3cd3905df380bacfd955ec13f67c1e6710cbb5c246a7e8d65a8289b2bff + languageName: node + linkType: hard + +"@github/browserslist-config@npm:^1.0.0": + version: 1.0.0 + resolution: "@github/browserslist-config@npm:1.0.0" + checksum: 10c0/79767cbee7190a7ec9a9397c787f146776edb963f8e9b1be23ad3976b4c4d47978db94dd1ea555a5091efa9162bff40bcd1856b9e7aa10708d4aa3234132248d + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.13": + version: 0.11.14 + resolution: "@humanwhocodes/config-array@npm:0.11.14" + dependencies: + "@humanwhocodes/object-schema": "npm:^2.0.2" + debug: "npm:^4.3.1" + minimatch: "npm:^3.0.5" + checksum: 10c0/66f725b4ee5fdd8322c737cb5013e19fac72d4d69c8bf4b7feb192fcb83442b035b92186f8e9497c220e58b2d51a080f28a73f7899bc1ab288c3be172c467541 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.2": + version: 2.0.2 + resolution: "@humanwhocodes/object-schema@npm:2.0.2" + checksum: 10c0/6fd83dc320231d71c4541d0244051df61f301817e9f9da9fd4cb7e44ec8aacbde5958c1665b0c419401ab935114fdf532a6ad5d4e7294b1af2f347dd91a6983f + languageName: node + linkType: hard + +"@iarna/toml@npm:^2.2.3": + version: 2.2.5 + resolution: "@iarna/toml@npm:2.2.5" + checksum: 10c0/d095381ad4554aca233b7cf5a91f243ef619e5e15efd3157bc640feac320545450d14b394aebbf6f02a2047437ced778ae598d5879a995441ab7b6c0b2c2f201 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@jessie.js/eslint-plugin@npm:^0.4.0": + version: 0.4.0 + resolution: "@jessie.js/eslint-plugin@npm:0.4.0" + dependencies: + requireindex: "npm:~1.1.0" + checksum: 10c0/3578f0bd82ebc1d9758376a111449aaee532aeded0af2fe3e8f6de00632872bebc082608db866fd8b481347c8c69fb1c1e52f32e184f17b1189f6d41169794c0 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" + dependencies: + "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: 10c0/376fc11cf5a967318ba3ddd9d8e91be528eab6af66810a713c49b0c3f8dc67e9949452c51c38ab1b19aa618fb5e8594da5a249977e26b1e7fea1ee5a1fcacc74 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 10c0/bc7ab4c4c00470de4e7562ecac3c0c84f53e7ee8a711e546d67c47da7febe7c45cd67d4d84ee3c9b2c05ae8e872656cdded8a707a283d30bd54fbc65aef821ab + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: 10c0/0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.22 + resolution: "@jridgewell/trace-mapping@npm:0.3.22" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/18cf19f88e2792c1c91515f2b629aae05f3cdbb2e60c3886e16e80725234ce26dd10144c4981c05d9366e7094498c0b4fe5c1a89f4a730d7376a4ba4af448149 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@mapbox/node-pre-gyp@npm:1.0.9": + version: 1.0.9 + resolution: "@mapbox/node-pre-gyp@npm:1.0.9" + dependencies: + detect-libc: "npm:^2.0.0" + https-proxy-agent: "npm:^5.0.0" + make-dir: "npm:^3.1.0" + node-fetch: "npm:^2.6.7" + nopt: "npm:^5.0.0" + npmlog: "npm:^5.0.1" + rimraf: "npm:^3.0.2" + semver: "npm:^7.3.5" + tar: "npm:^6.1.11" + bin: + node-pre-gyp: bin/node-pre-gyp + checksum: 10c0/5b32a2c3bf44e0340a29cc82cbb726bc8f49aa721388fa741afb790035975299a114b907018fc35832896cde7fa11ba2c703e2ccfd1f5a99ffe1c57814f58571 + languageName: node + linkType: hard + +"@noble/hashes@npm:^1, @noble/hashes@npm:^1.0.0": + version: 1.3.3 + resolution: "@noble/hashes@npm:1.3.3" + checksum: 10c0/23c020b33da4172c988e44100e33cd9f8f6250b68b43c467d3551f82070ebd9716e0d9d2347427aa3774c85934a35fa9ee6f026fca2117e3fa12db7bedae7668 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + languageName: node + linkType: hard + +"@npmcli/fs@npm:^2.1.0": + version: 2.1.2 + resolution: "@npmcli/fs@npm:2.1.2" + dependencies: + "@gar/promisify": "npm:^1.1.3" + semver: "npm:^7.3.5" + checksum: 10c0/c50d087733d0d8df23be24f700f104b19922a28677aa66fdbe06ff6af6431cc4a5bb1e27683cbc661a5dafa9bafdc603e6a0378121506dfcd394b2b6dd76a187 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 + languageName: node + linkType: hard + +"@npmcli/move-file@npm:^2.0.0": + version: 2.0.1 + resolution: "@npmcli/move-file@npm:2.0.1" + dependencies: + mkdirp: "npm:^1.0.4" + rimraf: "npm:^3.0.2" + checksum: 10c0/11b2151e6d1de6f6eb23128de5aa8a429fd9097d839a5190cb77aa47a6b627022c42d50fa7c47a00f1c9f8f0c1560092b09b061855d293fa0741a2a94cfb174d + languageName: node + linkType: hard + +"@opentelemetry/api@npm:~1.3.0": + version: 1.3.0 + resolution: "@opentelemetry/api@npm:1.3.0" + checksum: 10c0/47ee2ea0e15cf032833641e90a2ac949fa87ca3326c60a5875543e296954e9022ae2777ffb598953de912df7f7a4417ecb2b6f8edc67ce978545742cd74099bb + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.9.1": + version: 1.9.1 + resolution: "@opentelemetry/core@npm:1.9.1" + dependencies: + "@opentelemetry/semantic-conventions": "npm:1.9.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 10c0/c890878d6bda33b8998a2622104d39a098febbf792f7c123eca3d5c14e98a963af37cea63adaecabeeeeab72659c4e01f708934ffe040c1a167dd04a0105cb6f + languageName: node + linkType: hard + +"@opentelemetry/exporter-prometheus@npm:~0.35.0": + version: 0.35.1 + resolution: "@opentelemetry/exporter-prometheus@npm:0.35.1" + dependencies: + "@opentelemetry/core": "npm:1.9.1" + "@opentelemetry/resources": "npm:1.9.1" + "@opentelemetry/sdk-metrics": "npm:1.9.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/2d26e3330cbac76abf21503851f450d9212d1ef5fb30daca959d063fc21da2b2d55cd4f6c1253a719614e1ad89a0738b78553b25b2a9ccee21c1e328b93805f0 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-http@npm:~0.35.0": + version: 0.35.1 + resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.35.1" + dependencies: + "@opentelemetry/core": "npm:1.9.1" + "@opentelemetry/otlp-exporter-base": "npm:0.35.1" + "@opentelemetry/otlp-transformer": "npm:0.35.1" + "@opentelemetry/resources": "npm:1.9.1" + "@opentelemetry/sdk-trace-base": "npm:1.9.1" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/de13f0b147c5e871f9424bee5dfee055c22a41b99df51af38c0302722ce9709c6698e67e25c36f1cfcc0627f8d1a8c0468c9eb6e6a2251f6bf6e4ba452487fb5 + languageName: node + linkType: hard + +"@opentelemetry/otlp-exporter-base@npm:0.35.1": + version: 0.35.1 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.35.1" + dependencies: + "@opentelemetry/core": "npm:1.9.1" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/5181ca44abfcce5984e678eddd7849590b54f1058f215d30a2a4647b1e886c6a4df26169180f7db24120b2c0c6033351d9a533df10893230ae1c086b54f5562b + languageName: node + linkType: hard + +"@opentelemetry/otlp-transformer@npm:0.35.1": + version: 0.35.1 + resolution: "@opentelemetry/otlp-transformer@npm:0.35.1" + dependencies: + "@opentelemetry/core": "npm:1.9.1" + "@opentelemetry/resources": "npm:1.9.1" + "@opentelemetry/sdk-metrics": "npm:1.9.1" + "@opentelemetry/sdk-trace-base": "npm:1.9.1" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.5.0" + checksum: 10c0/499d53760530bbf89d6d4277b495aa6f028eae0761742bc91c7dc37800b50d1d497c382406f31221510bf25baa77d0dcdf0b2b0bbc43bb8f3efd7265d513f3db + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.9.1, @opentelemetry/resources@npm:~1.9.0": + version: 1.9.1 + resolution: "@opentelemetry/resources@npm:1.9.1" + dependencies: + "@opentelemetry/core": "npm:1.9.1" + "@opentelemetry/semantic-conventions": "npm:1.9.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 10c0/d307e7377e9dd7e2955939e3386c6187324186bc6c5ee66f6315af43cee9a4ec733d5bf08bbb43527c3814df0ed63ec6c30364bd44be182b749c765901142a19 + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:1.9.1, @opentelemetry/sdk-metrics@npm:~1.9.0": + version: 1.9.1 + resolution: "@opentelemetry/sdk-metrics@npm:1.9.1" + dependencies: + "@opentelemetry/core": "npm:1.9.1" + "@opentelemetry/resources": "npm:1.9.1" + lodash.merge: "npm:4.6.2" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.5.0" + checksum: 10c0/d07fbd82e32e4fc5184d0aadc2ae546f2ef19be45c0006facf46cfcd8916e99f4759286123e6efe5278c6e8077ce0a8f37bd6a2d9458258268c3f65601d3205a + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:1.9.1, @opentelemetry/sdk-trace-base@npm:~1.9.0": + version: 1.9.1 + resolution: "@opentelemetry/sdk-trace-base@npm:1.9.1" + dependencies: + "@opentelemetry/core": "npm:1.9.1" + "@opentelemetry/resources": "npm:1.9.1" + "@opentelemetry/semantic-conventions": "npm:1.9.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 10c0/0f662c7f14da44b8888247abf99f5650c8d6d2ce12e8c345afbb7c218ebc7b1697a87af05f84f3645f717026eb963b45226c74b3e60d7459feb1534e62129034 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.9.1, @opentelemetry/semantic-conventions@npm:~1.9.0": + version: 1.9.1 + resolution: "@opentelemetry/semantic-conventions@npm:1.9.1" + checksum: 10c0/6acca1e2ad6eff361e779de4a5260f9c0542c6557b0105e5785deaa5aa1bbf74625f8267df4be33580f190efeb70da949ecbfe0cf74e89488abf1e0ba479daf1 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.1.0": + version: 0.1.1 + resolution: "@pkgr/core@npm:0.1.1" + checksum: 10c0/3f7536bc7f57320ab2cf96f8973664bef624710c403357429fbf680a5c3b4843c1dbd389bb43daa6b1f6f1f007bb082f5abcb76bb2b5dc9f421647743b71d3d8 + languageName: node + linkType: hard + +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 10c0/a83343a468ff5b5ec6bff36fd788a64c839e48a07ff9f4f813564f58caf44d011cd6504ed2147bf34835bd7a7dd2107052af755961c6b098fd8902b4f6500d0f + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 10c0/eec925e681081af190b8ee231f9bad3101e189abbc182ff279da6b531e7dbd2a56f1f306f37a80b1be9e00aa2d271690d08dcc5f326f71c9eed8546675c8caf6 + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 10c0/26ae337c5659e41f091606d16465bbcc1df1f37cc1ed462438b1f67be0c1e28dfb2ca9f294f39100c52161aef82edf758c95d6d75650a1ddf31f7ddee1440b43 + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 10c0/1eb0a75180e5206d1033e4138212a8c7089a3d418c6dfa5a6ce42e593a4ae2e5892c4ef7421f38092badba4040ea6a45f0928869989411001d8c1018ea9a6e70 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.1" + "@protobufjs/inquire": "npm:^1.1.0" + checksum: 10c0/cda6a3dc2d50a182c5865b160f72077aac197046600091dbb005dd0a66db9cce3c5eaed6d470ac8ed49d7bcbeef6ee5f0bc288db5ff9a70cbd003e5909065233 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 10c0/18f2bdede76ffcf0170708af15c9c9db6259b771e6b84c51b06df34a9c339dbbeec267d14ce0bddd20acc142b1d980d983d31434398df7f98eb0c94a0eb79069 + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: 10c0/64372482efcba1fb4d166a2664a6395fa978b557803857c9c03500e0ac1013eb4b1aacc9ed851dd5fc22f81583670b4f4431bae186f3373fedcfde863ef5921a + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 10c0/cece0a938e7f5dfd2fa03f8c14f2f1cf8b0d6e13ac7326ff4c96ea311effd5fb7ae0bba754fbf505312af2e38500250c90e68506b97c02360a43793d88a0d8b4 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: 10c0/eda2718b7f222ac6e6ad36f758a92ef90d26526026a19f4f17f668f45e0306a5bd734def3f48f51f8134ae0978b6262a5c517c08b115a551756d1a3aadfcf038 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: 10c0/a3fe31fe3fa29aa3349e2e04ee13dc170cc6af7c23d92ad49e3eeaf79b9766264544d3da824dba93b7855bd6a2982fb40032ef40693da98a136d835752beb487 + languageName: node + linkType: hard + +"@rollup/plugin-commonjs@npm:^19.0.0": + version: 19.0.2 + resolution: "@rollup/plugin-commonjs@npm:19.0.2" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + commondir: "npm:^1.0.1" + estree-walker: "npm:^2.0.1" + glob: "npm:^7.1.6" + is-reference: "npm:^1.2.1" + magic-string: "npm:^0.25.7" + resolve: "npm:^1.17.0" + peerDependencies: + rollup: ^2.38.3 + checksum: 10c0/9adccf77ad835cbe565da4385212f1e54c3e0dca2be174b5c2cfe89cfaeb240f42c7673e97e49b21b7c66ed901cc1c711552b6727f60b43a953ce996eb2868a7 + languageName: node + linkType: hard + +"@rollup/plugin-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/9400c431b5e0cf3088ba2eb2d038809a2b0fb2a84ed004997da85582f48cd64958ed3168893c4f2c8109e38652400ed68282d0c92bf8ec07a3b2ef2e1ceab0b7 + languageName: node + linkType: hard + +"@rollup/plugin-node-resolve@npm:^13.0.0": + version: 13.3.0 + resolution: "@rollup/plugin-node-resolve@npm:13.3.0" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + "@types/resolve": "npm:1.17.1" + deepmerge: "npm:^4.2.2" + is-builtin-module: "npm:^3.1.0" + is-module: "npm:^1.0.0" + resolve: "npm:^1.19.0" + peerDependencies: + rollup: ^2.42.0 + checksum: 10c0/6caa32a8304a20f1c9953111b25e9543f4de7d254958d81ce0158ad909e4493946bc2060c4ace23d9748b560ebc84c920ee7bc1b7d50dbf8ba852ef13c91af58 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^3.1.0": + version: 3.1.0 + resolution: "@rollup/pluginutils@npm:3.1.0" + dependencies: + "@types/estree": "npm:0.0.39" + estree-walker: "npm:^1.0.1" + picomatch: "npm:^2.2.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0 + checksum: 10c0/7151753160d15ba2b259461a6c25b3932150994ea52dba8fd3144f634c7647c2e56733d986e2c15de67c4d96a9ee7d6278efa6d2e626a7169898fd64adc0f90c + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.1.0": + version: 5.1.3 + resolution: "@rollup/pluginutils@npm:5.1.3" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^4.0.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/ba46ad588733fb01d184ee3bc7a127d626158bc840b5874a94c129ff62689d12f16f537530709c54da6f3b71f67d705c4e09235b1dc9542e9d47ee8f2d0b8b9e + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: 10c0/073bfa548026b1ebaf1659eb8961e526be22fa77139b10d60e712f46d2f0f05f4e6c8bec62a087d41088ee9e29faa7f54838568e475ab2f776171003c3920858 + languageName: node + linkType: hard + +"@types/estree@npm:*": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d + languageName: node + linkType: hard + +"@types/estree@npm:0.0.39": + version: 0.0.39 + resolution: "@types/estree@npm:0.0.39" + checksum: 10c0/f0af6c95ac1988c4827964bd9d3b51d24da442e2188943f6dfcb1e1559103d5d024d564b2e9d3f84c53714a02a0a7435c7441138eb63d9af5de4dfc66cdc0d92 + languageName: node + linkType: hard + +"@types/estree@npm:^1.0.0": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + languageName: node + linkType: hard + +"@types/http-proxy@npm:^1.17.8": + version: 1.17.14 + resolution: "@types/http-proxy@npm:1.17.14" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/c4bffd87be9aff7e879c05bd2c28716220e0eb39788e3f8d314eee665324ad8f5f0919041cbd710254d553cd9cea023f8b776d4b1ec31d2188eac60af18c3022 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac + languageName: node + linkType: hard + +"@types/long@npm:^4.0.1": + version: 4.0.2 + resolution: "@types/long@npm:4.0.2" + checksum: 10c0/42ec66ade1f72ff9d143c5a519a65efc7c1c77be7b1ac5455c530ae9acd87baba065542f8847522af2e3ace2cc999f3ad464ef86e6b7352eece34daf88f8c924 + languageName: node + linkType: hard + +"@types/node@npm:*, @types/node@npm:>=13.7.0": + version: 20.11.19 + resolution: "@types/node@npm:20.11.19" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10c0/f451ef0a1d78f29c57bad7b77e49ebec945f2a6d0d7a89851d7e185ee9fe7ad94d651c0dfbcb7858c9fa791310c8b40a881e2260f56bd3c1b7e7ae92723373ae + languageName: node + linkType: hard + +"@types/resolve@npm:1.17.1": + version: 1.17.1 + resolution: "@types/resolve@npm:1.17.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/6eeb9c27d99bf4b393bf168d43208f63e78cefca5644662a0bdb2bdbf8352386f4f3aca66add138fc41bce5f66fd48a0de430a1473f11b612fbed0375ae78031 + languageName: node + linkType: hard + +"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0": + version: 7.5.7 + resolution: "@types/semver@npm:7.5.7" + checksum: 10c0/fb72d8b86a7779650f14ae89542f1da2ab624adb8188d98754b1d29a2fe3d41f0348bf9435b60ad145df1812fd2a09b3256779aa23b532c199f3dee59619a1eb + languageName: node + linkType: hard + +"@types/triple-beam@npm:^1.3.2": + version: 1.3.5 + resolution: "@types/triple-beam@npm:1.3.5" + checksum: 10c0/d5d7f25da612f6d79266f4f1bb9c1ef8f1684e9f60abab251e1261170631062b656ba26ff22631f2760caeafd372abc41e64867cde27fba54fafb73a35b9056a + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^6.0.0": + version: 6.21.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.5.1" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/type-utils": "npm:6.21.0" + "@typescript-eslint/utils": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + debug: "npm:^4.3.4" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.4" + natural-compare: "npm:^1.4.0" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" + peerDependencies: + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/f911a79ee64d642f814a3b6cdb0d324b5f45d9ef955c5033e78903f626b7239b4aa773e464a38c3e667519066169d983538f2bf8e5d00228af587c9d438fb344 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^6.0.0": + version: 6.21.0 + resolution: "@typescript-eslint/parser@npm:6.21.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/a8f99820679decd0d115c0af61903fb1de3b1b5bec412dc72b67670bf636de77ab07f2a68ee65d6da7976039bbf636907f9d5ca546db3f0b98a31ffbc225bc7d + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.59.11": + version: 5.59.11 + resolution: "@typescript-eslint/scope-manager@npm:5.59.11" + dependencies: + "@typescript-eslint/types": "npm:5.59.11" + "@typescript-eslint/visitor-keys": "npm:5.59.11" + checksum: 10c0/e0173e9beb44408ba3e9a1eb173dd83f5c0281af09f936d03f635b7fac41abe1f829a88d0cba134f250dfa4ce527d8cfa32c96e7ada5de876a7aa8bcc933db3b + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/scope-manager@npm:6.21.0" + dependencies: + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + checksum: 10c0/eaf868938d811cbbea33e97e44ba7050d2b6892202cea6a9622c486b85ab1cf801979edf78036179a8ba4ac26f1dfdf7fcc83a68c1ff66be0b3a8e9a9989b526 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/type-utils@npm:6.21.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:6.21.0" + "@typescript-eslint/utils": "npm:6.21.0" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^1.0.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/7409c97d1c4a4386b488962739c4f1b5b04dc60cf51f8cd88e6b12541f84d84c6b8b67e491a147a2c95f9ec486539bf4519fb9d418411aef6537b9c156468117 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.59.11": + version: 5.59.11 + resolution: "@typescript-eslint/types@npm:5.59.11" + checksum: 10c0/8d007c6c66323582d526429d059c477dcb522b904938a6aaf29804027e6f427533fabe9eb3c987491df74d4288dab238c8c948886f03244a1d908f2985631368 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/types@npm:6.21.0" + checksum: 10c0/020631d3223bbcff8a0da3efbdf058220a8f48a3de221563996ad1dcc30d6c08dadc3f7608cc08830d21c0d565efd2db19b557b9528921c78aabb605eef2d74d + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.59.11": + version: 5.59.11 + resolution: "@typescript-eslint/typescript-estree@npm:5.59.11" + dependencies: + "@typescript-eslint/types": "npm:5.59.11" + "@typescript-eslint/visitor-keys": "npm:5.59.11" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + semver: "npm:^7.3.7" + tsutils: "npm:^3.21.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/4306317ad65668a05d9ec7b280eab94dd7e0d15394db633864bad5d9633fbb9dc516e6cd9f8a0fc2f7a4fc0d53658e5dac61cbee3e070b0b7ac99bdbb0bb45ef + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" + dependencies: + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:9.0.3" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/af1438c60f080045ebb330155a8c9bb90db345d5069cdd5d01b67de502abb7449d6c75500519df829f913a6b3f490ade3e8215279b6bdc63d0fb0ae61034df5f + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/utils@npm:6.21.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@types/json-schema": "npm:^7.0.12" + "@types/semver": "npm:^7.5.0" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + semver: "npm:^7.5.4" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 10c0/ab2df3833b2582d4e5467a484d08942b4f2f7208f8e09d67de510008eb8001a9b7460f2f9ba11c12086fd3cdcac0c626761c7995c2c6b5657d5fa6b82030a32d + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:~5.59.9": + version: 5.59.11 + resolution: "@typescript-eslint/utils@npm:5.59.11" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@types/json-schema": "npm:^7.0.9" + "@types/semver": "npm:^7.3.12" + "@typescript-eslint/scope-manager": "npm:5.59.11" + "@typescript-eslint/types": "npm:5.59.11" + "@typescript-eslint/typescript-estree": "npm:5.59.11" + eslint-scope: "npm:^5.1.1" + semver: "npm:^7.3.7" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/c1927950d97afcf3cfc4c3901bc1932caa32bfc533f950f7dab420c478097d3d8daf030c27489e0d49ecdc1f87c52c782833cc505b245ab2a3094c707b0d776e + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.59.11": + version: 5.59.11 + resolution: "@typescript-eslint/visitor-keys@npm:5.59.11" + dependencies: + "@typescript-eslint/types": "npm:5.59.11" + eslint-visitor-keys: "npm:^3.3.0" + checksum: 10c0/1644c5bcb87e26717bc587f1ed1d87c96e89dae7d5bdafc1eed35a7c49e3157f8c37936b3897571892f412b7dd8439ba9cf8903128bb847831696f6517bb2d7a + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" + dependencies: + "@typescript-eslint/types": "npm:6.21.0" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/7395f69739cfa1cb83c1fb2fad30afa2a814756367302fb4facd5893eff66abc807e8d8f63eba94ed3b0fe0c1c996ac9a1680bcbf0f83717acedc3f2bb724fbf + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d + languageName: node + linkType: hard + +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 10c0/0bfa50a3d756623d1f3409bc23f225a1d069424dbc77c6fd2f14fb377390cd57ec703dc70286e081c564be9051ead9ba85d81d66a3e68eeb6eb506d4e0c0fbda + languageName: node + linkType: hard + +"KREAd@workspace:.": + version: 0.0.0-use.local + resolution: "KREAd@workspace:." + dependencies: + "@agoric/cosmic-swingset": "npm:agoric-upgrade-11" + "@agoric/internal": "npm:agoric-upgrade-11" + "@agoric/solo": "npm:agoric-upgrade-11" + "@endo/eslint-plugin": "npm:^0.4.4" + "@jessie.js/eslint-plugin": "npm:^0.4.0" + agoric: "npm:agoric-upgrade-11" + eslint: "npm:^8.47.0" + eslint-config-airbnb-base: "npm:^15.0.0" + eslint-config-jessie: "npm:^0.0.6" + eslint-config-prettier: "npm:^8.8.0" + eslint-plugin-ava: "npm:^14.0.0" + eslint-plugin-github: "npm:^4.8.0" + eslint-plugin-import: "npm:^2.25.3" + eslint-plugin-jsdoc: "npm:^46.4.3" + eslint-plugin-prettier: "npm:^5.0.0" + import-meta-resolve: "npm:^1.1.1" + patch-package: "npm:^8.0.0" + prettier: "npm:^2.2.1" + languageName: unknown + linkType: soft + +"abbrev@npm:1, abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"accepts@npm:~1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: "npm:~2.1.34" + negotiator: "npm:0.6.3" + checksum: 10c0/3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.2.0": + version: 8.3.2 + resolution: "acorn-walk@npm:8.3.2" + checksum: 10c0/7e2a8dad5480df7f872569b9dccff2f3da7e65f5353686b1d6032ab9f4ddf6e3a2cb83a9b52cf50b1497fd522154dda92f0abf7153290cc79cd14721ff121e52 + languageName: node + linkType: hard + +"acorn@npm:^8.2.4, acorn@npm:^8.7.1, acorn@npm:^8.9.0": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 10c0/3ff155f8812e4a746fee8ecff1f227d527c4c45655bb1fad6347c3cb58e46190598217551b1500f18542d2bbe5c87120cb6927f5a074a59166fbdd9468f0a299 + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: "npm:4" + checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: "npm:^1.2.1" + checksum: 10c0/394ea19f9710f230722996e156607f48fdf3a345133b0b1823244b7989426c16019a428b56c82d3eabef616e938812981d9009f4792ecc66bd6a59e991c62612 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"aggregate-error@npm:^4.0.0": + version: 4.0.1 + resolution: "aggregate-error@npm:4.0.1" + dependencies: + clean-stack: "npm:^4.0.0" + indent-string: "npm:^5.0.0" + checksum: 10c0/75fd739f5c4c60a667cce35ccaf0edf135e147ef0be9a029cab75de14ac9421779b15339d562e58d25b233ea0ef2bbd4c916f149fdbcb73c2b9a62209e611343 + languageName: node + linkType: hard + +"agoric@npm:^0.21.2-u11wf.0": + version: 0.21.2-u12.0 + resolution: "agoric@npm:0.21.2-u12.0" + dependencies: + "@agoric/access-token": "npm:^0.4.22-u11wf.0" + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/cache": "npm:^0.3.3-u12.0" + "@agoric/casting": "npm:^0.4.3-u12.0" + "@agoric/cosmic-proto": "npm:^0.3.0" + "@agoric/ertp": "npm:^0.16.3-u12.0" + "@agoric/inter-protocol": "npm:^0.16.2-u12.0" + "@agoric/internal": "npm:^0.4.0-u12.0" + "@agoric/smart-wallet": "npm:^0.5.4-u12.0" + "@agoric/store": "npm:^0.9.3-u12.0" + "@agoric/swingset-vat": "npm:^0.32.3-u12.0" + "@agoric/vats": "npm:^0.15.2-u12.0" + "@agoric/zoe": "npm:^0.26.3-u12.0" + "@agoric/zone": "npm:^0.2.3-u12.0" + "@confio/relayer": "npm:^0.9.0" + "@cosmjs/crypto": "npm:^0.30.1" + "@cosmjs/encoding": "npm:^0.30.1" + "@cosmjs/math": "npm:^0.30.1" + "@cosmjs/proto-signing": "npm:^0.30.1" + "@cosmjs/stargate": "npm:^0.30.1" + "@endo/bundle-source": "npm:2.5.2-upstream-rollup" + "@endo/captp": "npm:3.1.1" + "@endo/compartment-mapper": "npm:0.8.4" + "@endo/far": "npm:0.2.18" + "@endo/init": "npm:0.5.56" + "@endo/marshal": "npm:0.8.5" + "@endo/nat": "npm:4.1.27" + "@endo/promise-kit": "npm:0.2.56" + "@iarna/toml": "npm:^2.2.3" + anylogger: "npm:^0.21.0" + chalk: "npm:^5.2.0" + commander: "npm:^10.0.0" + deterministic-json: "npm:^1.0.5" + esm: "github:agoric-labs/esm#Agoric-built" + inquirer: "npm:^8.2.2" + opener: "npm:^1.5.2" + tmp: "npm:^0.2.1" + ws: "npm:^7.2.0" + bin: + agops: src/bin-agops.js + agoric: src/entrypoint.js + checksum: 10c0/d439fec4e0d45001ba39b5a9f2cf0b22a0f303e91380abea6b1133df7f7fd18bab0c4f9f66a21839333b4bdc38f9b1683386761af672853dab727f14735ca7d9 + languageName: node + linkType: hard + +"agoric@npm:agoric-upgrade-11": + version: 0.21.2-u11wf.0 + resolution: "agoric@npm:0.21.2-u11wf.0" + dependencies: + "@agoric/access-token": "npm:^0.4.22-u11wf.0" + "@agoric/assert": "npm:^0.6.1-u11wf.0" + "@agoric/cache": "npm:^0.3.3-u11wf.0" + "@agoric/casting": "npm:^0.4.3-u11wf.0" + "@agoric/cosmic-proto": "npm:^0.3.0" + "@agoric/ertp": "npm:^0.16.3-u11wf.0" + "@agoric/inter-protocol": "npm:^0.16.2-u11wf.0" + "@agoric/internal": "npm:^0.3.3-u11wf.0" + "@agoric/smart-wallet": "npm:^0.5.4-u11wf.0" + "@agoric/store": "npm:^0.9.3-u11wf.0" + "@agoric/swingset-vat": "npm:^0.32.3-u11wf.0" + "@agoric/vats": "npm:^0.15.2-u11wf.0" + "@agoric/zoe": "npm:^0.26.3-u11wf.0" + "@agoric/zone": "npm:^0.2.3-u11wf.0" + "@confio/relayer": "npm:^0.9.0" + "@cosmjs/crypto": "npm:^0.30.1" + "@cosmjs/encoding": "npm:^0.30.1" + "@cosmjs/math": "npm:^0.30.1" + "@cosmjs/proto-signing": "npm:^0.30.1" + "@cosmjs/stargate": "npm:^0.30.1" + "@endo/bundle-source": "npm:2.5.2-upstream-rollup" + "@endo/captp": "npm:3.1.1" + "@endo/compartment-mapper": "npm:0.8.4" + "@endo/far": "npm:0.2.18" + "@endo/init": "npm:0.5.56" + "@endo/marshal": "npm:0.8.5" + "@endo/nat": "npm:4.1.27" + "@endo/promise-kit": "npm:0.2.56" + "@iarna/toml": "npm:^2.2.3" + anylogger: "npm:^0.21.0" + chalk: "npm:^5.2.0" + commander: "npm:^10.0.0" + deterministic-json: "npm:^1.0.5" + esm: "github:agoric-labs/esm#Agoric-built" + inquirer: "npm:^8.2.2" + opener: "npm:^1.5.2" + tmp: "npm:^0.2.1" + ws: "npm:^7.2.0" + bin: + agops: src/bin-agops.js + agoric: src/entrypoint.js + checksum: 10c0/e415736e01baa355f703fe0b31843f646154b29c8e1a8df7d93e718cef9670e1c6d63a82bbf55c12c53c4584d4bda821c6d9bfb87364b4f3b2505b550c24f007 + languageName: node + linkType: hard + +"ajv@npm:7.1.1": + version: 7.1.1 + resolution: "ajv@npm:7.1.1" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.2.2" + checksum: 10c0/328a86011a67dc10eff41e3e2ef412f88f5de546ad2288c8a3d2a563c203dd4dd479660c07f99fd9499e36c723afee212704b25f5599815991409528fd638329 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ajv@npm:^8.0.1": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.2.2" + checksum: 10c0/ac4f72adf727ee425e049bc9d8b31d4a57e1c90da8d28bcd23d60781b12fcd6fc3d68db5df16994c57b78b94eed7988f5a6b482fd376dc5b084125e20a0a622e + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anylogger@npm:^0.21.0": + version: 0.21.0 + resolution: "anylogger@npm:0.21.0" + checksum: 10c0/1ca7fcf5bc2b78d1e1d9b8c8cc7ce50b5c6cc67a8da5a28c9c975b7b46fff255a04abab02de38a5139190c9d8b34b3d6c59af6724521b077f7d7dfbad9b47a9c + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 + languageName: node + linkType: hard + +"are-docs-informative@npm:^0.0.2": + version: 0.0.2 + resolution: "are-docs-informative@npm:0.0.2" + checksum: 10c0/f0326981bd699c372d268b526b170a28f2e1aec2cf99d7de0686083528427ecdf6ae41fef5d9988e224a5616298af747ad8a76e7306b0a7c97cc085a99636d60 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^2.0.0": + version: 2.0.0 + resolution: "are-we-there-yet@npm:2.0.0" + dependencies: + delegates: "npm:^1.0.0" + readable-stream: "npm:^3.6.0" + checksum: 10c0/375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: "npm:^1.0.0" + readable-stream: "npm:^3.6.0" + checksum: 10c0/8373f289ba42e4b5ec713bb585acdac14b5702c75f2a458dc985b9e4fa5762bc5b46b40a21b72418a3ed0cfb5e35bdc317ef1ae132f3035f633d581dd03168c3 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"aria-query@npm:^5.3.0": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: "npm:^2.0.3" + checksum: 10c0/2bff0d4eba5852a9dd578ecf47eaef0e82cc52569b48469b0aac2db5145db0b17b7a58d9e01237706d1e14b7a1b0ac9b78e9c97027ad97679dd8f91b85da1469 + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.5" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/f5cdf54527cd18a3d2852ddf73df79efec03829e7373a8322ef5df2b4ef546fb365c19c71d6b42d641cb6bfe0f1a2f19bc0ece5b533295f86d7c3d522f228917 + languageName: node + linkType: hard + +"array-find-index@npm:^1.0.1": + version: 1.0.2 + resolution: "array-find-index@npm:1.0.2" + checksum: 10c0/86b9485c74ddd324feab807e10a6de3f9c1683856267236fac4bb4d4667ada6463e106db3f6c540ae6b720e0442b590ec701d13676df4c6af30ebf4da09b4f57 + languageName: node + linkType: hard + +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: 10c0/806966c8abb2f858b08f5324d9d18d7737480610f3bd5d3498aaae6eb5efdc501a884ba019c9b4a8f02ff67002058749d05548fd42fa8643f02c9c7f22198b91 + languageName: node + linkType: hard + +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": + version: 3.1.7 + resolution: "array-includes@npm:3.1.7" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + get-intrinsic: "npm:^1.2.1" + is-string: "npm:^1.0.7" + checksum: 10c0/692907bd7f19d06dc58ccb761f34b58f5dc0b437d2b47a8fe42a1501849a5cf5c27aed3d521a9702667827c2c85a7e75df00a402c438094d87fc43f39ebf9b2b + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + +"array.prototype.filter@npm:^1.0.3": + version: 1.0.3 + resolution: "array.prototype.filter@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + es-array-method-boxes-properly: "npm:^1.0.0" + is-string: "npm:^1.0.7" + checksum: 10c0/8b70b5f866df5d90fa27aa5bfa30f5fefc44cbea94b0513699d761713658077c2a24cbf06aac5179eabddb6c93adc467af4c288b7a839c5bc5a769ee5a2d48ad + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.3": + version: 1.2.4 + resolution: "array.prototype.findlastindex@npm:1.2.4" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.3.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/b23ae35cf7621c82c20981ee110626090734a264798e781b052e534e3d61d576f03d125d92cf2e3672062bb5cc5907e02e69f2d80196a55f3cdb0197b4aa8c64 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + es-shim-unscopables: "npm:^1.0.0" + checksum: 10c0/a578ed836a786efbb6c2db0899ae80781b476200617f65a44846cb1ed8bd8b24c8821b83703375d8af639c689497b7b07277060024b9919db94ac3e10dc8a49b + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + es-shim-unscopables: "npm:^1.0.0" + checksum: 10c0/67b3f1d602bb73713265145853128b1ad77cc0f9b833c7e1e056b323fbeac41a4ff1c9c99c7b9445903caea924d9ca2450578d9011913191aa88cc3c3a4b54f4 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.2.1" + get-intrinsic: "npm:^1.2.3" + is-array-buffer: "npm:^3.0.4" + is-shared-array-buffer: "npm:^1.0.2" + checksum: 10c0/d32754045bcb2294ade881d45140a5e52bda2321b9e98fa514797b7f0d252c4c5ab0d1edb34112652c62fa6a9398def568da63a4d7544672229afea283358c36 + languageName: node + linkType: hard + +"arrgv@npm:^1.0.2": + version: 1.0.2 + resolution: "arrgv@npm:1.0.2" + checksum: 10c0/7e6e782e6b749923ac7cbc4048ef6fe0844c4a59bfc8932fcd4c44566ba25eed46501f94dd7cf3c7297da88f3f599ca056bfb77d0c2484aebc92f04239f69124 + languageName: node + linkType: hard + +"arrify@npm:^3.0.0": + version: 3.0.0 + resolution: "arrify@npm:3.0.0" + checksum: 10c0/2e26601b8486f29780f1f70f7ac05a226755814c2a3ab42e196748f650af1dc310cd575a11dd4b9841c70fd7460b2dd2b8fe6fb7a3375878e2660706efafa58e + languageName: node + linkType: hard + +"ast-types-flow@npm:^0.0.8": + version: 0.0.8 + resolution: "ast-types-flow@npm:0.0.8" + checksum: 10c0/f2a0ba8055353b743c41431974521e5e852a9824870cd6fce2db0e538ac7bf4da406bbd018d109af29ff3f8f0993f6a730c9eddbd0abd031fbcb29ca75c1014e + languageName: node + linkType: hard + +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 10c0/f63d439cc383db1b9c5c6080d1e240bd14dae745f15d11ec5da863e182bbeca70df6c8191cffef5deba0b566ef98834610a68be79ac6379c95eeb26e1b310e25 + languageName: node + linkType: hard + +"async@npm:^3.1.0": + version: 3.2.5 + resolution: "async@npm:3.2.5" + checksum: 10c0/1408287b26c6db67d45cb346e34892cee555b8b59e6c68e6f8c3e495cad5ca13b4f218180e871f3c2ca30df4ab52693b66f2f6ff43644760cab0b2198bda79c1 + languageName: node + linkType: hard + +"asynciterator.prototype@npm:^1.0.0": + version: 1.0.0 + resolution: "asynciterator.prototype@npm:1.0.0" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/fb76850e57d931ff59fd16b6cddb79b0d34fe45f400b2c3480d38892e72cd089787401687dbdb7cdb14ece402c275d3e02a648760d1489cd493527129c4c6204 + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef + languageName: node + linkType: hard + +"ava@npm:^4.3.1": + version: 4.3.3 + resolution: "ava@npm:4.3.3" + dependencies: + acorn: "npm:^8.7.1" + acorn-walk: "npm:^8.2.0" + ansi-styles: "npm:^6.1.0" + arrgv: "npm:^1.0.2" + arrify: "npm:^3.0.0" + callsites: "npm:^4.0.0" + cbor: "npm:^8.1.0" + chalk: "npm:^5.0.1" + chokidar: "npm:^3.5.3" + chunkd: "npm:^2.0.1" + ci-info: "npm:^3.3.1" + ci-parallel-vars: "npm:^1.0.1" + clean-yaml-object: "npm:^0.1.0" + cli-truncate: "npm:^3.1.0" + code-excerpt: "npm:^4.0.0" + common-path-prefix: "npm:^3.0.0" + concordance: "npm:^5.0.4" + currently-unhandled: "npm:^0.4.1" + debug: "npm:^4.3.4" + del: "npm:^6.1.1" + emittery: "npm:^0.11.0" + figures: "npm:^4.0.1" + globby: "npm:^13.1.1" + ignore-by-default: "npm:^2.1.0" + indent-string: "npm:^5.0.0" + is-error: "npm:^2.2.2" + is-plain-object: "npm:^5.0.0" + is-promise: "npm:^4.0.0" + matcher: "npm:^5.0.0" + mem: "npm:^9.0.2" + ms: "npm:^2.1.3" + p-event: "npm:^5.0.1" + p-map: "npm:^5.4.0" + picomatch: "npm:^2.3.1" + pkg-conf: "npm:^4.0.0" + plur: "npm:^5.1.0" + pretty-ms: "npm:^7.0.1" + resolve-cwd: "npm:^3.0.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.5" + strip-ansi: "npm:^7.0.1" + supertap: "npm:^3.0.1" + temp-dir: "npm:^2.0.0" + write-file-atomic: "npm:^4.0.1" + yargs: "npm:^17.5.1" + peerDependencies: + "@ava/typescript": "*" + peerDependenciesMeta: + "@ava/typescript": + optional: true + bin: + ava: entrypoints/cli.mjs + checksum: 10c0/e3ba41d08c445b62c3bdd964020b4222f14dc75b0cd5b3fe670dd25530e5d08ca2456ddb368cb84073a24548f08097785d25b1e69afdc20af3c9f944abf91a0e + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.5, available-typed-arrays@npm:^1.0.6": + version: 1.0.6 + resolution: "available-typed-arrays@npm:1.0.6" + checksum: 10c0/e427360e68ccb19fa0ea48421f393ef3f3d2c9c561f6a8a0704ff472d58024be3e4101f00565445ba453de723a76f4a650defbacaea663c3fb3be8b8f842e955 + languageName: node + linkType: hard + +"axe-core@npm:=4.7.0": + version: 4.7.0 + resolution: "axe-core@npm:4.7.0" + checksum: 10c0/89ac5712b5932ac7d23398b4cb5ba081c394a086e343acc68ba49c83472706e18e0799804e8388c779dcdacc465377deb29f2714241d3fbb389cf3a6b275c9ba + languageName: node + linkType: hard + +"axios@npm:0.21.4, axios@npm:^0.21.2": + version: 0.21.4 + resolution: "axios@npm:0.21.4" + dependencies: + follow-redirects: "npm:^1.14.0" + checksum: 10c0/fbcff55ec68f71f02d3773d467db2fcecdf04e749826c82c2427a232f9eba63242150a05f15af9ef15818352b814257541155de0281f8fb2b7e8a5b79f7f2142 + languageName: node + linkType: hard + +"axobject-query@npm:^3.2.1": + version: 3.2.1 + resolution: "axobject-query@npm:3.2.1" + dependencies: + dequal: "npm:^2.0.3" + checksum: 10c0/f7debc2012e456139b57d888c223f6d3cb4b61eb104164a85e3d346273dd6ef0bc9a04b6660ca9407704a14a8e05fa6b6eb9d55f44f348c7210de7ffb350c3a7 + languageName: node + linkType: hard + +"babel-eslint@npm:^10.0.3": + version: 10.1.0 + resolution: "babel-eslint@npm:10.1.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + "@babel/parser": "npm:^7.7.0" + "@babel/traverse": "npm:^7.7.0" + "@babel/types": "npm:^7.7.0" + eslint-visitor-keys: "npm:^1.0.0" + resolve: "npm:^1.12.0" + peerDependencies: + eslint: ">= 4.12.1" + checksum: 10c0/a1596111871ce3615410a2ffb87ab8383b35a8c8e1942b47130cb12bca2578c8eb9d8e56c3c84f44d7abe716684f6794f2e6c1e5b4e6d09f171ae51670be44b9 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"basic-auth@npm:~2.0.1": + version: 2.0.1 + resolution: "basic-auth@npm:2.0.1" + dependencies: + safe-buffer: "npm:5.1.2" + checksum: 10c0/05f56db3a0fc31c89c86b605231e32ee143fb6ae38dc60616bc0970ae6a0f034172def99e69d3aed0e2c9e7cac84e2d63bc51a0b5ff6ab5fc8808cc8b29923c1 + languageName: node + linkType: hard + +"bech32@npm:^1.1.4": + version: 1.1.4 + resolution: "bech32@npm:1.1.4" + checksum: 10c0/5f62ca47b8df99ace9c0e0d8deb36a919d91bf40066700aaa9920a45f86bb10eb56d537d559416fd8703aa0fb60dddb642e58f049701e7291df678b2033e5ee5 + languageName: node + linkType: hard + +"better-sqlite3@npm:^8.2.0": + version: 8.7.0 + resolution: "better-sqlite3@npm:8.7.0" + dependencies: + bindings: "npm:^1.5.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + checksum: 10c0/2583401b08531eee74c083c73f3a5902bc142b0e1c16de5b9caa92ee94f544e2cb512c214de2f762a6c83e593f26f70013214344a9ea66ace6d0619efbf04a1e + languageName: node + linkType: hard + +"better-sqlite3@npm:^9.1.1": + version: 9.6.0 + resolution: "better-sqlite3@npm:9.6.0" + dependencies: + bindings: "npm:^1.5.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + checksum: 10c0/8db9b38f414e26a56d4c40fc16e94a253118491dae0e2c054338a9e470f1a883c7eb4cb330f2f5737db30f704d4f2e697c59071ca04e03364ee9fe04375aa9c8 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: 10c0/d73d8b897238a2d3ffa5f59c0241870043aa7471335e89ea5e1ff48edb7c2d0bb471517a3e4c5c3f4c043615caa2717b5f80a5e61e07503d51dc85cb848e665d + languageName: node + linkType: hard + +"bindings@npm:^1.2.1, bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: "npm:1.0.0" + checksum: 10c0/3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba + languageName: node + linkType: hard + +"bintrees@npm:1.0.2": + version: 1.0.2 + resolution: "bintrees@npm:1.0.2" + checksum: 10c0/132944b20c93c1a8f97bf8aa25980a76c6eb4291b7f2df2dbcd01cb5b417c287d3ee0847c7260c9f05f3d5a4233aaa03dec95114e97f308abe9cc3f72bed4a44 + languageName: node + linkType: hard + +"bl@npm:^4.0.3, bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10c0/02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f + languageName: node + linkType: hard + +"blueimp-md5@npm:^2.10.0": + version: 2.19.0 + resolution: "blueimp-md5@npm:2.19.0" + checksum: 10c0/85d04343537dd99a288c62450341dcce7380d3454c81f8e5a971ddd80307d6f9ef51b5b92ad7d48aaaa92fd6d3a1f6b2f4fada068faae646887f7bfabc17a346 + languageName: node + linkType: hard + +"bn.js@npm:^4.11.9": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 10c0/9736aaa317421b6b3ed038ff3d4491935a01419ac2d83ddcfebc5717385295fcfcf0c57311d90fe49926d0abbd7a9dbefdd8861e6129939177f7e67ebc645b21 + languageName: node + linkType: hard + +"bn.js@npm:^5.2.0": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 10c0/bed3d8bd34ec89dbcf9f20f88bd7d4a49c160fda3b561c7bb227501f974d3e435a48fb9b61bc3de304acab9215a3bda0803f7017ffb4d0016a0c3a740a283caa + languageName: node + linkType: hard + +"body-parser@npm:1.20.1": + version: 1.20.1 + resolution: "body-parser@npm:1.20.1" + dependencies: + bytes: "npm:3.1.2" + content-type: "npm:~1.0.4" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + on-finished: "npm:2.4.1" + qs: "npm:6.11.0" + raw-body: "npm:2.5.1" + type-is: "npm:~1.6.18" + unpipe: "npm:1.0.0" + checksum: 10c0/a202d493e2c10a33fb7413dac7d2f713be579c4b88343cd814b6df7a38e5af1901fc31044e04de176db56b16d9772aa25a7723f64478c20f4d91b1ac223bf3b8 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: "npm:^7.0.1" + checksum: 10c0/321b4d675791479293264019156ca322163f02dc06e3c4cab33bb15cd43d80b51efef69b0930cfde3acd63d126ebca24cd0544fa6f261e093a0fb41ab9dda381 + languageName: node + linkType: hard + +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 10c0/6f366d7c4990f82c366e3878492ba9a372a73163c09871e80d82fb4ae0d23f9f8924cb8a662330308206e6b3b76ba1d528b4601c9ef73c2166b440b2ea3b7571 + languageName: node + linkType: hard + +"browserslist@npm:^4.21.0": + version: 4.23.0 + resolution: "browserslist@npm:4.23.0" + dependencies: + caniuse-lite: "npm:^1.0.30001587" + electron-to-chromium: "npm:^1.4.668" + node-releases: "npm:^2.0.14" + update-browserslist-db: "npm:^1.0.13" + bin: + browserslist: cli.js + checksum: 10c0/8e9cc154529062128d02a7af4d8adeead83ca1df8cd9ee65a88e2161039f3d68a4d40fea7353cab6bae4c16182dec2fdd9a1cf7dc2a2935498cee1af0e998943 + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"bufferfromfile@github:agoric-labs/BufferFromFile#Agoric-built": + version: 0.4.377 + resolution: "bufferfromfile@https://github.com/agoric-labs/BufferFromFile.git#commit=691031035856fadba2603e52f4411160d7f34ed6" + dependencies: + "@mapbox/node-pre-gyp": "npm:1.0.9" + node-gyp: "npm:^9.3.1" + wbasenodejscpp: "npm:latest" + checksum: 10c0/a5fd646c066cff6a2a4b91bac3a9519d00517ed25cc506cf36a1b5889bb1227436a52a682bd741654fc1af6cf3b4480337c34acd58e43791152c5996fbf8aea3 + languageName: node + linkType: hard + +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: 10c0/2cb3448b4f7306dc853632a4fcddc95e8d4e4b9868c139400027b71938fc6806d4ff44007deffb362ac85724bd40c2c6452fb6a0aa4531650eeddb98d8e5ee8a + languageName: node + linkType: hard + +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e + languageName: node + linkType: hard + +"cacache@npm:^16.1.0": + version: 16.1.3 + resolution: "cacache@npm:16.1.3" + dependencies: + "@npmcli/fs": "npm:^2.1.0" + "@npmcli/move-file": "npm:^2.0.0" + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.1.0" + glob: "npm:^8.0.1" + infer-owner: "npm:^1.0.4" + lru-cache: "npm:^7.7.1" + minipass: "npm:^3.1.6" + minipass-collect: "npm:^1.0.2" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + mkdirp: "npm:^1.0.4" + p-map: "npm:^4.0.0" + promise-inflight: "npm:^1.0.1" + rimraf: "npm:^3.0.2" + ssri: "npm:^9.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^2.0.0" + checksum: 10c0/cdf6836e1c457d2a5616abcaf5d8240c0346b1f5bd6fdb8866b9d84b6dff0b54e973226dc11e0d099f35394213d24860d1989c8358d2a41b39eb912b3000e749 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f + languageName: node + linkType: hard + +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.1" + checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"callsites@npm:^4.0.0": + version: 4.1.0 + resolution: "callsites@npm:4.1.0" + checksum: 10c0/91700844127a6dcd4792d231a12dd8e9ec10525eb9962180a8558417d7e3f443e52a4f14746ad2838eaf14f79431ee1539d13bd188da280f720a06a91bd1157a + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001587": + version: 1.0.30001587 + resolution: "caniuse-lite@npm:1.0.30001587" + checksum: 10c0/c7a34cb758a24fa1d948e164de3c5873e7e607b46db0e530ba160a281cb619c9d6a1b85bb334894bc8e629a59db99f3de4521593b08142d317a529e80a856385 + languageName: node + linkType: hard + +"cbor@npm:^8.1.0": + version: 8.1.0 + resolution: "cbor@npm:8.1.0" + dependencies: + nofilter: "npm:^3.1.0" + checksum: 10c0/a836e2e7ea0efb1b9c4e5a4be906c57113d730cc42293a34072e0164ed110bb8ac035dc7dca2e3ebb641bd4b37e00fdbbf09c951aa864b3d4888a6ed8c6243f7 + languageName: node + linkType: hard + +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chalk@npm:^5.0.1, chalk@npm:^5.2.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 10c0/8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 + languageName: node + linkType: hard + +"character-builder-agservers@workspace:_agstate/agoric-servers": + version: 0.0.0-use.local + resolution: "character-builder-agservers@workspace:_agstate/agoric-servers" + dependencies: + "@agoric/cosmic-swingset": "npm:agoric-upgrade-11" + languageName: unknown + linkType: soft + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d + languageName: node + linkType: hard + +"chokidar@npm:^3.5.3": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"chunkd@npm:^2.0.1": + version: 2.0.1 + resolution: "chunkd@npm:2.0.1" + checksum: 10c0/4e0c5aac6048ecedfa4cd0a5f6c4f010c70a7b7645aeca7bfeb47cb0733c3463054f0ced3f2667b2e0e67edd75d68a8e05481b01115ba3f8a952a93026254504 + languageName: node + linkType: hard + +"ci-info@npm:^3.3.1, ci-info@npm:^3.7.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + languageName: node + linkType: hard + +"ci-parallel-vars@npm:^1.0.1": + version: 1.0.1 + resolution: "ci-parallel-vars@npm:1.0.1" + checksum: 10c0/80952f699cbbc146092b077b4f3e28d085620eb4e6be37f069b4dbb3db0ee70e8eec3beef4ebe70ff60631e9fc743b9d0869678489f167442cac08b260e5ac08 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"clean-stack@npm:^4.0.0": + version: 4.2.0 + resolution: "clean-stack@npm:4.2.0" + dependencies: + escape-string-regexp: "npm:5.0.0" + checksum: 10c0/2bdf981a0fef0a23c14255df693b30eb9ae27eedf212470d8c400a0c0b6fb82fbf1ff8c5216ccd5721e3670b700389c886b1dce5070776dc9fbcc040957758c0 + languageName: node + linkType: hard + +"clean-yaml-object@npm:^0.1.0": + version: 0.1.0 + resolution: "clean-yaml-object@npm:0.1.0" + checksum: 10c0/a6505310590038afb9f0adc7f17a4c66787719c94d23f8491267ea4d9c405cdd378bd576ae1926169b6d997d4c59a8b86516bf4d16ba228280cf615598c58e05 + languageName: node + linkType: hard + +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: "npm:^3.1.0" + checksum: 10c0/92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 10c0/907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 + languageName: node + linkType: hard + +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: "npm:^5.0.0" + string-width: "npm:^5.0.0" + checksum: 10c0/a19088878409ec0e5dc2659a5166929629d93cfba6d68afc9cde2282fd4c751af5b555bf197047e31c87c574396348d011b7aa806fec29c4139ea4f7f00b324c + languageName: node + linkType: hard + +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 10c0/125a62810e59a2564268c80fdff56c23159a7690c003e34aeb2e68497dccff26911998ff49c33916fcfdf71e824322cc3953e3f7b48b27267c7a062c81348a9a + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: 10c0/2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b + languageName: node + linkType: hard + +"code-excerpt@npm:^4.0.0": + version: 4.0.0 + resolution: "code-excerpt@npm:4.0.0" + dependencies: + convert-to-spaces: "npm:^2.0.1" + checksum: 10c0/b6c5a06e039cecd2ab6a0e10ee0831de8362107d1f298ca3558b5f9004cb8e0260b02dd6c07f57b9a0e346c76864d2873311ee1989809fdeb05bd5fbbadde773 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"color-string@npm:^1.6.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: "npm:^1.0.0" + simple-swizzle: "npm:^0.2.2" + checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 + languageName: node + linkType: hard + +"color-support@npm:^1.1.2, color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 + languageName: node + linkType: hard + +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.3" + color-string: "npm:^1.6.0" + checksum: 10c0/39345d55825884c32a88b95127d417a2c24681d8b57069413596d9fcbb721459ef9d9ec24ce3e65527b5373ce171b73e38dbcd9c830a52a6487e7f37bf00e83c + languageName: node + linkType: hard + +"colorspace@npm:1.1.x": + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" + dependencies: + color: "npm:^3.1.3" + text-hex: "npm:1.0.x" + checksum: 10c0/af5f91ff7f8e146b96e439ac20ed79b197210193bde721b47380a75b21751d90fa56390c773bb67c0aedd34ff85091883a437ab56861c779bd507d639ba7e123 + languageName: node + linkType: hard + +"commander@npm:7.1.0": + version: 7.1.0 + resolution: "commander@npm:7.1.0" + checksum: 10c0/1c114cc2e0c7c980068d7f2472f3fc9129ea5d6f2f0a8699671afe5a44a51d5707a6c73daff1aaa919424284dea9fca4017307d30647935a1116518699d54c9d + languageName: node + linkType: hard + +"commander@npm:^10.0.0": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 10c0/53f33d8927758a911094adadda4b2cbac111a5b377d8706700587650fd8f45b0bbe336de4b5c3fe47fd61f420a3d9bd452b6e0e6e5600a7e74d7bf0174f6efe3 + languageName: node + linkType: hard + +"comment-parser@npm:1.4.1": + version: 1.4.1 + resolution: "comment-parser@npm:1.4.1" + checksum: 10c0/d6c4be3f5be058f98b24f2d557f745d8fe1cc9eb75bebbdccabd404a0e1ed41563171b16285f593011f8b6a5ec81f564fb1f2121418ac5cbf0f49255bf0840dd + languageName: node + linkType: hard + +"common-path-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "common-path-prefix@npm:3.0.0" + checksum: 10c0/c4a74294e1b1570f4a8ab435285d185a03976c323caa16359053e749db4fde44e3e6586c29cd051100335e11895767cbbd27ea389108e327d62f38daf4548fdb + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"concordance@npm:^5.0.4": + version: 5.0.4 + resolution: "concordance@npm:5.0.4" + dependencies: + date-time: "npm:^3.1.0" + esutils: "npm:^2.0.3" + fast-diff: "npm:^1.2.0" + js-string-escape: "npm:^1.0.1" + lodash: "npm:^4.17.15" + md5-hex: "npm:^3.0.1" + semver: "npm:^7.3.2" + well-known-symbols: "npm:^2.0.0" + checksum: 10c0/59b440f330df3a7c9aa148ba588b3e99aed86acab225b4f01ffcea34ace4cf11f817e31153254e8f38ed48508998dad40b9106951a743c334d751f7ab21afb8a + languageName: node + linkType: hard + +"confusing-browser-globals@npm:^1.0.10": + version: 1.0.11 + resolution: "confusing-browser-globals@npm:1.0.11" + checksum: 10c0/475d0a284fa964a5182b519af5738b5b64bf7e413cfd703c1b3496bf6f4df9f827893a9b221c0ea5873c1476835beb1e0df569ba643eff0734010c1eb780589e + languageName: node + linkType: hard + +"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 + languageName: node + linkType: hard + +"content-disposition@npm:0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: "npm:5.2.1" + checksum: 10c0/bac0316ebfeacb8f381b38285dc691c9939bf0a78b0b7c2d5758acadad242d04783cee5337ba7d12a565a19075af1b3c11c728e1e4946de73c6ff7ce45f3f1bb + languageName: node + linkType: hard + +"content-type@npm:~1.0.4": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af + languageName: node + linkType: hard + +"convert-to-spaces@npm:^2.0.1": + version: 2.0.1 + resolution: "convert-to-spaces@npm:2.0.1" + checksum: 10c0/d90aa0e3b6a27f9d5265a8d32def3c5c855b3e823a9db1f26d772f8146d6b91020a2fdfd905ce8048a73fad3aaf836fef8188c67602c374405e2ae8396c4ac46 + languageName: node + linkType: hard + +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: 10c0/b36fd0d4e3fef8456915fcf7742e58fbfcc12a17a018e0eb9501c9d5ef6893b596466f03b0564b81af29ff2538fd0aa4b9d54fe5ccbfb4c90ea50ad29fe2d221 + languageName: node + linkType: hard + +"cookie@npm:0.5.0": + version: 0.5.0 + resolution: "cookie@npm:0.5.0" + checksum: 10c0/c01ca3ef8d7b8187bae434434582288681273b5a9ed27521d4d7f9f7928fe0c920df0decd9f9d3bbd2d14ac432b8c8cf42b98b3bdd5bfe0e6edddeebebe8b61d + languageName: node + linkType: hard + +"cosmjs-types@npm:^0.7.1": + version: 0.7.2 + resolution: "cosmjs-types@npm:0.7.2" + dependencies: + long: "npm:^4.0.0" + protobufjs: "npm:~6.11.2" + checksum: 10c0/a85cbd6a57df9f381a7fea6ad6c80a7b05490e216a8e2029791211bc8193829bdb68d0a7126539d30e390b92640fd08753751c64a402b60c3f7a514cebf3133a + languageName: node + linkType: hard + +"cosmjs-types@npm:^0.8.0": + version: 0.8.0 + resolution: "cosmjs-types@npm:0.8.0" + dependencies: + long: "npm:^4.0.0" + protobufjs: "npm:~6.11.2" + checksum: 10c0/910a84d04d17c3a32120bda52063a582325b900e9bb2f5ddffee621c1d053bc562bedc0d39d20e12736445b66d897bdae085247f51c6ffd1ca0154f99b938214 + languageName: node + linkType: hard + +"cosmjs-types@npm:^0.9.0": + version: 0.9.0 + resolution: "cosmjs-types@npm:0.9.0" + checksum: 10c0/bc20f4293fb34629d7c5f96bafe533987f753df957ff68eb078d0128ae5a418320cb945024441769a07bb9bc5dde9d22b972fd40d485933e5706ea191c43727b + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0": + version: 7.0.5 + resolution: "cross-spawn@npm:7.0.5" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/aa82ce7ac0814a27e6f2b738c5a7cf1fa21a3558a1e42df449fc96541ba3ba731e4d3ecffa4435348808a86212f287c6f20a1ee551ef1ff95d01cfec5f434944 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + languageName: node + linkType: hard + +"currently-unhandled@npm:^0.4.1": + version: 0.4.1 + resolution: "currently-unhandled@npm:0.4.1" + dependencies: + array-find-index: "npm:^1.0.1" + checksum: 10c0/32d197689ec32f035910202c1abb0dc6424dce01d7b51779c685119b380d98535c110ffff67a262fc7e367612a7dfd30d3d3055f9a6634b5a9dd1302de7ef11c + languageName: node + linkType: hard + +"damerau-levenshtein@npm:^1.0.8": + version: 1.0.8 + resolution: "damerau-levenshtein@npm:1.0.8" + checksum: 10c0/4c2647e0f42acaee7d068756c1d396e296c3556f9c8314bac1ac63ffb236217ef0e7e58602b18bb2173deec7ec8e0cac8e27cccf8f5526666b4ff11a13ad54a3 + languageName: node + linkType: hard + +"date-time@npm:^3.1.0": + version: 3.1.0 + resolution: "date-time@npm:3.1.0" + dependencies: + time-zone: "npm:^1.0.0" + checksum: 10c0/aa3e2e930d74b0b9e90f69de7a16d3376e30f21f1f4ce9a2311d8fec32d760e776efea752dafad0ce188187265235229013036202be053fc2d7979813bfb6ded + languageName: node + linkType: hard + +"debug@npm:2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: "npm:2.0.0" + checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: "npm:^1.0.2" + checksum: 10c0/9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.2": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"del@npm:^6.1.1": + version: 6.1.1 + resolution: "del@npm:6.1.1" + dependencies: + globby: "npm:^11.0.1" + graceful-fs: "npm:^4.2.4" + is-glob: "npm:^4.0.1" + is-path-cwd: "npm:^2.2.0" + is-path-inside: "npm:^3.0.2" + p-map: "npm:^4.0.0" + rimraf: "npm:^3.0.2" + slash: "npm:^3.0.0" + checksum: 10c0/8a095c5ccade42c867a60252914ae485ec90da243d735d1f63ec1e64c1cfbc2b8810ad69a29ab6326d159d4fddaa2f5bad067808c42072351ec458efff86708f + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 + languageName: node + linkType: hard + +"depd@npm:2.0.0, depd@npm:~2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0": + version: 2.0.2 + resolution: "detect-libc@npm:2.0.2" + checksum: 10c0/a9f4ffcd2701525c589617d98afe5a5d0676c8ea82bcc4ed6f3747241b79f781d36437c59a5e855254c864d36a3e9f8276568b6b531c28d6e53b093a15703f11 + languageName: node + linkType: hard + +"deterministic-json@npm:^1.0.5": + version: 1.0.5 + resolution: "deterministic-json@npm:1.0.5" + dependencies: + json-stable-stringify: "npm:^1.0.1" + checksum: 10c0/e29679601cd3b05c73665529dcd0132b48797fd7dfbac6793238a479e82b5f3905114316fbb316332da58b4497e35df9aea77b41ff92fd74fe298a6f31b93d40 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.668": + version: 1.4.672 + resolution: "electron-to-chromium@npm:1.4.672" + checksum: 10c0/563580218f6a8d1501f4fab78a9f6e7f520037d9f5d69606b1474dab701f1117aab713600ab0f6fb725f0e4d6358576badbe858822b9c2248cdb8240be6a7f51 + languageName: node + linkType: hard + +"elliptic@npm:^6.5.4": + version: 6.5.4 + resolution: "elliptic@npm:6.5.4" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/5f361270292c3b27cf0843e84526d11dec31652f03c2763c6c2b8178548175ff5eba95341dd62baff92b2265d1af076526915d8af6cc9cb7559c44a62f8ca6e2 + languageName: node + linkType: hard + +"emittery@npm:^0.11.0": + version: 0.11.0 + resolution: "emittery@npm:0.11.0" + checksum: 10c0/16e1102a262903167ddaad43658532ae079baf7b154ba39e00c83f7f0f6ec36bf4fa1c90b22cf6b6ff1532d8013406383095681ff03ca77dc5d999614f83b20d + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"enabled@npm:2.0.x": + version: 2.0.0 + resolution: "enabled@npm:2.0.0" + checksum: 10c0/3b2c2af9bc7f8b9e291610f2dde4a75cf6ee52a68f4dd585482fbdf9a55d65388940e024e56d40bb03e05ef6671f5f53021fa8b72a20e954d7066ec28166713f + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + languageName: node + linkType: hard + +"enhance-visitors@npm:^1.0.0": + version: 1.0.0 + resolution: "enhance-visitors@npm:1.0.0" + dependencies: + lodash: "npm:^4.13.1" + checksum: 10c0/dda097f7a9a8ec5a1a999277d339b8885f7f29d7369607eca6941f64b8928227b34f10b3a1ee8cb9ebb94fe7e44616585af68eb739eecaf4d4f17278e9259522 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.22.4": + version: 1.22.4 + resolution: "es-abstract@npm:1.22.4" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + arraybuffer.prototype.slice: "npm:^1.0.3" + available-typed-arrays: "npm:^1.0.6" + call-bind: "npm:^1.0.7" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-set-tostringtag: "npm:^2.0.2" + es-to-primitive: "npm:^1.2.1" + function.prototype.name: "npm:^1.1.6" + get-intrinsic: "npm:^1.2.4" + get-symbol-description: "npm:^1.0.2" + globalthis: "npm:^1.0.3" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.1" + internal-slot: "npm:^1.0.7" + is-array-buffer: "npm:^3.0.4" + is-callable: "npm:^1.2.7" + is-negative-zero: "npm:^2.0.2" + is-regex: "npm:^1.1.4" + is-shared-array-buffer: "npm:^1.0.2" + is-string: "npm:^1.0.7" + is-typed-array: "npm:^1.1.13" + is-weakref: "npm:^1.0.2" + object-inspect: "npm:^1.13.1" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.5" + regexp.prototype.flags: "npm:^1.5.2" + safe-array-concat: "npm:^1.1.0" + safe-regex-test: "npm:^1.0.3" + string.prototype.trim: "npm:^1.2.8" + string.prototype.trimend: "npm:^1.0.7" + string.prototype.trimstart: "npm:^1.0.7" + typed-array-buffer: "npm:^1.0.1" + typed-array-byte-length: "npm:^1.0.0" + typed-array-byte-offset: "npm:^1.0.0" + typed-array-length: "npm:^1.0.4" + unbox-primitive: "npm:^1.0.2" + which-typed-array: "npm:^1.1.14" + checksum: 10c0/dc332c3a010c5e7b77b7ea8a4532ac455fa02e7bcabf996a47447165bafa72d0d99967407d0cf5dbbb5fbbf87f53cd8b706608ec70953523b8cd2b831b9a9d64 + languageName: node + linkType: hard + +"es-array-method-boxes-properly@npm:^1.0.0": + version: 1.0.0 + resolution: "es-array-method-boxes-properly@npm:1.0.0" + checksum: 10c0/4b7617d3fbd460d6f051f684ceca6cf7e88e6724671d9480388d3ecdd72119ddaa46ca31f2c69c5426a82e4b3091c1e81867c71dcdc453565cd90005ff2c382d + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/6bf3191feb7ea2ebda48b577f69bdfac7a2b3c9bcf97307f55fd6ef1bbca0b49f0c219a935aca506c993d8c5d8bddd937766cb760cd5e5a1071351f2df9f9aa4 + languageName: node + linkType: hard + +"es-errors@npm:^1.0.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-iterator-helpers@npm:^1.0.15": + version: 1.0.17 + resolution: "es-iterator-helpers@npm:1.0.17" + dependencies: + asynciterator.prototype: "npm:^1.0.0" + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.4" + es-errors: "npm:^1.3.0" + es-set-tostringtag: "npm:^2.0.2" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + globalthis: "npm:^1.0.3" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + internal-slot: "npm:^1.0.7" + iterator.prototype: "npm:^1.1.2" + safe-array-concat: "npm:^1.1.0" + checksum: 10c0/d0f281257e7165f068fd4fc3beb63d07ae4f18fbef02a2bbe4a39272b764164c1ce3311ae7c5429ac30003aef290fcdf569050e4a9ba3560e044440f68e9a47c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.2": + version: 2.0.2 + resolution: "es-set-tostringtag@npm:2.0.2" + dependencies: + get-intrinsic: "npm:^1.2.2" + has-tostringtag: "npm:^1.0.0" + hasown: "npm:^2.0.0" + checksum: 10c0/176d6bd1be31dd0145dcceee62bb78d4a5db7f81db437615a18308a6f62bcffe45c15081278413455e8cf0aad4ea99079de66f8de389605942dfdacbad74c2d5 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: "npm:^2.0.0" + checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: "npm:^1.1.4" + is-date-object: "npm:^1.0.1" + is-symbol: "npm:^1.0.2" + checksum: 10c0/0886572b8dc075cb10e50c0af62a03d03a68e1e69c388bd4f10c0649ee41b1fbb24840a1b7e590b393011b5cdbe0144b776da316762653685432df37d6de60f1 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.2 + resolution: "escalade@npm:3.1.2" + checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 + languageName: node + linkType: hard + +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 + languageName: node + linkType: hard + +"escape-string-regexp@npm:5.0.0, escape-string-regexp@npm:^5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-config-airbnb-base@npm:^15.0.0": + version: 15.0.0 + resolution: "eslint-config-airbnb-base@npm:15.0.0" + dependencies: + confusing-browser-globals: "npm:^1.0.10" + object.assign: "npm:^4.1.2" + object.entries: "npm:^1.1.5" + semver: "npm:^6.3.0" + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + checksum: 10c0/93639d991654414756f82ad7860aac30b0dc6797277b7904ddb53ed88a32c470598696bbc6c503e066414024d305221974d3769e6642de65043bedf29cbbd30f + languageName: node + linkType: hard + +"eslint-config-jessie@npm:^0.0.6": + version: 0.0.6 + resolution: "eslint-config-jessie@npm:0.0.6" + peerDependencies: + eslint: ">=6.7.2" + checksum: 10c0/425423d5535ab68c5640367ab4d9a2671f8b9cba6927daf8bd0d4df90dbb5c847fd0bcf2b3fd7e6cb292e91845c5806f61dd0eb42b2a5bcb133bc244e5897f1f + languageName: node + linkType: hard + +"eslint-config-prettier@npm:>=8.0.0": + version: 9.1.0 + resolution: "eslint-config-prettier@npm:9.1.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^8.8.0": + version: 8.10.0 + resolution: "eslint-config-prettier@npm:8.10.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 10c0/19f8c497d9bdc111a17a61b25ded97217be3755bbc4714477dfe535ed539dddcaf42ef5cf8bb97908b058260cf89a3d7c565cb0be31096cbcd39f4c2fa5fe43c + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: "npm:^3.2.7" + is-core-module: "npm:^2.13.0" + resolve: "npm:^1.22.4" + checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.8.0": + version: 2.8.0 + resolution: "eslint-module-utils@npm:2.8.0" + dependencies: + debug: "npm:^3.2.7" + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/c7a8d1a58d76ec8217a8fea49271ec8132d1b9390965a75f6a4ecbc9e5983d742195b46d2e4378231d2186801439fe1aa5700714b0bfd4eb17aac6e1b65309df + languageName: node + linkType: hard + +"eslint-plugin-ava@npm:^14.0.0": + version: 14.0.0 + resolution: "eslint-plugin-ava@npm:14.0.0" + dependencies: + enhance-visitors: "npm:^1.0.0" + eslint-utils: "npm:^3.0.0" + espree: "npm:^9.0.0" + espurify: "npm:^2.1.1" + import-modules: "npm:^2.1.0" + micro-spelling-correcter: "npm:^1.1.1" + pkg-dir: "npm:^5.0.0" + resolve-from: "npm:^5.0.0" + peerDependencies: + eslint: ">=8.26.0" + checksum: 10c0/2bedbac208b6b964dd5ed60e14af0de757f5d68133c38f73c6211b03be39af5f4b19f1f667ce19bc9c4252113c550a8cd48146061f7ff6ebb3551bc8b2217f67 + languageName: node + linkType: hard + +"eslint-plugin-escompat@npm:^3.3.3": + version: 3.4.0 + resolution: "eslint-plugin-escompat@npm:3.4.0" + dependencies: + browserslist: "npm:^4.21.0" + peerDependencies: + eslint: ">=5.14.1" + checksum: 10c0/df981270d3e7059caf739cbab94c837304381bd23192a001f137bd53f713fc8d3300aba1c301e54553b0e87355bfdbe649283395306e5ee3b6d0bc86aa189783 + languageName: node + linkType: hard + +"eslint-plugin-eslint-comments@npm:^3.1.2, eslint-plugin-eslint-comments@npm:^3.2.0": + version: 3.2.0 + resolution: "eslint-plugin-eslint-comments@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + ignore: "npm:^5.0.5" + peerDependencies: + eslint: ">=4.19.1" + checksum: 10c0/c71db824592dc8ea498021572a0bd33d763ef26126bdb3b84a027ca75a1adbe0894ec95024f7de39ef12308560e62cbf8af0d06ffe472be5ba8bd9169c928e96 + languageName: node + linkType: hard + +"eslint-plugin-filenames@npm:^1.3.2": + version: 1.3.2 + resolution: "eslint-plugin-filenames@npm:1.3.2" + dependencies: + lodash.camelcase: "npm:4.3.0" + lodash.kebabcase: "npm:4.1.1" + lodash.snakecase: "npm:4.1.1" + lodash.upperfirst: "npm:4.3.1" + peerDependencies: + eslint: "*" + checksum: 10c0/e7c3d4ce217d276edc626de855a486a968a84ef57ccce31466441db14fcd3e7aee7829b2818ce39bfd40f95b2c63c023c1b1180aedee737d3e964d22a17c6a40 + languageName: node + linkType: hard + +"eslint-plugin-github@npm:^4.8.0": + version: 4.10.1 + resolution: "eslint-plugin-github@npm:4.10.1" + dependencies: + "@github/browserslist-config": "npm:^1.0.0" + "@typescript-eslint/eslint-plugin": "npm:^6.0.0" + "@typescript-eslint/parser": "npm:^6.0.0" + aria-query: "npm:^5.3.0" + eslint-config-prettier: "npm:>=8.0.0" + eslint-plugin-escompat: "npm:^3.3.3" + eslint-plugin-eslint-comments: "npm:^3.2.0" + eslint-plugin-filenames: "npm:^1.3.2" + eslint-plugin-i18n-text: "npm:^1.0.1" + eslint-plugin-import: "npm:^2.25.2" + eslint-plugin-jsx-a11y: "npm:^6.7.1" + eslint-plugin-no-only-tests: "npm:^3.0.0" + eslint-plugin-prettier: "npm:^5.0.0" + eslint-rule-documentation: "npm:>=1.0.0" + jsx-ast-utils: "npm:^3.3.2" + prettier: "npm:^3.0.0" + svg-element-attributes: "npm:^1.3.1" + peerDependencies: + eslint: ^8.0.1 + bin: + eslint-ignore-errors: bin/eslint-ignore-errors.js + checksum: 10c0/421ee876a48378b639c70a99539c8f5d9dd636ae40a4ba4b1d991763d2cb9d245e3b7ad9fdaf7d7c7d50a9d5564d66cad52f860f534649ac512f90bfe6808cac + languageName: node + linkType: hard + +"eslint-plugin-i18n-text@npm:^1.0.1": + version: 1.0.1 + resolution: "eslint-plugin-i18n-text@npm:1.0.1" + peerDependencies: + eslint: ">=5.0.0" + checksum: 10c0/e276492731d6ee84510c780981542761c4c101e5f4fa9ade59323ef754399be582859d5a675171b098a6f4dd450f18b9b95eb8fc1779926320078e644413fc67 + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.25.2, eslint-plugin-import@npm:^2.25.3": + version: 2.29.1 + resolution: "eslint-plugin-import@npm:2.29.1" + dependencies: + array-includes: "npm:^3.1.7" + array.prototype.findlastindex: "npm:^1.2.3" + array.prototype.flat: "npm:^1.3.2" + array.prototype.flatmap: "npm:^1.3.2" + debug: "npm:^3.2.7" + doctrine: "npm:^2.1.0" + eslint-import-resolver-node: "npm:^0.3.9" + eslint-module-utils: "npm:^2.8.0" + hasown: "npm:^2.0.0" + is-core-module: "npm:^2.13.1" + is-glob: "npm:^4.0.3" + minimatch: "npm:^3.1.2" + object.fromentries: "npm:^2.0.7" + object.groupby: "npm:^1.0.1" + object.values: "npm:^1.1.7" + semver: "npm:^6.3.1" + tsconfig-paths: "npm:^3.15.0" + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: 10c0/5f35dfbf4e8e67f741f396987de9504ad125c49f4144508a93282b4ea0127e052bde65ab6def1f31b6ace6d5d430be698333f75bdd7dca3bc14226c92a083196 + languageName: node + linkType: hard + +"eslint-plugin-jsdoc@npm:^46.4.3": + version: 46.10.1 + resolution: "eslint-plugin-jsdoc@npm:46.10.1" + dependencies: + "@es-joy/jsdoccomment": "npm:~0.41.0" + are-docs-informative: "npm:^0.0.2" + comment-parser: "npm:1.4.1" + debug: "npm:^4.3.4" + escape-string-regexp: "npm:^4.0.0" + esquery: "npm:^1.5.0" + is-builtin-module: "npm:^3.2.1" + semver: "npm:^7.5.4" + spdx-expression-parse: "npm:^4.0.0" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + checksum: 10c0/2c9db7e621e6393c4e22c312e8d729a1c5698a31a62b0985421bb64741eb737d95b65ea0523ea87df3456ff4b3452ed015e463cc5a3b98646f2e7a3f68dd6e1a + languageName: node + linkType: hard + +"eslint-plugin-jsx-a11y@npm:^6.7.1": + version: 6.8.0 + resolution: "eslint-plugin-jsx-a11y@npm:6.8.0" + dependencies: + "@babel/runtime": "npm:^7.23.2" + aria-query: "npm:^5.3.0" + array-includes: "npm:^3.1.7" + array.prototype.flatmap: "npm:^1.3.2" + ast-types-flow: "npm:^0.0.8" + axe-core: "npm:=4.7.0" + axobject-query: "npm:^3.2.1" + damerau-levenshtein: "npm:^1.0.8" + emoji-regex: "npm:^9.2.2" + es-iterator-helpers: "npm:^1.0.15" + hasown: "npm:^2.0.0" + jsx-ast-utils: "npm:^3.3.5" + language-tags: "npm:^1.0.9" + minimatch: "npm:^3.1.2" + object.entries: "npm:^1.1.7" + object.fromentries: "npm:^2.0.7" + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: 10c0/199b883e526e6f9d7c54cb3f094abc54f11a1ec816db5fb6cae3b938eb0e503acc10ccba91ca7451633a9d0b9abc0ea03601844a8aba5fe88c5e8897c9ac8f49 + languageName: node + linkType: hard + +"eslint-plugin-no-only-tests@npm:^3.0.0": + version: 3.1.0 + resolution: "eslint-plugin-no-only-tests@npm:3.1.0" + checksum: 10c0/c710ae04094cfa4695c44efe8d5036eb881893157accf3564b96f3ee5626edef855c93ec1801557e888e390e1892775da79d9564e1a33b83941fba994725b9cd + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^5.0.0": + version: 5.1.3 + resolution: "eslint-plugin-prettier@npm:5.1.3" + dependencies: + prettier-linter-helpers: "npm:^1.0.0" + synckit: "npm:^0.8.6" + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: "*" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + checksum: 10c0/f45d5fc1fcfec6b0cf038a7a65ddd10a25df4fe3f9e1f6b7f0d5100e66f046a26a2492e69ee765dddf461b93c114cf2e1eb18d4970aafa6f385448985c136e09 + languageName: node + linkType: hard + +"eslint-rule-documentation@npm:>=1.0.0": + version: 1.0.23 + resolution: "eslint-rule-documentation@npm:1.0.23" + checksum: 10c0/76e273c14a50d74345959a30aacdb06698e96713fffcb22f67c64094d9ebd8ec62d6e0f2ceebb1c7465dc219e361b3c8937c517e9e723f80236c15c1e71a24b8 + languageName: node + linkType: hard + +"eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + languageName: node + linkType: hard + +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" + dependencies: + eslint-visitor-keys: "npm:^2.0.0" + peerDependencies: + eslint: ">=5" + checksum: 10c0/45aa2b63667a8d9b474c98c28af908d0a592bed1a4568f3145cd49fb5d9510f545327ec95561625290313fe126e6d7bdfe3fdbdb6f432689fab6b9497d3bfb52 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^1.0.0": + version: 1.3.0 + resolution: "eslint-visitor-keys@npm:1.3.0" + checksum: 10c0/10c91fdbbe36810dd4308e57f9a8bc7177188b2a70247e54e3af1fa05ebc66414ae6fd4ce3c6c6821591f43a556e9037bc6b071122e099b5f8b7d2f76df553e3 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: 10c0/9f0e3a2db751d84067d15977ac4b4472efd6b303e369e6ff241a99feac04da758f46d5add022c33d06b53596038dbae4b4aceb27c7e68b8dfc1055b35e495787 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint@npm:^8.47.0": + version: 8.56.0 + resolution: "eslint@npm:8.56.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^2.1.4" + "@eslint/js": "npm:8.56.0" + "@humanwhocodes/config-array": "npm:^0.11.13" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + "@ungap/structured-clone": "npm:^1.2.0" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + doctrine: "npm:^3.0.0" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + globals: "npm:^13.19.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + js-yaml: "npm:^4.1.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10c0/2be598f7da1339d045ad933ffd3d4742bee610515cd2b0d9a2b8b729395a01d4e913552fff555b559fccaefd89d7b37632825789d1b06470608737ae69ab43fb + languageName: node + linkType: hard + +"esm@github:agoric-labs/esm#Agoric-built": + version: 3.2.25 + resolution: "esm@https://github.com/agoric-labs/esm.git#commit=3603726ad4636b2f865f463188fcaade6375638e" + checksum: 10c0/fc1e112a3a681e7b4152d4f5c76dd5aa9e30496d2020490ffa0fb61aaf57d1e12dae0c1074fdd2e0f08949ab2df7e00e750262356781f072e4119955ee10b754 + languageName: node + linkType: hard + +"espree@npm:^9.0.0, espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + +"espurify@npm:^2.1.1": + version: 2.1.1 + resolution: "espurify@npm:2.1.1" + checksum: 10c0/8bd15ca07546710bb85d8aca4fec4173597a57eafe3228e1130d9f601613dcf3849ac8533aa6f3c80d293509111da0a2387208062fb32b8c1b78746deb1b1e76 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2, esquery@npm:^1.5.0": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/a084bd049d954cc88ac69df30534043fb2aee5555b56246493f42f27d1e168f00d9e5d4192e46f10290d312dc30dc7d58994d61a609c579c1219d636996f9213 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"estree-walker@npm:^1.0.1": + version: 1.0.1 + resolution: "estree-walker@npm:1.0.1" + checksum: 10c0/fa9e5f8c1bbe8d01e314c0f03067b64a4f22d4c58410fc5237060d0c15b81e58c23921c41acc60abbdab490f1fdfcbd6408ede2d03ca704454272e0244d61a55 + languageName: node + linkType: hard + +"estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af + languageName: node + linkType: hard + +"esutils@npm:^2.0.2, esutils@npm:^2.0.3": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.0": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b + languageName: node + linkType: hard + +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"express@npm:^4.17.1": + version: 4.18.2 + resolution: "express@npm:4.18.2" + dependencies: + accepts: "npm:~1.3.8" + array-flatten: "npm:1.1.1" + body-parser: "npm:1.20.1" + content-disposition: "npm:0.5.4" + content-type: "npm:~1.0.4" + cookie: "npm:0.5.0" + cookie-signature: "npm:1.0.6" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + finalhandler: "npm:1.2.0" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + merge-descriptors: "npm:1.0.1" + methods: "npm:~1.1.2" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + path-to-regexp: "npm:0.1.7" + proxy-addr: "npm:~2.0.7" + qs: "npm:6.11.0" + range-parser: "npm:~1.2.1" + safe-buffer: "npm:5.2.1" + send: "npm:0.18.0" + serve-static: "npm:1.15.0" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + type-is: "npm:~1.6.18" + utils-merge: "npm:1.0.1" + vary: "npm:~1.1.2" + checksum: 10c0/75af556306b9241bc1d7bdd40c9744b516c38ce50ae3210658efcbf96e3aed4ab83b3432f06215eae5610c123bc4136957dc06e50dfc50b7d4d775af56c4c59c + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: "npm:^0.7.0" + iconv-lite: "npm:^0.4.24" + tmp: "npm:^0.0.33" + checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 + languageName: node + linkType: hard + +"fast-check@npm:^3.0.0": + version: 3.15.1 + resolution: "fast-check@npm:3.15.1" + dependencies: + pure-rand: "npm:^6.0.0" + checksum: 10c0/07f028e3918ce201615c08073cff176babf4b57013bf157c91dbddd4f7759661134448097e7ed6660ede3764951edb4e18da9767fa0a0bbd6ce0f39ccc8cd75b + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2, fast-diff@npm:^1.2.0": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fast-safe-stringify@npm:2.0.4": + version: 2.0.4 + resolution: "fast-safe-stringify@npm:2.0.4" + checksum: 10c0/5e4fbafe8b8c4a1681c2ab259ed8ce6672fc209683a141876f020c36a2cbec73bfe25c417c269f439797020996d04ed2d7c4c6b2c5cf393d6febbf7f4d8a5f53 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 + languageName: node + linkType: hard + +"fecha@npm:^4.2.0": + version: 4.2.3 + resolution: "fecha@npm:4.2.3" + checksum: 10c0/0e895965959cf6a22bb7b00f0bf546f2783836310f510ddf63f463e1518d4c96dec61ab33fdfd8e79a71b4856a7c865478ce2ee8498d560fe125947703c9b1cf + languageName: node + linkType: hard + +"figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 + languageName: node + linkType: hard + +"figures@npm:^4.0.1": + version: 4.0.1 + resolution: "figures@npm:4.0.1" + dependencies: + escape-string-regexp: "npm:^5.0.0" + is-unicode-supported: "npm:^1.2.0" + checksum: 10c0/734364a5b2ac24a4e639ece4dafcf89e21530bdc9b64af480b590e998a28064ff0a9cd3b3576ea71e0a19455872a85a7d50cd6938f11b4080da7d624f3ab3017 + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: 10c0/3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/7cdad7d426ffbaadf45aeb5d15ec675bbd77f7597ad5399e3d2766987ed20bda24d5fac64b3ee79d93276f5865608bb22344a26b9b1ae6c4d00bd94bf611623f + languageName: node + linkType: hard + +"finalhandler@npm:1.2.0": + version: 1.2.0 + resolution: "finalhandler@npm:1.2.0" + dependencies: + debug: "npm:2.6.9" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + statuses: "npm:2.0.1" + unpipe: "npm:~1.0.0" + checksum: 10c0/64b7e5ff2ad1fcb14931cd012651631b721ce657da24aedb5650ddde9378bf8e95daa451da43398123f5de161a81e79ff5affe4f9f2a6d2df4a813d6d3e254b7 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"find-up@npm:^6.0.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: "npm:^7.1.0" + path-exists: "npm:^5.0.0" + checksum: 10c0/07e0314362d316b2b13f7f11ea4692d5191e718ca3f7264110127520f3347996349bf9e16805abae3e196805814bc66ef4bff2b8904dc4a6476085fc9b0eba07 + languageName: node + linkType: hard + +"find-yarn-workspace-root@npm:^2.0.0": + version: 2.0.0 + resolution: "find-yarn-workspace-root@npm:2.0.0" + dependencies: + micromatch: "npm:^4.0.2" + checksum: 10c0/b0d3843013fbdaf4e57140e0165889d09fa61745c9e85da2af86e54974f4cc9f1967e40f0d8fc36a79d53091f0829c651d06607d552582e53976f3cd8f4e5689 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.2.9 + resolution: "flatted@npm:3.2.9" + checksum: 10c0/5c91c5a0a21bbc0b07b272231e5b4efe6b822bcb4ad317caf6bb06984be4042a9e9045026307da0fdb4583f1f545e317a67ef1231a59e71f7fced3cc429cfc53 + languageName: node + linkType: hard + +"fn.name@npm:1.x.x": + version: 1.1.0 + resolution: "fn.name@npm:1.1.0" + checksum: 10c0/8ad62aa2d4f0b2a76d09dba36cfec61c540c13a0fd72e5d94164e430f987a7ce6a743112bbeb14877c810ef500d1f73d7f56e76d029d2e3413f20d79e3460a9a + languageName: node + linkType: hard + +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0": + version: 1.15.5 + resolution: "follow-redirects@npm:1.15.5" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/418d71688ceaf109dfd6f85f747a0c75de30afe43a294caa211def77f02ef19865b547dfb73fde82b751e1cc507c06c754120b848fe5a7400b0a669766df7615 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: "npm:^1.1.3" + checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 + languageName: node + linkType: hard + +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: 10c0/9b67c3fac86acdbc9ae47ba1ddd5f2f81526fa4c8226863ede5600a3f7c7416ef451f6f1e240a3cc32d0fd79fcfe6beb08fd0da454f360032bde70bf80afbb33 + languageName: node + linkType: hard + +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 + languageName: node + linkType: hard + +"fs-extra@npm:^9.0.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: "npm:^1.0.0" + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + functions-have-names: "npm:^1.2.3" + checksum: 10c0/9eae11294905b62cb16874adb4fc687927cda3162285e0ad9612e6a1d04934005d46907362ea9cdb7428edce05a2f2c3dabc3b2d21e9fd343e9bb278230ad94b + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca + languageName: node + linkType: hard + +"gauge@npm:^3.0.0": + version: 3.0.2 + resolution: "gauge@npm:3.0.2" + dependencies: + aproba: "npm:^1.0.3 || ^2.0.0" + color-support: "npm:^1.1.2" + console-control-strings: "npm:^1.0.0" + has-unicode: "npm:^2.0.1" + object-assign: "npm:^4.1.1" + signal-exit: "npm:^3.0.0" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + wide-align: "npm:^1.1.2" + checksum: 10c0/75230ccaf216471e31025c7d5fcea1629596ca20792de50c596eb18ffb14d8404f927cd55535aab2eeecd18d1e11bd6f23ec3c2e9878d2dda1dc74bccc34b913 + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: "npm:^1.0.3 || ^2.0.0" + color-support: "npm:^1.1.3" + console-control-strings: "npm:^1.1.0" + has-unicode: "npm:^2.0.1" + signal-exit: "npm:^3.0.7" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + wide-align: "npm:^1.1.5" + checksum: 10c0/ef10d7981113d69225135f994c9f8c4369d945e64a8fc721d655a3a38421b738c9fe899951721d1b47b73c41fdb5404ac87cc8903b2ecbed95d2800363e7e58c + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.0" + checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7 + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/867be6d63f5e0eb026cb3b0ef695ec9ecf9310febb041072d2e142f260bd91ced9eeb426b3af98791d1064e324e653424afa6fd1af17dee373bea48ae03162bc + languageName: node + linkType: hard + +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"glob@npm:^8.0.1": + version: 8.1.0 + resolution: "glob@npm:8.1.0" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^5.0.1" + once: "npm:^1.3.0" + checksum: 10c0/cb0b5cab17a59c57299376abe5646c7070f8acb89df5595b492dba3bfb43d301a46c01e5695f01154e6553168207cb60d4eaf07d3be4bc3eb9b0457c5c561d0f + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"globalthis@npm:^1.0.1, globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" + dependencies: + define-properties: "npm:^1.1.3" + checksum: 10c0/0db6e9af102a5254630351557ac15e6909bc7459d3e3f6b001e59fe784c96d31108818f032d9095739355a88467459e6488ff16584ee6250cd8c27dec05af4b0 + languageName: node + linkType: hard + +"globby@npm:^11.0.1, globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + +"globby@npm:^13.1.1": + version: 13.2.2 + resolution: "globby@npm:13.2.2" + dependencies: + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.3.0" + ignore: "npm:^5.2.4" + merge2: "npm:^1.4.1" + slash: "npm:^4.0.0" + checksum: 10c0/a8d7cc7cbe5e1b2d0f81d467bbc5bc2eac35f74eaded3a6c85fc26d7acc8e6de22d396159db8a2fc340b8a342e74cac58de8f4aee74146d3d146921a76062664 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.1.3" + checksum: 10c0/505c05487f7944c552cee72087bf1567debb470d4355b1335f2c262d218ebbff805cd3715448fe29b4b380bae6912561d0467233e4165830efd28da241418c63 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 10c0/724eb1485bfa3cdff6f18d95130aa190561f00b3fcf9f19dc640baf8176b5917c143b81ec2123f8cddb6c05164a198c94b13e1377c497705ccc8e1a80306e83b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.1, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: 10c0/c8a8fe411f810b23a564bd5546a8f3f0fff6f1b692740eb7a2fdc9df716ef870040806891e2f23ff4653f1083e3895bf12088703dd1a0eac3d9202d3a4768cd0 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.1": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c + languageName: node + linkType: hard + +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.1": + version: 2.0.1 + resolution: "hasown@npm:2.0.1" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/9e27e70e8e4204f4124c8f99950d1ba2b1f5174864fd39ff26da190f9ea6488c1b3927dcc64981c26d1f637a971783c9489d62c829d393ea509e6f1ba20370bb + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: "npm:^1.0.3" + minimalistic-assert: "npm:^1.0.0" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/f3d9ba31b40257a573f162176ac5930109816036c59a09f901eb2ffd7e5e705c6832bedfff507957125f2086a0ab8f853c0df225642a88bf1fcaea945f20600d + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: "npm:2.0.0" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + toidentifier: "npm:1.0.1" + checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": "npm:2" + agent-base: "npm:6" + debug: "npm:4" + checksum: 10c0/32a05e413430b2c1e542e5c74b38a9f14865301dd69dff2e53ddb684989440e3d2ce0c4b64d25eb63cf6283e6265ff979a61cf93e3ca3d23047ddfdc8df34a32 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"http-proxy-middleware@npm:^2.0.6": + version: 2.0.6 + resolution: "http-proxy-middleware@npm:2.0.6" + dependencies: + "@types/http-proxy": "npm:^1.17.8" + http-proxy: "npm:^1.18.1" + is-glob: "npm:^4.0.1" + is-plain-obj: "npm:^3.0.0" + micromatch: "npm:^4.0.2" + peerDependencies: + "@types/express": ^4.17.13 + peerDependenciesMeta: + "@types/express": + optional: true + checksum: 10c0/25a0e550dd1900ee5048a692e0e9b2b6339d06d487a705d90c47e359e9c6561d648cd7862d001d090e651c9efffa1b6e5160fcf1f299b5fa4935f76e9754eb11 + languageName: node + linkType: hard + +"http-proxy@npm:^1.18.1": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: "npm:^4.0.0" + follow-redirects: "npm:^1.0.0" + requires-port: "npm:^1.0.0" + checksum: 10c0/148dfa700a03fb421e383aaaf88ac1d94521dfc34072f6c59770528c65250983c2e4ec996f2f03aa9f3fe46cd1270a593126068319311e3e8d9e610a37533e94 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: "npm:6" + debug: "npm:4" + checksum: 10c0/6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: "npm:^2.0.0" + checksum: 10c0/f34a2c20161d02303c2807badec2f3b49cbfbbb409abd4f95a07377ae01cfe6b59e3d15ac609cffcd8f2521f0eb37b7e1091acf65da99aa2a4f1ad63c21e7e7a + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"ignore-by-default@npm:^2.1.0": + version: 2.1.0 + resolution: "ignore-by-default@npm:2.1.0" + checksum: 10c0/3a6040dac25ed9da39dee73bf1634fdd1e15b0eb7cf52a6bdec81c310565782d8811c104ce40acb3d690d61c5fc38a91c78e6baee830a8a2232424dbc6b66981 + languageName: node + linkType: hard + +"ignore@npm:^5.0.5, ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + +"import-meta-resolve@npm:^2.2.1": + version: 2.2.2 + resolution: "import-meta-resolve@npm:2.2.2" + checksum: 10c0/80873aebf0d2a66e824e278fb6cbb16a6660f86df49b367404e5de80928720ecb44f643243b46dc5c5fae506abb666ef54d6f281b45ee0f1034951acb2261eb5 + languageName: node + linkType: hard + +"import-modules@npm:^2.1.0": + version: 2.1.0 + resolution: "import-modules@npm:2.1.0" + checksum: 10c0/fe5bf74392043625d8b7308fe989aa7dddb341d0918f20e307a7f40cb83897ba6b6680f1d171159b738bacf1701b1672a405f058f20e769b280c1663cadf2dbe + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: 10c0/8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 + languageName: node + linkType: hard + +"infer-owner@npm:^1.0.4": + version: 1.0.4 + resolution: "infer-owner@npm:1.0.4" + checksum: 10c0/a7b241e3149c26e37474e3435779487f42f36883711f198c45794703c7556bc38af224088bd4d1a221a45b8208ae2c2bcf86200383621434d0c099304481c5b9 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"inquirer@npm:^8.2.2": + version: 8.2.6 + resolution: "inquirer@npm:8.2.6" + dependencies: + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.1.1" + cli-cursor: "npm:^3.1.0" + cli-width: "npm:^3.0.0" + external-editor: "npm:^3.0.3" + figures: "npm:^3.0.0" + lodash: "npm:^4.17.21" + mute-stream: "npm:0.0.8" + ora: "npm:^5.4.1" + run-async: "npm:^2.4.0" + rxjs: "npm:^7.5.5" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + through: "npm:^2.3.6" + wrap-ansi: "npm:^6.0.1" + checksum: 10c0/eb5724de1778265323f3a68c80acfa899378cb43c24cdcb58661386500e5696b6b0b6c700e046b7aa767fe7b4823c6f04e6ddc268173e3f84116112529016296 + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.0" + side-channel: "npm:^1.0.4" + checksum: 10c0/f8b294a4e6ea3855fc59551bbf35f2b832cf01fd5e6e2a97f5c201a071cc09b49048f856e484b67a6c721da5e55736c5b6ddafaf19e2dbeb4a3ff1821680de6c + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: 10c0/0486e775047971d3fdb5fb4f063829bac45af299ae0b82dcf3afa2145338e08290563a2a70f34b732d795ecc8311902e541a8530eeb30d75860a78ff4e94ce2a + languageName: node + linkType: hard + +"irregular-plurals@npm:^3.3.0": + version: 3.5.0 + resolution: "irregular-plurals@npm:3.5.0" + checksum: 10c0/7c033bbe7325e5a6e0a26949cc6863b6ce273403d4cd5b93bd99b33fecb6605b0884097c4259c23ed0c52c2133bf7d1cdcdd7a0630e8c325161fe269b3447918 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.1" + checksum: 10c0/42a49d006cc6130bc5424eae113e948c146f31f9d24460fc0958f855d9d810e6fd2e4519bf19aab75179af9c298ea6092459d8cafdec523cd19e529b26eab860 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 + languageName: node + linkType: hard + +"is-async-function@npm:^2.0.0": + version: 2.0.0 + resolution: "is-async-function@npm:2.0.0" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/787bc931576aad525d751fc5ce211960fe91e49ac84a5c22d6ae0bc9541945fbc3f686dc590c3175722ce4f6d7b798a93f6f8ff4847fdb2199aea6f4baf5d668 + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: "npm:^1.0.1" + checksum: 10c0/eb9c88e418a0d195ca545aff2b715c9903d9b0a5033bc5922fec600eb0c3d7b1ee7f882dbf2e0d5a6e694e42391be3683e4368737bd3c4a77f8ac293e7773696 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/6090587f8a8a8534c0f816da868bc94f32810f08807aa72fa7e79f7e11c466d281486ffe7a788178809c2aa71fe3e700b167fe80dd96dad68026bfff8ebf39f7 + languageName: node + linkType: hard + +"is-builtin-module@npm:^3.1.0, is-builtin-module@npm:^3.2.1": + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" + dependencies: + builtin-modules: "npm:^3.3.0" + checksum: 10c0/5a66937a03f3b18803381518f0ef679752ac18cdb7dd53b5e23ee8df8d440558737bd8dcc04d2aae555909d2ecb4a81b5c0d334d119402584b61e6a003e31af1 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" + dependencies: + hasown: "npm:^2.0.0" + checksum: 10c0/2cba9903aaa52718f11c4896dabc189bab980870aae86a62dc0d5cedb546896770ee946fb14c84b7adf0735f5eaea4277243f1b95f5cefa90054f92fbcac2518 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/eed21e5dcc619c48ccef804dfc83a739dbb2abee6ca202838ee1bd5f760fe8d8a93444f0d49012ad19bb7c006186e2884a1b92f6e1c056da7fd23d0a9ad5992e + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc + languageName: node + linkType: hard + +"is-error@npm:^2.2.2": + version: 2.2.2 + resolution: "is-error@npm:2.2.2" + checksum: 10c0/475d3463968bf16e94485555d7cb7a879ed68685e08d365a3370972e626054f1846ebbb3934403091e06682445568601fe919e41646096e5007952d0c1f4fd9b + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-finalizationregistry@npm:^1.0.2": + version: 1.0.2 + resolution: "is-finalizationregistry@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + checksum: 10c0/81caecc984d27b1a35c68741156fc651fb1fa5e3e6710d21410abc527eb226d400c0943a167922b2e920f6b3e58b0dede9aa795882b038b85f50b3a4b877db86 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 10c0/df2a717e813567db0f659c306d61f2f804d480752526886954a2a3e2246c7745fd07a52b5fecf2b68caf0a6c79dcdace6166fdf29cc76ed9975cc334f0a018b8 + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.10": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/df03514df01a6098945b5a0cfa1abff715807c8e72f57c49a0686ad54b3b74d394e2d8714e6f709a71eb00c9630d48e73ca1796c1ccc84ac95092c1fecc0d98b + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 10c0/dd47904dbf286cd20aa58c5192161be1a67138485b9836d5a70433b21a45442e9611b8498b8ab1f839fc962c7620667a50535fdfb4a6bc7989b8858645c06b4d + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-map@npm:^2.0.1": + version: 2.0.2 + resolution: "is-map@npm:2.0.2" + checksum: 10c0/119ff9137a37fd131a72fab3f4ab8c9d6a24b0a1ee26b4eff14dc625900d8675a97785eea5f4174265e2006ed076cc24e89f6e57ebd080a48338d914ec9168a5 + languageName: node + linkType: hard + +"is-module@npm:^1.0.0": + version: 1.0.0 + resolution: "is-module@npm:1.0.0" + checksum: 10c0/795a3914bcae7c26a1c23a1e5574c42eac13429625045737bf3e324ce865c0601d61aee7a5afbca1bee8cb300c7d9647e7dc98860c9bdbc3b7fdc51d8ac0bffc + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.2": + version: 2.0.2 + resolution: "is-negative-zero@npm:2.0.2" + checksum: 10c0/eda024c158f70f2017f3415e471b818d314da5ef5be68f801b16314d4a4b6304a74cbed778acf9e2f955bb9c1c5f2935c1be0c7c99e1ad12286f45366217b6a3 + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/aad266da1e530f1804a2b7bd2e874b4869f71c98590b3964f9d06cc9869b18f8d1f4778f838ecd2a11011bce20aeecb53cb269ba916209b79c24580416b74b1b + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-path-cwd@npm:^2.2.0": + version: 2.2.0 + resolution: "is-path-cwd@npm:2.2.0" + checksum: 10c0/afce71533a427a759cd0329301c18950333d7589533c2c90205bd3fdcf7b91eb92d1940493190567a433134d2128ec9325de2fd281e05be1920fbee9edd22e0a + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + +"is-plain-obj@npm:^3.0.0": + version: 3.0.0 + resolution: "is-plain-obj@npm:3.0.0" + checksum: 10c0/8e6483bfb051d42ec9c704c0ede051a821c6b6f9a6c7a3e3b55aa855e00981b0580c8f3b1f5e2e62649b39179b1abfee35d6f8086d999bfaa32c1908d29b07bc + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c + languageName: node + linkType: hard + +"is-promise@npm:^4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: 10c0/ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503 + languageName: node + linkType: hard + +"is-reference@npm:^1.2.1": + version: 1.2.1 + resolution: "is-reference@npm:1.2.1" + dependencies: + "@types/estree": "npm:*" + checksum: 10c0/7dc819fc8de7790264a0a5d531164f9f5b9ef5aa1cd05f35322d14db39c8a2ec78fd5d4bf57f9789f3ddd2b3abeea7728432b759636157a42db12a9e8c3b549b + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/bb72aae604a69eafd4a82a93002058c416ace8cde95873589a97fc5dac96a6c6c78a9977d487b7b95426a8f5073969124dd228f043f9f604f041f32fcc465fc1 + languageName: node + linkType: hard + +"is-set@npm:^2.0.1": + version: 2.0.2 + resolution: "is-set@npm:2.0.2" + checksum: 10c0/5f8bd1880df8c0004ce694e315e6e1e47a3452014be792880bb274a3b2cdb952fdb60789636ca6e084c7947ca8b7ae03ccaf54c93a7fcfed228af810559e5432 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "is-shared-array-buffer@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + checksum: 10c0/cfeee6f171f1b13e6cbc6f3b6cc44e192b93df39f3fcb31aa66ffb1d2df3b91e05664311659f9701baba62f5e98c83b0673c628e7adc30f55071c4874fcdccec + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/905f805cbc6eedfa678aaa103ab7f626aac9ebbdc8737abb5243acaa61d9820f8edc5819106b8fcd1839e33db21de9f0116ae20de380c8382d16dc2a601921f6 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: "npm:^1.0.2" + checksum: 10c0/9381dd015f7c8906154dbcbf93fad769de16b4b961edc94f88d26eb8c555935caa23af88bda0c93a18e65560f6d7cca0fd5a3f8a8e1df6f1abbb9bead4502ef7 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.9": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: "npm:^1.1.14" + checksum: 10c0/fa5cb97d4a80e52c2cc8ed3778e39f175a1a2ae4ddf3adae3187d69586a1fd57cfa0b095db31f66aa90331e9e3da79184cea9c6abdcd1abc722dc3c3edd51cca + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: 10c0/00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^1.2.0": + version: 1.3.0 + resolution: "is-unicode-supported@npm:1.3.0" + checksum: 10c0/b8674ea95d869f6faabddc6a484767207058b91aea0250803cbf1221345cb0c56f466d4ecea375dc77f6633d248d33c47bd296fb8f4cdba0b4edba8917e83d8a + languageName: node + linkType: hard + +"is-weakmap@npm:^2.0.1": + version: 2.0.1 + resolution: "is-weakmap@npm:2.0.1" + checksum: 10c0/9c9fec9efa7bf5030a4a927f33fff2a6976b93646259f92b517d3646c073cc5b98283a162ce75c412b060a46de07032444b530f0a4c9b6e012ef8f1741c3a987 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + checksum: 10c0/1545c5d172cb690c392f2136c23eec07d8d78a7f57d0e41f10078aa4f5daf5d7f57b6513a67514ab4f073275ad00c9822fc8935e00229d0a2089e1c02685d4b1 + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.1": + version: 2.0.2 + resolution: "is-weakset@npm:2.0.2" + dependencies: + call-bind: "npm:^1.0.2" + get-intrinsic: "npm:^1.1.1" + checksum: 10c0/ef5136bd446ae4603229b897f73efd0720c6ab3ec6cc05c8d5c4b51aa9f95164713c4cad0a22ff1fedf04865ff86cae4648bc1d5eead4b6388e1150525af1cc1 + languageName: node + linkType: hard + +"is-wsl@npm:^2.1.1": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: "npm:^2.0.0" + checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: 10c0/7cb90dc2f0eb409825558982fb15d7c1d757a88595efbab879592f9d2b63820d6bbfb5571ab8abe36c715946e165a413a99f6aafd9f40ab1f514d73487bc9996 + languageName: node + linkType: hard + +"iterator.prototype@npm:^1.1.2": + version: 1.1.2 + resolution: "iterator.prototype@npm:1.1.2" + dependencies: + define-properties: "npm:^1.2.1" + get-intrinsic: "npm:^1.2.1" + has-symbols: "npm:^1.0.3" + reflect.getprototypeof: "npm:^1.0.4" + set-function-name: "npm:^2.0.1" + checksum: 10c0/a32151326095e916f306990d909f6bbf23e3221999a18ba686419535dcd1749b10ded505e89334b77dc4c7a58a8508978f0eb16c2c8573e6d412eb7eb894ea79 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jessie.js@npm:^0.3.2": + version: 0.3.3 + resolution: "jessie.js@npm:0.3.3" + dependencies: + "@endo/far": "npm:^0.2.3" + checksum: 10c0/883897ce3e8e8608f324efcffac9a1e445315cadd88935f2d09bad7fb180806ae1352e7332e99c84b7c097f9ac03bd7cb45dfc46a5d276871031d0c43f9cad51 + languageName: node + linkType: hard + +"jessie.js@npm:^0.3.4": + version: 0.3.4 + resolution: "jessie.js@npm:0.3.4" + dependencies: + "@endo/far": "npm:^1.0.0" + checksum: 10c0/853ab3f8a0e30df11742882f5e11479d1303033a5a203a247d8ffbf4c6f3f3d4bcbefa53084ae4632e6ab106e348f23dc988280486cbeaaf5d16487fa3d40e96 + languageName: node + linkType: hard + +"js-string-escape@npm:^1.0.1": + version: 1.0.1 + resolution: "js-string-escape@npm:1.0.1" + checksum: 10c0/2c33b9ff1ba6b84681c51ca0997e7d5a1639813c95d5b61cb7ad47e55cc28fa4a0b1935c3d218710d8e6bcee5d0cd8c44755231e3a4e45fc604534d9595a3628 + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:4.0.0": + version: 4.0.0 + resolution: "js-yaml@npm:4.0.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/ef8489b87d9796b45df9f0bf3eefbb343b5063e39a9911d7b8ddbd4518cafaf73b49150d1f5865f54ee68719642ff0ab86110b9a332ff88bb05cd3bcf3039de1 + languageName: node + linkType: hard + +"js-yaml@npm:^3.14.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsdoc-type-pratt-parser@npm:~4.0.0": + version: 4.0.0 + resolution: "jsdoc-type-pratt-parser@npm:4.0.0" + checksum: 10c0/b23ef7bbbe2f56d72630d1c5a233dc9fecaff399063d373c57bef136908c1b05e723dac107177303c03ccf8d75aa51507510b282aa567600477479c5ea0c36d1 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json-stable-stringify@npm:^1.0.1, json-stable-stringify@npm:^1.0.2": + version: 1.1.1 + resolution: "json-stable-stringify@npm:1.1.1" + dependencies: + call-bind: "npm:^1.0.5" + isarray: "npm:^2.0.5" + jsonify: "npm:^0.0.1" + object-keys: "npm:^1.1.1" + checksum: 10c0/3801e3eeccbd030afb970f54bea690a079cfea7d9ed206a1b17ca9367f4b7772c764bf77a48f03e56b50e5f7ee7d11c52339fe20d8d7ccead003e4ca69e4cfde + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: "npm:^1.2.0" + bin: + json5: lib/cli.js + checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 + languageName: node + linkType: hard + +"jsonify@npm:^0.0.1": + version: 0.0.1 + resolution: "jsonify@npm:0.0.1" + checksum: 10c0/7f5499cdd59a0967ed35bda48b7cec43d850bbc8fb955cdd3a1717bb0efadbe300724d5646de765bb7a99fc1c3ab06eb80d93503c6faaf99b4ff50a3326692f6 + languageName: node + linkType: hard + +"jsx-ast-utils@npm:^3.3.2, jsx-ast-utils@npm:^3.3.5": + version: 3.3.5 + resolution: "jsx-ast-utils@npm:3.3.5" + dependencies: + array-includes: "npm:^3.1.6" + array.prototype.flat: "npm:^1.3.1" + object.assign: "npm:^4.1.4" + object.values: "npm:^1.1.6" + checksum: 10c0/a32679e9cb55469cb6d8bbc863f7d631b2c98b7fc7bf172629261751a6e7bc8da6ae374ddb74d5fbd8b06cf0eb4572287b259813d92b36e384024ed35e4c13e1 + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"klaw-sync@npm:^6.0.0": + version: 6.0.0 + resolution: "klaw-sync@npm:6.0.0" + dependencies: + graceful-fs: "npm:^4.1.11" + checksum: 10c0/00d8e4c48d0d699b743b3b028e807295ea0b225caf6179f51029e19783a93ad8bb9bccde617d169659fbe99559d73fb35f796214de031d0023c26b906cecd70a + languageName: node + linkType: hard + +"kread-contract@workspace:contract": + version: 0.0.0-use.local + resolution: "kread-contract@workspace:contract" + dependencies: + "@agoric/assert": "npm:agoric-upgrade-11" + "@agoric/cosmic-proto": "npm:agoric-upgrade-11" + "@agoric/deploy-script-support": "npm:agoric-upgrade-11" + "@agoric/ertp": "npm:agoric-upgrade-11" + "@agoric/eslint-config": "npm:agoric-upgrade-11" + "@agoric/governance": "npm:agoric-upgrade-11" + "@agoric/internal": "npm:agoric-upgrade-11" + "@agoric/notifier": "npm:agoric-upgrade-11" + "@agoric/store": "npm:agoric-upgrade-11" + "@agoric/swingset-vat": "npm:^0.32.2" + "@agoric/time": "npm:agoric-upgrade-11" + "@agoric/vat-data": "npm:agoric-upgrade-11" + "@agoric/vats": "npm:agoric-upgrade-11" + "@agoric/zoe": "npm:agoric-upgrade-11" + "@agoric/zone": "npm:agoric-upgrade-11" + "@cosmjs/crypto": "npm:^0.32.1" + "@cosmjs/encoding": "npm:^0.32.1" + "@cosmjs/math": "npm:^0.32.1" + "@cosmjs/proto-signing": "npm:^0.32.1" + "@cosmjs/stargate": "npm:^0.31.1" + "@endo/bundle-source": "npm:^2.5.2-upstream-rollup" + "@endo/eslint-plugin": "npm:^0.4.4" + "@endo/eventual-send": "npm:^0.17.2" + "@endo/far": "npm:^0.2.18" + "@endo/init": "npm:^0.5.56" + "@endo/marshal": "npm:^0.8.5" + "@endo/patterns": "npm:^0.2.2" + "@endo/promise-kit": "npm:^0.2.59" + "@endo/ses-ava": "npm:^0.2.40" + "@jessie.js/eslint-plugin": "npm:^0.4.0" + ava: "npm:^4.3.1" + eslint: "npm:^8.47.0" + eslint-config-airbnb-base: "npm:^15.0.0" + eslint-config-jessie: "npm:^0.0.6" + eslint-config-prettier: "npm:^8.8.0" + eslint-plugin-ava: "npm:^14.0.0" + eslint-plugin-github: "npm:^4.8.0" + eslint-plugin-import: "npm:^2.25.3" + eslint-plugin-jsdoc: "npm:^46.4.3" + eslint-plugin-prettier: "npm:^5.0.0" + import-meta-resolve: "npm:^2.2.1" + prettier: "npm:^2.2.1" + languageName: unknown + linkType: soft + +"kuler@npm:^2.0.0": + version: 2.0.0 + resolution: "kuler@npm:2.0.0" + checksum: 10c0/0a4e99d92ca373f8f74d1dc37931909c4d0d82aebc94cf2ba265771160fc12c8df34eaaac80805efbda367e2795cb1f1dd4c3d404b6b1cf38aec94035b503d2d + languageName: node + linkType: hard + +"language-subtag-registry@npm:^0.3.20": + version: 0.3.22 + resolution: "language-subtag-registry@npm:0.3.22" + checksum: 10c0/d1e09971260a7cd3b9fdeb190d33af0b6e99c8697013537d9aaa15f7856d9d83aee128ba8078e219df0a7cf4b8dd18d1a0c188f6543b500d92a2689d2d114b70 + languageName: node + linkType: hard + +"language-tags@npm:^1.0.9": + version: 1.0.9 + resolution: "language-tags@npm:1.0.9" + dependencies: + language-subtag-registry: "npm:^0.3.20" + checksum: 10c0/9ab911213c4bd8bd583c850201c17794e52cb0660d1ab6e32558aadc8324abebf6844e46f92b80a5d600d0fbba7eface2c207bfaf270a1c7fd539e4c3a880bff + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"libsodium-sumo@npm:^0.7.13": + version: 0.7.13 + resolution: "libsodium-sumo@npm:0.7.13" + checksum: 10c0/8159205cc36cc4bdf46ee097e5f998d5cac7d11612be7406a8396ca3ee31560871ac17daa69e47ff0e8407eeae9f49313912ea95dbc8715875301b004c28ef5b + languageName: node + linkType: hard + +"libsodium-wrappers-sumo@npm:^0.7.11": + version: 0.7.13 + resolution: "libsodium-wrappers-sumo@npm:0.7.13" + dependencies: + libsodium-sumo: "npm:^0.7.13" + checksum: 10c0/51a151d0f73418632dcf9cf0184b14d8eb6e16b9a3f01a652c7401c6d1bf8ead4f5ce40a4f00bd4754c5719a7a5fb71d6125691896aeb7a9c1abcfe4b73afc02 + languageName: node + linkType: hard + +"load-json-file@npm:^7.0.0": + version: 7.0.1 + resolution: "load-json-file@npm:7.0.1" + checksum: 10c0/7117459608a0b6329c7f78e6e1f541b3162dd901c29dd5af721fec8b270177d2e3d7999c971f344fff04daac368d052732e2c7146014bc84d15e0b636975e19a + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 10c0/139e8a7fe11cfbd7f20db03923cacfa5db9e14fa14887ea121345597472b4a63c1a42a8a5187defeeff6acf98fd568da7382aa39682d38f0af27433953a97751 + languageName: node + linkType: hard + +"lodash.camelcase@npm:4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: 10c0/fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432 + languageName: node + linkType: hard + +"lodash.kebabcase@npm:4.1.1": + version: 4.1.1 + resolution: "lodash.kebabcase@npm:4.1.1" + checksum: 10c0/da5d8f41dbb5bc723d4bf9203d5096ca8da804d6aec3d2b56457156ba6c8d999ff448d347ebd97490da853cb36696ea4da09a431499f1ee8deb17b094ecf4e33 + languageName: node + linkType: hard + +"lodash.merge@npm:4.6.2, lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"lodash.snakecase@npm:4.1.1": + version: 4.1.1 + resolution: "lodash.snakecase@npm:4.1.1" + checksum: 10c0/f0b3f2497eb20eea1a1cfc22d645ecaeb78ac14593eb0a40057977606d2f35f7aaff0913a06553c783b535aafc55b718f523f9eb78f8d5293f492af41002eaf9 + languageName: node + linkType: hard + +"lodash.truncate@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.truncate@npm:4.4.2" + checksum: 10c0/4e870d54e8a6c86c8687e057cec4069d2e941446ccab7f40b4d9555fa5872d917d0b6aa73bece7765500a3123f1723bcdba9ae881b679ef120bba9e1a0b0ed70 + languageName: node + linkType: hard + +"lodash.upperfirst@npm:4.3.1": + version: 4.3.1 + resolution: "lodash.upperfirst@npm:4.3.1" + checksum: 10c0/435625da4b3ee74e7a1367a780d9107ab0b13ef4359fc074b2a1a40458eb8d91b655af62f6795b7138d493303a98c0285340160341561d6896e4947e077fa975 + languageName: node + linkType: hard + +"lodash@npm:4.17.21, lodash@npm:^4.13.1, lodash@npm:^4.17.15, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: "npm:^4.1.0" + is-unicode-supported: "npm:^0.1.0" + checksum: 10c0/67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 + languageName: node + linkType: hard + +"logform@npm:^2.2.0, logform@npm:^2.3.2": + version: 2.6.0 + resolution: "logform@npm:2.6.0" + dependencies: + "@colors/colors": "npm:1.6.0" + "@types/triple-beam": "npm:^1.3.2" + fecha: "npm:^4.2.0" + ms: "npm:^2.1.1" + safe-stable-stringify: "npm:^2.3.1" + triple-beam: "npm:^1.3.0" + checksum: 10c0/6e02f8617a03155b2fce451bacf777a2c01da16d32c4c745b3ec85be6c3f2602f2a4953a8bd096441cb4c42c447b52318541d6b6bc335dce903cb9ad77a1749f + languageName: node + linkType: hard + +"long@npm:^4.0.0": + version: 4.0.0 + resolution: "long@npm:4.0.0" + checksum: 10c0/50a6417d15b06104dbe4e3d4a667c39b137f130a9108ea8752b352a4cfae047531a3ac351c181792f3f8768fe17cca6b0f406674a541a86fb638aaac560d83ed + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: 10c0/b3a452b491433db885beed95041eb104c157ef7794b9c9b4d647be503be91769d11206bb573849a16b4cc0d03cbd15ffd22df7960997788b74c1d399ac7a4fed + languageName: node + linkType: hard + +"magic-string@npm:^0.25.7": + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" + dependencies: + sourcemap-codec: "npm:^1.4.8" + checksum: 10c0/37f5e01a7e8b19a072091f0b45ff127cda676232d373ce2c551a162dd4053c575ec048b9cbb4587a1f03adb6c5d0fd0dd49e8ab070cd2c83a4992b2182d9cb56 + languageName: node + linkType: hard + +"make-dir@npm:^3.1.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: "npm:^6.0.0" + checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa + languageName: node + linkType: hard + +"make-fetch-happen@npm:^10.0.3": + version: 10.2.1 + resolution: "make-fetch-happen@npm:10.2.1" + dependencies: + agentkeepalive: "npm:^4.2.1" + cacache: "npm:^16.1.0" + http-cache-semantics: "npm:^4.1.0" + http-proxy-agent: "npm:^5.0.0" + https-proxy-agent: "npm:^5.0.0" + is-lambda: "npm:^1.0.1" + lru-cache: "npm:^7.7.1" + minipass: "npm:^3.1.6" + minipass-collect: "npm:^1.0.2" + minipass-fetch: "npm:^2.0.3" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + promise-retry: "npm:^2.0.1" + socks-proxy-agent: "npm:^7.0.0" + ssri: "npm:^9.0.0" + checksum: 10c0/28ec392f63ab93511f400839dcee83107eeecfaad737d1e8487ea08b4332cd89a8f3319584222edd9f6f1d0833cf516691469496d46491863f9e88c658013949 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + languageName: node + linkType: hard + +"map-age-cleaner@npm:^0.1.3": + version: 0.1.3 + resolution: "map-age-cleaner@npm:0.1.3" + dependencies: + p-defer: "npm:^1.0.0" + checksum: 10c0/7495236c7b0950956c144fd8b4bc6399d4e78072a8840a4232fe1c4faccbb5eb5d842e5c0a56a60afc36d723f315c1c672325ca03c1b328650f7fcc478f385fd + languageName: node + linkType: hard + +"matcher@npm:^5.0.0": + version: 5.0.0 + resolution: "matcher@npm:5.0.0" + dependencies: + escape-string-regexp: "npm:^5.0.0" + checksum: 10c0/eda5471fc9d5b7264d63c81727824adc3585ddb5cfdc5fce5a9b7c86f946ff181610735d330b1c37a84811df872d1290bf4e9401d2be2a414204343701144b18 + languageName: node + linkType: hard + +"md5-hex@npm:^3.0.1": + version: 3.0.1 + resolution: "md5-hex@npm:3.0.1" + dependencies: + blueimp-md5: "npm:^2.10.0" + checksum: 10c0/ee2b4d8da16b527b3a3fe4d7a96720f43afd07b46a82d49421208b5a126235fb75cfb30b80d4029514772c8844273f940bddfbf4155c787f968f3be4060d01e4 + languageName: node + linkType: hard + +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: 10c0/d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 + languageName: node + linkType: hard + +"mem@npm:^9.0.2": + version: 9.0.2 + resolution: "mem@npm:9.0.2" + dependencies: + map-age-cleaner: "npm:^0.1.3" + mimic-fn: "npm:^4.0.0" + checksum: 10c0/c2c56141399e520d8f0e50186bb7e4b49300b33984dc919682f3f13e53dec0e6608fbd327d5ae99494f45061a3a05a8ee04ccba6dcf795c3c215b5aa906eb41f + languageName: node + linkType: hard + +"merge-descriptors@npm:1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 10c0/b67d07bd44cfc45cebdec349bb6e1f7b077ee2fd5beb15d1f7af073849208cb6f144fe403e29a36571baf3f4e86469ac39acf13c318381e958e186b2766f54ec + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"methods@npm:~1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 10c0/bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 + languageName: node + linkType: hard + +"micro-spelling-correcter@npm:^1.1.1": + version: 1.1.1 + resolution: "micro-spelling-correcter@npm:1.1.1" + checksum: 10c0/e16f463049c590781b4e81c66743112f6115e02d696311158bf4ce6460ef1a8863e85b344dade2667470dfbbe0e343ea5e6b0c902fea73e793d8a63971a87619 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: "npm:^3.0.2" + picomatch: "npm:^2.3.1" + checksum: 10c0/3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff + languageName: node + linkType: hard + +"microtime@npm:^3.1.0": + version: 3.1.1 + resolution: "microtime@npm:3.1.1" + dependencies: + node-addon-api: "npm:^5.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.4.0" + checksum: 10c0/02512993de914c6f71424d3b8b28ce53de44ba5895b904a213420fd4fc86a084c1d08ec0876ac60cdae6427022766e1b9b86d9b3442bf408701120bd61455e26 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 10c0/de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 10c0/790ecec8c5c73973a4fbf2c663d911033e8494d5fb0960a4500634766ab05d6107d20af896ca2132e7031741f19888154d44b2408ada0852446705441383e9f8 + languageName: node + linkType: hard + +"minimatch@npm:9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + languageName: node + linkType: hard + +"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/8f82bd1f3095b24f53a991b04b67f4c710c894e518b813f0864a31de5570441a509be1ca17e0bb92b047591a8fdbeb886f502764fefb00d2f144f4011791e898 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^2.0.3": + version: 2.1.2 + resolution: "minipass-fetch@npm:2.1.2" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^3.1.6" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/33ab2c5bdb3d91b9cb8bc6ae42d7418f4f00f7f7beae14b3bb21ea18f9224e792f560a6e17b6f1be12bbeb70dbe99a269f4204c60e5d99130a0777b153505c43 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: "npm:^1.2.6" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"morgan@npm:^1.9.1": + version: 1.10.0 + resolution: "morgan@npm:1.10.0" + dependencies: + basic-auth: "npm:~2.0.1" + debug: "npm:2.6.9" + depd: "npm:~2.0.0" + on-finished: "npm:~2.3.0" + on-headers: "npm:~1.0.2" + checksum: 10c0/684db061daca28f8d8e3bfd50bd0d21734401b46f74ea76f6df7785d45698fcd98f6d3b81a6bad59f8288c429183afba728c428e8f66d2e8c30fd277af3b5b3a + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 10c0/f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"mute-stream@npm:0.0.8": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: 10c0/18d06d92e5d6d45e2b63c0e1b8f25376af71748ac36f53c059baa8b76ffac31c5ab225480494e7d35d30215ecdb18fed26ec23cafcd2f7733f2f14406bcd19e2 + languageName: node + linkType: hard + +"n-readlines@npm:^1.0.0": + version: 1.0.1 + resolution: "n-readlines@npm:1.0.1" + checksum: 10c0/a2ba1c74e365ac5b8b2dde03301ddcb193c81edb0d3691dd71b3d9a1c71b3dde30b86c32483578efbc3161d295b272123668de11533b02a99bd93704d637f83e + languageName: node + linkType: hard + +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 10c0/37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 + languageName: node + linkType: hard + +"napi-thread-safe-callback@npm:0.0.6": + version: 0.0.6 + resolution: "napi-thread-safe-callback@npm:0.0.6" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/8eea6d97b80f818b2ade335e34a0b54288751cf9a164e9cc4f60f729970d9f0730453db163471a92cfe2fabe188003633529563154694c151af7a87aee68949b + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.54.0 + resolution: "node-abi@npm:3.54.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/9ebbb21e6951aa51e831549ed62b68dc56bcc10f6b21ffd04195a16a6abf5ddfc48b6ae5e3334720fe4459cafde5ec8103025902efff5599d0539f8656fc694e + languageName: node + linkType: hard + +"node-addon-api@npm:^1.7.1": + version: 1.7.2 + resolution: "node-addon-api@npm:1.7.2" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/bcf526f2ce788182730d3c3df5206585873d1e837a6e1378ff84abccf2f19cf3f93a8274f9c1245af0de63a0dbd1bb95ca2f767ecf5c678d6930326aaf396c4e + languageName: node + linkType: hard + +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.7": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.4.0": + version: 4.8.0 + resolution: "node-gyp-build@npm:4.8.0" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/85324be16f81f0235cbbc42e3eceaeb1b5ab94c8d8f5236755e1435b4908338c65a4e75f66ee343cbcb44ddf9b52a428755bec16dcd983295be4458d95c8e1ad + languageName: node + linkType: hard + +"node-gyp@npm:^9.3.1": + version: 9.4.1 + resolution: "node-gyp@npm:9.4.1" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^7.1.4" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^10.0.3" + nopt: "npm:^6.0.0" + npmlog: "npm:^6.0.0" + rimraf: "npm:^3.0.2" + semver: "npm:^7.3.5" + tar: "npm:^6.1.2" + which: "npm:^2.0.2" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/f7d676cfa79f27d35edf17fe9c80064123670362352d19729e5dc9393d7e99f1397491c3107eddc0c0e8941442a6244a7ba6c860cfbe4b433b4cae248a55fe10 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + tar: "npm:^6.2.1" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b + languageName: node + linkType: hard + +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 10c0/199fc93773ae70ec9969bc6d5ac5b2bbd6eb986ed1907d751f411fef3ede0e4bfdb45ceb43711f8078bea237b6036db8b1bf208f6ff2b70c7d615afd157f3ab9 + languageName: node + linkType: hard + +"nofilter@npm:^3.1.0": + version: 3.1.0 + resolution: "nofilter@npm:3.1.0" + checksum: 10c0/92459f3864a067b347032263f0b536223cbfc98153913b5dce350cb39c8470bc1813366e41993f22c33cc6400c0f392aa324a4b51e24c22040635c1cdb046499 + languageName: node + linkType: hard + +"nopt@npm:^5.0.0": + version: 5.0.0 + resolution: "nopt@npm:5.0.0" + dependencies: + abbrev: "npm:1" + bin: + nopt: bin/nopt.js + checksum: 10c0/fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061 + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: "npm:^1.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/837b52c330df16fcaad816b1f54fec6b2854ab1aa771d935c1603fbcf9b023bb073f1466b1b67f48ea4dce127ae675b85b9d9355700e9b109de39db490919786 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"npmlog@npm:^5.0.1": + version: 5.0.1 + resolution: "npmlog@npm:5.0.1" + dependencies: + are-we-there-yet: "npm:^2.0.0" + console-control-strings: "npm:^1.1.0" + gauge: "npm:^3.0.0" + set-blocking: "npm:^2.0.0" + checksum: 10c0/489ba519031013001135c463406f55491a17fc7da295c18a04937fe3a4d523fd65e88dd418a28b967ab743d913fdeba1e29838ce0ad8c75557057c481f7d49fa + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: "npm:^3.0.0" + console-control-strings: "npm:^1.1.0" + gauge: "npm:^4.0.3" + set-blocking: "npm:^2.0.0" + checksum: 10c0/0cacedfbc2f6139c746d9cd4a85f62718435ad0ca4a2d6459cd331dd33ae58206e91a0742c1558634efcde3f33f8e8e7fd3adf1bfe7978310cf00bd55cccf890 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.1": + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: 10c0/fad603f408e345c82e946abdf4bfd774260a5ed3e5997a0b057c44153ac32c7271ff19e3a5ae39c858da683ba045ccac2f65245c12763ce4e8594f818f4a648d + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.2, object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + has-symbols: "npm:^1.0.3" + object-keys: "npm:^1.1.1" + checksum: 10c0/60108e1fa2706f22554a4648299b0955236c62b3685c52abf4988d14fffb0e7731e00aa8c6448397e3eb63d087dcc124a9f21e1980f36d0b2667f3c18bacd469 + languageName: node + linkType: hard + +"object.entries@npm:^1.1.5, object.entries@npm:^1.1.7": + version: 1.1.7 + resolution: "object.entries@npm:1.1.7" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + checksum: 10c0/3ad1899cc7bf14546bf28f4a9b363ae8690b90948fcfbcac4c808395435d760f26193d9cae95337ce0e3c1e5c1f4fa45f7b46b31b68d389e9e117fce38775d86 + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.7": + version: 2.0.7 + resolution: "object.fromentries@npm:2.0.7" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + checksum: 10c0/071745c21f6fc9e6c914691f2532c1fb60ad967e5ddc52801d09958b5de926566299d07ae14466452a7efd29015f9145d6c09c573d93a0dc6f1683ee0ec2b93b + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.1": + version: 1.0.2 + resolution: "object.groupby@npm:1.0.2" + dependencies: + array.prototype.filter: "npm:^1.0.3" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.0.0" + checksum: 10c0/b6266b1cfec7eb784b8bbe0bca5dc4b371cf9dd3e601b0897d72fa97a5934273d8fb05b3fc5222204104dbec32b50e25ba27e05ad681f71fb739cc1c7e9b81b1 + languageName: node + linkType: hard + +"object.values@npm:^1.1.6, object.values@npm:^1.1.7": + version: 1.1.7 + resolution: "object.values@npm:1.1.7" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + checksum: 10c0/e869d6a37fb7afdd0054dea49036d6ccebb84854a8848a093bbd1bc516f53e690bba88f0bc3e83fdfa74c601469ee6989c9b13359cda9604144c6e732fad3b6b + languageName: node + linkType: hard + +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 + languageName: node + linkType: hard + +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10c0/c904f9e518b11941eb60279a3cbfaf1289bd0001f600a950255b1dede9fe3df8cd74f38483550b3bb9485165166acb5db500c3b4c4337aec2815c88c96fcc2ea + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"one-time@npm:^1.0.0": + version: 1.0.0 + resolution: "one-time@npm:1.0.0" + dependencies: + fn.name: "npm:1.x.x" + checksum: 10c0/6e4887b331edbb954f4e915831cbec0a7b9956c36f4feb5f6de98c448ac02ff881fd8d9b55a6b1b55030af184c6b648f340a76eb211812f4ad8c9b4b8692fdaa + languageName: node + linkType: hard + +"onetime@npm:^5.1.0": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"open@npm:^7.4.2": + version: 7.4.2 + resolution: "open@npm:7.4.2" + dependencies: + is-docker: "npm:^2.0.0" + is-wsl: "npm:^2.1.1" + checksum: 10c0/77573a6a68f7364f3a19a4c80492712720746b63680ee304555112605ead196afe91052bd3c3d165efdf4e9d04d255e87de0d0a77acec11ef47fd5261251813f + languageName: node + linkType: hard + +"opener@npm:^1.5.2": + version: 1.5.2 + resolution: "opener@npm:1.5.2" + bin: + opener: bin/opener-bin.js + checksum: 10c0/dd56256ab0cf796585617bc28e06e058adf09211781e70b264c76a1dbe16e90f868c974e5bf5309c93469157c7d14b89c35dc53fe7293b0e40b4d2f92073bc79 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" + dependencies: + "@aashutoshrathi/word-wrap": "npm:^1.2.3" + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + checksum: 10c0/66fba794d425b5be51353035cf3167ce6cfa049059cbb93229b819167687e0f48d2bc4603fcb21b091c99acb516aae1083624675b15c4765b2e4693a085e959c + languageName: node + linkType: hard + +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: "npm:^4.1.0" + chalk: "npm:^4.1.0" + cli-cursor: "npm:^3.1.0" + cli-spinners: "npm:^2.5.0" + is-interactive: "npm:^1.0.0" + is-unicode-supported: "npm:^0.1.0" + log-symbols: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + wcwidth: "npm:^1.0.1" + checksum: 10c0/10ff14aace236d0e2f044193362b22edce4784add08b779eccc8f8ef97195cae1248db8ec1ec5f5ff076f91acbe573f5f42a98c19b78dba8c54eefff983cae85 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 + languageName: node + linkType: hard + +"p-defer@npm:^1.0.0": + version: 1.0.0 + resolution: "p-defer@npm:1.0.0" + checksum: 10c0/ed603c3790e74b061ac2cb07eb6e65802cf58dce0fbee646c113a7b71edb711101329ad38f99e462bd2e343a74f6e9366b496a35f1d766c187084d3109900487 + languageName: node + linkType: hard + +"p-event@npm:^5.0.1": + version: 5.0.1 + resolution: "p-event@npm:5.0.1" + dependencies: + p-timeout: "npm:^5.0.2" + checksum: 10c0/2317171489537f316661fa863f3bb711b2ceb89182937238422cec10223cbb958c432d6c26a238446a622d788187bdd295b1d8ecedbe2e467e045930d60202b0 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 10c0/d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^5.4.0": + version: 5.5.0 + resolution: "p-map@npm:5.5.0" + dependencies: + aggregate-error: "npm:^4.0.0" + checksum: 10c0/410bce846b1e3db6bb2ccab6248372ecf4e635fc2b31331c8f56478e73fec9e146e8b4547585e635703160a3d252a6a65b8f855834aebc2c3408eb5789630cc4 + languageName: node + linkType: hard + +"p-timeout@npm:^5.0.2": + version: 5.1.0 + resolution: "p-timeout@npm:5.1.0" + checksum: 10c0/1b026cf9d5878c64bec4341ca9cda8ec6b8b3aea8a57885ca0fe2b35753a20d767fb6f9d3aa41e1252f42bc95432c05ea33b6b18f271fb10bfb0789591850a41 + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"pako@npm:^2.0.2": + version: 2.1.0 + resolution: "pako@npm:2.1.0" + checksum: 10c0/8e8646581410654b50eb22a5dfd71159cae98145bd5086c9a7a816ec0370b5f72b4648d08674624b3870a521e6a3daffd6c2f7bc00fdefc7063c9d8232ff5116 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-ms@npm:^2.1.0": + version: 2.1.0 + resolution: "parse-ms@npm:2.1.0" + checksum: 10c0/9c5c0a95c6267c84085685556a6e102ee806c3147ec11cbb9b98e35998eb4a48a757bd6ea7bfd930062de65909a33d24985055b4394e70aa0b65ee40cef16911 + languageName: node + linkType: hard + +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 + languageName: node + linkType: hard + +"patch-package@npm:^8.0.0": + version: 8.0.0 + resolution: "patch-package@npm:8.0.0" + dependencies: + "@yarnpkg/lockfile": "npm:^1.1.0" + chalk: "npm:^4.1.2" + ci-info: "npm:^3.7.0" + cross-spawn: "npm:^7.0.3" + find-yarn-workspace-root: "npm:^2.0.0" + fs-extra: "npm:^9.0.0" + json-stable-stringify: "npm:^1.0.2" + klaw-sync: "npm:^6.0.0" + minimist: "npm:^1.2.6" + open: "npm:^7.4.2" + rimraf: "npm:^2.6.3" + semver: "npm:^7.5.3" + slash: "npm:^2.0.0" + tmp: "npm:^0.0.33" + yaml: "npm:^2.2.2" + bin: + patch-package: index.js + checksum: 10c0/690eab0537e953a3fd7d32bb23f0e82f97cd448f8244c3227ed55933611a126f9476397325c06ad2c11d881a19b427a02bd1881bee78d89f1731373fc4fe0fee + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 10c0/b170f3060b31604cde93eefdb7392b89d832dfbc1bed717c9718cbe0f230c1669b7e75f87e19901da2250b84d092989a0f9e44d2ef41deb09aa3ad28e691a40a + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-to-regexp@npm:0.1.7": + version: 0.1.7 + resolution: "path-to-regexp@npm:0.1.7" + checksum: 10c0/50a1ddb1af41a9e68bd67ca8e331a705899d16fb720a1ea3a41e310480948387daf603abb14d7b0826c58f10146d49050a1291ba6a82b78a382d1c02c0b8f905 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: 10c0/20a5b249e331c14479d94ec6817a182fd7a5680debae82705747b2db7ec50009a5f6648d0621c561b0572703f84dbef0858abcbd5856d3c5511426afcb1961f7 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pkg-conf@npm:^4.0.0": + version: 4.0.0 + resolution: "pkg-conf@npm:4.0.0" + dependencies: + find-up: "npm:^6.0.0" + load-json-file: "npm:^7.0.0" + checksum: 10c0/27d027609f27228edcde121f6f707b4ba1f5488e95e98f2e58652ae4e99792081bd1de67d591f4a0f05b02c0b66d745591d49f82041cbc8d41e2238ef5d73eb4 + languageName: node + linkType: hard + +"pkg-dir@npm:^5.0.0": + version: 5.0.0 + resolution: "pkg-dir@npm:5.0.0" + dependencies: + find-up: "npm:^5.0.0" + checksum: 10c0/793a496d685dc55bbbdbbb22d884535c3b29241e48e3e8d37e448113a71b9e42f5481a61fdc672d7322de12fbb2c584dd3a68bf89b18fffce5c48a390f911bc5 + languageName: node + linkType: hard + +"plur@npm:^5.1.0": + version: 5.1.0 + resolution: "plur@npm:5.1.0" + dependencies: + irregular-plurals: "npm:^3.3.0" + checksum: 10c0/26bb622b8545fcfd47bbf56fbcca66c08693708a232e403fa3589e00003c56c14231ac57c7588ca5db83ef4be1f61383402c4ea954000768f779f8aef6eb6da8 + languageName: node + linkType: hard + +"prebuild-install@npm:^7.1.1": + version: 7.1.1 + resolution: "prebuild-install@npm:7.1.1" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 10c0/6dc70f36b0f4adcb2fe0ed38d874ab28b571fb1a9725d769e8ba3f64a15831e58462de09f3e6e64569bcc4a3e03b9328b56faa0d45fe10ae1574478814536c76 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: "npm:^1.1.2" + checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab + languageName: node + linkType: hard + +"prettier@npm:^2.2.1": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a + languageName: node + linkType: hard + +"prettier@npm:^3.0.0": + version: 3.2.5 + resolution: "prettier@npm:3.2.5" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/ea327f37a7d46f2324a34ad35292af2ad4c4c3c3355da07313339d7e554320f66f65f91e856add8530157a733c6c4a897dc41b577056be5c24c40f739f5ee8c6 + languageName: node + linkType: hard + +"pretty-ms@npm:^7.0.1": + version: 7.0.1 + resolution: "pretty-ms@npm:7.0.1" + dependencies: + parse-ms: "npm:^2.1.0" + checksum: 10c0/069aec9d939e7903846b3db53b020bed92e3dc5909e0fef09ec8ab104a0b7f9a846605a1633c60af900d288582fb333f6f30469e59d6487a2330301fad35a89c + languageName: node + linkType: hard + +"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + +"prom-client@npm:13.1.0": + version: 13.1.0 + resolution: "prom-client@npm:13.1.0" + dependencies: + tdigest: "npm:^0.1.1" + checksum: 10c0/0f117e044bdbc7e8fb3a926e16e0e76ff3fb308dbc98fdb084dfa16ad52a0b68cf6a79a31e907b1c4ac9009b1d50848e3e72fb36ed43893291148e1505844fc2 + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 10c0/d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"protobufjs@npm:^6.10.3, protobufjs@npm:^6.8.8, protobufjs@npm:~6.11.2, protobufjs@npm:~6.11.3": + version: 6.11.4 + resolution: "protobufjs@npm:6.11.4" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.4" + "@protobufjs/eventemitter": "npm:^1.1.0" + "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/inquire": "npm:^1.1.0" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.0" + "@types/long": "npm:^4.0.1" + "@types/node": "npm:>=13.7.0" + long: "npm:^4.0.0" + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: 10c0/c244d7b9b6d3258193da5c0d1e558dfb47f208ae345e209f90ec45c9dca911b90fa17e937892a9a39a4136ab9886981aae9efdf6039f7baff4f7225f5eeb9812 + languageName: node + linkType: hard + +"proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: "npm:0.2.0" + ipaddr.js: "npm:1.9.1" + checksum: 10c0/c3eed999781a35f7fd935f398b6d8920b6fb00bbc14287bc6de78128ccc1a02c89b95b56742bf7cf0362cc333c61d138532049c7dedc7a328ef13343eff81210 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.0 + resolution: "pump@npm:3.0.0" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/bbdeda4f747cdf47db97428f3a135728669e56a0ae5f354a9ac5b74556556f5446a46f720a8f14ca2ece5be9b4d5d23c346db02b555f46739934cc6c093a5478 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"pure-rand@npm:^6.0.0": + version: 6.0.4 + resolution: "pure-rand@npm:6.0.4" + checksum: 10c0/0fe7b12f25b10ea5b804598a6f37e4bcf645d2be6d44fe963741f014bf0095bdb6ff525106d6da6e76addc8142358fd380f1a9b8c62ea4d5516bf26a96a37c95 + languageName: node + linkType: hard + +"qs@npm:6.11.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: "npm:^1.0.4" + checksum: 10c0/4e4875e4d7c7c31c233d07a448e7e4650f456178b9dd3766b7cfa13158fdb24ecb8c4f059fa91e820dc6ab9f2d243721d071c9c0378892dcdad86e9e9a27c68f + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 + languageName: node + linkType: hard + +"raw-body@npm:2.5.1": + version: 2.5.1 + resolution: "raw-body@npm:2.5.1" + dependencies: + bytes: "npm:3.1.2" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + unpipe: "npm:1.0.0" + checksum: 10c0/5dad5a3a64a023b894ad7ab4e5c7c1ce34d3497fc7138d02f8c88a3781e68d8a55aa7d4fd3a458616fa8647cc228be314a1c03fb430a07521de78b32c4dd09d2 + languageName: node + linkType: hard + +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + +"readonly-date@npm:^1.0.0": + version: 1.0.0 + resolution: "readonly-date@npm:1.0.0" + checksum: 10c0/7ab32bf19f6bfec102584a524fa79a289e6ede0bf20c80fd90ab309962e45b71d19dd0e3915dff6e81edf226f08fda65e890539b4aca74668921790b10471356 + languageName: node + linkType: hard + +"reflect.getprototypeof@npm:^1.0.4": + version: 1.0.5 + resolution: "reflect.getprototypeof@npm:1.0.5" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.3" + globalthis: "npm:^1.0.3" + which-builtin-type: "npm:^1.1.3" + checksum: 10c0/68f2a21494a9f4f5acc19bda5213236aa7fc02f9953ce2b18670c63b9ca3dec294dcabbb9d394d98cd2fc0de46b7cd6354614a60a33cabdbb5de9a6f7115f9a6 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 10c0/1b16eb2c4bceb1665c89de70dcb64126a22bc8eb958feef3cd68fe11ac6d2a4899b5cd1b80b0774c7c03591dc57d16631a7f69d2daa2ec98100e2f29f7ec4cc4 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" + dependencies: + call-bind: "npm:^1.0.6" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.1" + checksum: 10c0/0f3fc4f580d9c349f8b560b012725eb9c002f36daa0041b3fbf6f4238cb05932191a4d7d5db3b5e2caa336d5150ad0402ed2be81f711f9308fe7e1a9bf9bd552 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"requireindex@npm:~1.1.0": + version: 1.1.0 + resolution: "requireindex@npm:1.1.0" + checksum: 10c0/4d57e7c6d160c4d043a233a6a95a22c792ada72ff378c5ebd415be505b328f3c719f9188dd100f8fcaa8af513a85f39eee0a5047838d715e22e79544a3b7d002 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: 10c0/b2bfdd09db16c082c4326e573a82c0771daaf7b53b9ce8ad60ea46aa6e30aaf475fe9b164800b89f93b748d2c234d8abff945d2551ba47bf5698e04cd7713267 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve@npm:^1.12.0, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.22.4": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.12.0#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"rimraf@npm:^2.6.3": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: ./bin.js + checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 + languageName: node + linkType: hard + +"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"rimraf@npm:~2.6.2": + version: 2.6.3 + resolution: "rimraf@npm:2.6.3" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: ./bin.js + checksum: 10c0/f1e646f8c567795f2916aef7aadf685b543da6b9a53e482bb04b07472c7eef2b476045ba1e29f401c301c66b630b22b815ab31fdd60c5e1ae6566ff523debf45 + languageName: node + linkType: hard + +"rollup@npm:^2.79.1": + version: 2.79.1 + resolution: "rollup@npm:2.79.1" + dependencies: + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/421418687f5dcd7324f4387f203c6bfc7118b7ace789e30f5da022471c43e037a76f5fd93837052754eeeae798a4fb266ac05ccee1e594406d912a59af98dde9 + languageName: node + linkType: hard + +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: 10c0/35a68c8f1d9664f6c7c2e153877ca1d6e4f886e5ca067c25cdd895a6891ff3a1466ee07c63d6a9be306e9619ff7d509494e6d9c129516a36b9fd82263d579ee1 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:^7.5.5": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-array-concat@npm:1.1.0" + dependencies: + call-bind: "npm:^1.0.5" + get-intrinsic: "npm:^1.2.2" + has-symbols: "npm:^1.0.3" + isarray: "npm:^2.0.5" + checksum: 10c0/833d3d950fc7507a60075f9bfaf41ec6dac7c50c7a9d62b1e6b071ecc162185881f92e594ff95c1a18301c881352dd6fd236d56999d5819559db7b92da9c28af + languageName: node + linkType: hard + +"safe-buffer@npm:5.1.2": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.1.4" + checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603 + languageName: node + linkType: hard + +"safe-stable-stringify@npm:^2.3.1": + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: 10c0/81dede06b8f2ae794efd868b1e281e3c9000e57b39801c6c162267eb9efda17bd7a9eafa7379e1f1cacd528d4ced7c80d7460ad26f62ada7c9e01dec61b2e768 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.6.0 + resolution: "semver@npm:7.6.0" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/fbfe717094ace0aa8d6332d7ef5ce727259815bd8d8815700853f4faf23aacbd7192522f0dc5af6df52ef4fa85a355ebd2f5d39f554bd028200d6cf481ab9b53 + languageName: node + linkType: hard + +"send@npm:0.18.0": + version: 0.18.0 + resolution: "send@npm:0.18.0" + dependencies: + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:2.4.1" + range-parser: "npm:~1.2.1" + statuses: "npm:2.0.1" + checksum: 10c0/0eb134d6a51fc13bbcb976a1f4214ea1e33f242fae046efc311e80aff66c7a43603e26a79d9d06670283a13000e51be6e0a2cb80ff0942eaf9f1cd30b7ae736a + languageName: node + linkType: hard + +"serialize-error@npm:^7.0.1": + version: 7.0.1 + resolution: "serialize-error@npm:7.0.1" + dependencies: + type-fest: "npm:^0.13.1" + checksum: 10c0/7982937d578cd901276c8ab3e2c6ed8a4c174137730f1fb0402d005af209a0e84d04acc874e317c936724c7b5b26c7a96ff7e4b8d11a469f4924a4b0ea814c05 + languageName: node + linkType: hard + +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" + dependencies: + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:0.18.0" + checksum: 10c0/fa9f0e21a540a28f301258dfe1e57bb4f81cd460d28f0e973860477dd4acef946a1f41748b5bd41c73b621bea2029569c935faa38578fd34cd42a9b4947088ba + languageName: node + linkType: hard + +"ses@npm:^0.18.4, ses@npm:^0.18.5, ses@npm:^0.18.8": + version: 0.18.8 + resolution: "ses@npm:0.18.8" + dependencies: + "@endo/env-options": "npm:^0.1.4" + checksum: 10c0/2c5c5e40f6a8edee081e1c62b65316128823070a68858c6ee45810fb14464d14a9f82499bf4d1cb274b46e35e199f7c55565755236a708d25ace493da206083f + languageName: node + linkType: hard + +"ses@npm:^1.10.0": + version: 1.10.0 + resolution: "ses@npm:1.10.0" + dependencies: + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/83b92bc49e27af04eeb7ee01a2196a0c4b0906e4de51e70403aa9ffc82be1d27a0c3506f2d54da8d6d260be0855f2123a13a7e2c6896e81ec85899df1a428609 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.1": + version: 1.2.1 + resolution: "set-function-length@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.1.2" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.3" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.1" + checksum: 10c0/1927e296599f2c04d210c1911f1600430a5e49e04a6d8bb03dca5487b95a574da9968813a2ced9a774bd3e188d4a6208352c8f64b8d4674cdb021dca21e190ca + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.1": + version: 2.0.1 + resolution: "set-function-name@npm:2.0.1" + dependencies: + define-data-property: "npm:^1.0.1" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.0" + checksum: 10c0/6be7d3e15be47f4db8a5a563a35c60b5e7c4af91cc900e8972ffad33d3aaa227900faa55f60121cdb04b85866a734bb7fe4cd91f654c632861cc86121a48312a + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.5 + resolution: "side-channel@npm:1.0.5" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + object-inspect: "npm:^1.13.1" + checksum: 10c0/31312fecb68997ce2893b1f6d1fd07d6dd41e05cc938e82004f056f7de96dd9df599ef9418acdf730dda948e867e933114bd2efe4170c0146d1ed7009700c252 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: "npm:^0.3.1" + checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 + languageName: node + linkType: hard + +"slash@npm:^2.0.0": + version: 2.0.0 + resolution: "slash@npm:2.0.0" + checksum: 10c0/f83dbd3cb62c41bb8fcbbc6bf5473f3234b97fa1d008f571710a9d3757a28c7169e1811cad1554ccb1cc531460b3d221c9a7b37f549398d9a30707f0a5af9193 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"slash@npm:^4.0.0": + version: 4.0.0 + resolution: "slash@npm:4.0.0" + checksum: 10c0/b522ca75d80d107fd30d29df0549a7b2537c83c4c4ecd12cd7d4ea6c8aaca2ab17ada002e7a1d78a9d736a0261509f26ea5b489082ee443a3a810586ef8eff18 + languageName: node + linkType: hard + +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + astral-regex: "npm:^2.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + checksum: 10c0/6c25678db1270d4793e0327620f1e0f9f5bea4630123f51e9e399191bc52c87d6e6de53ed33538609e5eacbd1fab769fae00f3705d08d029f02102a540648918 + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: "npm:^6.0.0" + is-fullwidth-code-point: "npm:^4.0.0" + checksum: 10c0/2d4d40b2a9d5cf4e8caae3f698fe24ae31a4d778701724f578e984dcb485ec8c49f0c04dab59c401821e80fcdfe89cace9c66693b0244e40ec485d72e543914f + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: "npm:^6.0.2" + debug: "npm:^4.3.3" + socks: "npm:^2.6.2" + checksum: 10c0/b859f7eb8e96ec2c4186beea233ae59c02404094f3eb009946836af27d6e5c1627d1975a69b4d2e20611729ed543b6db3ae8481eb38603433c50d0345c987600 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" + dependencies: + agent-base: "npm:^7.1.1" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.3 + resolution: "socks@npm:2.7.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/31836d95e42f10a6e734fae93e61f6c2673416ca3003daa4df39a7582f40c5127f655cfadfaadd0bae456862f78b87a34cd28d5068a76aa767d7e7b794d9eb95 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map@npm:^0.5.0": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 + languageName: node + linkType: hard + +"sourcemap-codec@npm:^1.4.8": + version: 1.4.8 + resolution: "sourcemap-codec@npm:1.4.8" + checksum: 10c0/f099279fdaae070ff156df7414bbe39aad69cdd615454947ed3e19136bfdfcb4544952685ee73f56e17038f4578091e12b17b283ed8ac013882916594d95b9e6 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^4.0.0": + version: 4.0.0 + resolution: "spdx-expression-parse@npm:4.0.0" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/965c487e77f4fb173f1c471f3eef4eb44b9f0321adc7f93d95e7620da31faa67d29356eb02523cd7df8a7fc1ec8238773cdbf9e45bd050329d2b26492771b736 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.17 + resolution: "spdx-license-ids@npm:3.0.17" + checksum: 10c0/ddf9477b5afc70f1a7d3bf91f0b8e8a1c1b0fa65d2d9a8b5c991b1a2ba91b693d8b9749700119d5ce7f3fbf307ac421087ff43d321db472605e98a5804f80eac + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 + languageName: node + linkType: hard + +"ssri@npm:^9.0.0": + version: 9.0.1 + resolution: "ssri@npm:9.0.1" + dependencies: + minipass: "npm:^3.1.1" + checksum: 10c0/c5d153ce03b5980d683ecaa4d805f6a03d8dc545736213803e168a1907650c46c08a4e5ce6d670a0205482b35c35713d9d286d9133bdd79853a406e22ad81f04 + languageName: node + linkType: hard + +"stack-trace@npm:0.0.x": + version: 0.0.10 + resolution: "stack-trace@npm:0.0.10" + checksum: 10c0/9ff3dabfad4049b635a85456f927a075c9d0c210e3ea336412d18220b2a86cbb9b13ec46d6c37b70a302a4ea4d49e30e5d4944dd60ae784073f1cde778ac8f4b + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.5": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.8": + version: 1.2.8 + resolution: "string.prototype.trim@npm:1.2.8" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + checksum: 10c0/4f76c583908bcde9a71208ddff38f67f24c9ec8093631601666a0df8b52fad44dad2368c78895ce83eb2ae8e7068294cc96a02fc971ab234e4d5c9bb61ea4e34 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.7": + version: 1.0.7 + resolution: "string.prototype.trimend@npm:1.0.7" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + checksum: 10c0/53c24911c7c4d8d65f5ef5322de23a3d5b6b4db73273e05871d5ab4571ae5638f38f7f19d71d09116578fb060e5a145cc6a208af2d248c8baf7a34f44d32ce57 + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.7": + version: 1.0.7 + resolution: "string.prototype.trimstart@npm:1.0.7" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + checksum: 10c0/0bcf391b41ea16d4fda9c9953d0a7075171fe090d33b4cf64849af94944c50862995672ac03e0c5dba2940a213ad7f53515a668dac859ce22a0276289ae5cf4f + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + +"supertap@npm:^3.0.1": + version: 3.0.1 + resolution: "supertap@npm:3.0.1" + dependencies: + indent-string: "npm:^5.0.0" + js-yaml: "npm:^3.14.1" + serialize-error: "npm:^7.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/8164674f2e280cab875f0fef5bb36c15553c13e29697ff92f4e0d6bc62149f0303a89eee47535413ed145ea72e14a24d065bab233059d48a499ec5ebb4566b0f + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"svg-element-attributes@npm:^1.3.1": + version: 1.3.1 + resolution: "svg-element-attributes@npm:1.3.1" + checksum: 10c0/6179c528a3559eb447e288acdf3e532c2e46b907c5a40e80711cd689d5cd8c3c960a263966eb5c101718e14ca122720a620e9ed51357e279991ca8a788c45e70 + languageName: node + linkType: hard + +"symbol-observable@npm:^2.0.3": + version: 2.0.3 + resolution: "symbol-observable@npm:2.0.3" + checksum: 10c0/03fb8766b75bfa65a3c7d68ae1e51a13a5ff71b40d6d53b17a0c9c77b1685c20a3bfbf45547ab36214a079665c3f551e250798f6b2f83a2a40762d864ed87f78 + languageName: node + linkType: hard + +"synckit@npm:^0.8.6": + version: 0.8.8 + resolution: "synckit@npm:0.8.8" + dependencies: + "@pkgr/core": "npm:^0.1.0" + tslib: "npm:^2.6.2" + checksum: 10c0/c3d3aa8e284f3f84f2f868b960c9f49239b364e35f6d20825a448449a3e9c8f49fe36cdd5196b30615682f007830d46f2ea354003954c7336723cb821e4b6519 + languageName: node + linkType: hard + +"table@npm:^6.7.1": + version: 6.8.1 + resolution: "table@npm:6.8.1" + dependencies: + ajv: "npm:^8.0.1" + lodash.truncate: "npm:^4.4.2" + slice-ansi: "npm:^4.0.0" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/591ed84b2438b01c9bc02248e2238e21e8bfb73654bc5acca0d469053eb39be3db2f57d600dcf08ac983b6f50f80842c44612c03877567c2afee3aec4a033e5f + languageName: node + linkType: hard + +"tar-fs@npm:^2.0.0": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 10c0/871d26a934bfb7beeae4c4d8a09689f530b565f79bd0cf489823ff0efa3705da01278160da10bb006d1a793fa0425cf316cec029b32a9159eacbeaff4965fb6d + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/02ca064a1a6b4521fef88c07d389ac0936730091f8c02d30ea60d472e0378768e870769ab9e986d87807bfee5654359cf29ff4372746cc65e30cbddc352660d8 + languageName: node + linkType: hard + +"tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"tdigest@npm:^0.1.1": + version: 0.1.2 + resolution: "tdigest@npm:0.1.2" + dependencies: + bintrees: "npm:1.0.2" + checksum: 10c0/10187b8144b112fcdfd3a5e4e9068efa42c990b1e30cd0d4f35ee8f58f16d1b41bc587e668fa7a6f6ca31308961cbd06cd5d4a4ae1dc388335902ae04f7d57df + languageName: node + linkType: hard + +"temp-dir@npm:^2.0.0": + version: 2.0.0 + resolution: "temp-dir@npm:2.0.0" + checksum: 10c0/b1df969e3f3f7903f3426861887ed76ba3b495f63f6d0c8e1ce22588679d9384d336df6064210fda14e640ed422e2a17d5c40d901f60e161c99482d723f4d309 + languageName: node + linkType: hard + +"temp@npm:^0.9.1": + version: 0.9.4 + resolution: "temp@npm:0.9.4" + dependencies: + mkdirp: "npm:^0.5.1" + rimraf: "npm:~2.6.2" + checksum: 10c0/7a1cd75efa65b9ca97fc0dfa752673842d23fa41d9c641a447d86ca986eb7662f0d17771e1edf8d0149e76de3c6e7005faf2ccaa3baf64811c86d1d1a951dda7 + languageName: node + linkType: hard + +"text-hex@npm:1.0.x": + version: 1.0.0 + resolution: "text-hex@npm:1.0.0" + checksum: 10c0/57d8d320d92c79d7c03ffb8339b825bb9637c2cbccf14304309f51d8950015c44464b6fd1b6820a3d4821241c68825634f09f5a2d9d501e84f7c6fd14376860d + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + +"through@npm:^2.3.6": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc + languageName: node + linkType: hard + +"time-zone@npm:^1.0.0": + version: 1.0.0 + resolution: "time-zone@npm:1.0.0" + checksum: 10c0/d00ebd885039109011b6e2423ebbf225160927333c2ade6d833e9cc4676db20759f1f3855fafde00d1bd668c243a6aa68938ce71fe58aab0d514e820d59c1d81 + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: "npm:~1.0.2" + checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 + languageName: node + linkType: hard + +"tmp@npm:^0.2.1": + version: 0.2.1 + resolution: "tmp@npm:0.2.1" + dependencies: + rimraf: "npm:^3.0.0" + checksum: 10c0/67607aa012059c9ce697bee820ee51bc0f39b29a8766def4f92d3f764d67c7cf9205d537d24e0cb1ce9685c40d4c628ead010910118ea18348666b5c46ed9123 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: 10c0/b214d21dbfb4bce3452b6244b336806ffea9c05297148d32ebb428d5c43ce7545bdfc65a1ceb58c9ef4376a65c0cb2854d645f33961658b3e3b4f84910ddcdd7 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"triple-beam@npm:1.3.0": + version: 1.3.0 + resolution: "triple-beam@npm:1.3.0" + checksum: 10c0/a6da96495f25b6c04b3629df5161c7eb84760927943f16665fd8dcd3a643daadf73d69eee78306b4b68d606937f22f8703afe763bc8d3723632ffb1f3a798493 + languageName: node + linkType: hard + +"triple-beam@npm:^1.3.0": + version: 1.4.1 + resolution: "triple-beam@npm:1.4.1" + checksum: 10c0/4bf1db71e14fe3ff1c3adbe3c302f1fdb553b74d7591a37323a7badb32dc8e9c290738996cbb64f8b10dc5a3833645b5d8c26221aaaaa12e50d1251c9aba2fea + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.0.1": + version: 1.2.1 + resolution: "ts-api-utils@npm:1.2.1" + peerDependencies: + typescript: ">=4.2.0" + checksum: 10c0/8ddb493e7ae581d3f57a2e469142feb60b420d4ad8366ab969fe8e36531f8f301f370676b47e8d97f28b5f5fd10d6f2d55f656943a8546ef95e35ce5cf117754 + languageName: node + linkType: hard + +"ts-blank-space@npm:^0.4.1": + version: 0.4.3 + resolution: "ts-blank-space@npm:0.4.3" + dependencies: + typescript: "npm:5.1.6 - 5.6.x" + checksum: 10c0/362feac2e19cf8f1936cefdc658463558e0ef88568fdb7267910c50eb20b27ab2e21b4cf8100890f9ff1568a4e185daa68947c00dd4bfe176d61f554010266e1 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" + dependencies: + "@types/json5": "npm:^0.0.29" + json5: "npm:^1.0.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 + languageName: node + linkType: hard + +"tslib@npm:^1.8.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 + languageName: node + linkType: hard + +"tslib@npm:^2.1.0, tslib@npm:^2.6.2": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 10c0/e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0, tsutils@npm:~3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: "npm:^1.8.1" + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 10c0/02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"type-fest@npm:^0.13.1": + version: 0.13.1 + resolution: "type-fest@npm:0.13.1" + checksum: 10c0/0c0fa07ae53d4e776cf4dac30d25ad799443e9eef9226f9fddbb69242db86b08584084a99885cfa5a9dfe4c063ebdc9aa7b69da348e735baede8d43f1aeae93b + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: "npm:0.3.0" + mime-types: "npm:~2.1.24" + checksum: 10c0/a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-buffer@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/fd4baf00e92aec8adae46253ae5aa4c5a2cc1659acd44abdef8a3212f4bcf4915a6712669f1bbf5503ff36c94f069963f27b1914bdd06e0093f4a9a390d2e1b8 + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-length@npm:1.0.0" + dependencies: + call-bind: "npm:^1.0.2" + for-each: "npm:^0.3.3" + has-proto: "npm:^1.0.1" + is-typed-array: "npm:^1.1.10" + checksum: 10c0/6696435d53ce0e704ff6760c57ccc35138aec5f87859e03eb2a3246336d546feae367952dbc918116f3f0dffbe669734e3cbd8960283c2fa79aac925db50d888 + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-offset@npm:1.0.0" + dependencies: + available-typed-arrays: "npm:^1.0.5" + call-bind: "npm:^1.0.2" + for-each: "npm:^0.3.3" + has-proto: "npm:^1.0.1" + is-typed-array: "npm:^1.1.10" + checksum: 10c0/4036ce007ae9752931bed3dd61e0d6de2a3e5f6a5a85a05f3adb35388d2c0728f9b1a1e638d75579f168e49c289bfb5417f00e96d4ab081f38b647fc854ff7a5 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-length@npm:1.0.4" + dependencies: + call-bind: "npm:^1.0.2" + for-each: "npm:^0.3.3" + is-typed-array: "npm:^1.1.9" + checksum: 10c0/c5163c0103d07fefc8a2ad0fc151f9ca9a1f6422098c00f695d55f9896e4d63614cd62cf8d8a031c6cee5f418e8980a533796597174da4edff075b3d275a7e23 + languageName: node + linkType: hard + +"typescript@npm:5.1.6 - 5.6.x": + version: 5.6.3 + resolution: "typescript@npm:5.6.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 + languageName: node + linkType: hard + +"typescript@npm:~5.1.3": + version: 5.1.6 + resolution: "typescript@npm:5.1.6" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/45ac28e2df8365fd28dac42f5d62edfe69a7203d5ec646732cadc04065331f34f9078f81f150fde42ed9754eed6fa3b06a8f3523c40b821e557b727f1992e025 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.1.6 - 5.6.x#optional!builtin": + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/7c9d2e07c81226d60435939618c91ec2ff0b75fbfa106eec3430f0fcf93a584bc6c73176676f532d78c3594fe28a54b36eb40b3d75593071a7ec91301533ace7 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A~5.1.3#optional!builtin": + version: 5.1.6 + resolution: "typescript@patch:typescript@npm%3A5.1.6#optional!builtin::version=5.1.6&hash=5da071" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/c2bded58ab897a8341fdbb0c1d92ea2362f498cfffebdc8a529d03e15ea2454142dfbf122dabbd9a5cb79b7123790d27def16e11844887d20636226773ed329a + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + has-bigints: "npm:^1.0.2" + has-symbols: "npm:^1.0.3" + which-boxed-primitive: "npm:^1.0.2" + checksum: 10c0/81ca2e81134167cc8f75fa79fbcc8a94379d6c61de67090986a2273850989dd3bae8440c163121b77434b68263e34787a675cbdcb34bb2f764c6b9c843a11b66 + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 + languageName: node + linkType: hard + +"unique-filename@npm:^2.0.0": + version: 2.0.1 + resolution: "unique-filename@npm:2.0.1" + dependencies: + unique-slug: "npm:^3.0.0" + checksum: 10c0/55d95cd670c4a86117ebc34d394936d712d43b56db6bc511f9ca00f666373818bf9f075fb0ab76bcbfaf134592ef26bb75aad20786c1ff1ceba4457eaba90fb8 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-slug@npm:3.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/617240eb921af803b47d322d75a71a363dacf2e56c29ae5d1404fad85f64f4ec81ef10ee4fd79215d0202cbe1e5a653edb0558d59c9c81d3bd538c2d58e4c026 + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" + dependencies: + escalade: "npm:^3.1.1" + picocolors: "npm:^1.0.0" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/e52b8b521c78ce1e0c775f356cd16a9c22c70d25f3e01180839c407a5dc787fb05a13f67560cbaf316770d26fa99f78f1acd711b1b54a4f35d4820d4ea7136e6 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: 10c0/02ba649de1b7ca8854bfe20a82f1dfbdda3fb57a22ab4a8972a63a34553cf7aa51bc9081cf7e001b035b88186d23689d69e71b510e610a09a4c66f68aa95b672 + languageName: node + linkType: hard + +"vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: 10c0/f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f + languageName: node + linkType: hard + +"wbasenodejscpp@npm:latest": + version: 0.3.134 + resolution: "wbasenodejscpp@npm:0.3.134" + checksum: 10c0/d700f9b1e07d99cf55785bf182ca0bad2bbd91d4775b2b922e82e46a6e4bc80be627d2ec891c2cd34099238a493c4c22d97b9ed07870c94d8b55cef2e66cdac2 + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: "npm:^1.0.3" + checksum: 10c0/5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"well-known-symbols@npm:^2.0.0": + version: 2.0.0 + resolution: "well-known-symbols@npm:2.0.0" + checksum: 10c0/cb6c12e98877e8952ec28d13ae6f4fdb54ae1cb49b16a728720276dadd76c930e6cb0e174af3a4620054dd2752546f842540122920c6e31410208abd4958ee6b + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: "npm:^1.0.1" + is-boolean-object: "npm:^1.1.0" + is-number-object: "npm:^1.0.4" + is-string: "npm:^1.0.5" + is-symbol: "npm:^1.0.3" + checksum: 10c0/0a62a03c00c91dd4fb1035b2f0733c341d805753b027eebd3a304b9cb70e8ce33e25317add2fe9b5fea6f53a175c0633ae701ff812e604410ddd049777cd435e + languageName: node + linkType: hard + +"which-builtin-type@npm:^1.1.3": + version: 1.1.3 + resolution: "which-builtin-type@npm:1.1.3" + dependencies: + function.prototype.name: "npm:^1.1.5" + has-tostringtag: "npm:^1.0.0" + is-async-function: "npm:^2.0.0" + is-date-object: "npm:^1.0.5" + is-finalizationregistry: "npm:^1.0.2" + is-generator-function: "npm:^1.0.10" + is-regex: "npm:^1.1.4" + is-weakref: "npm:^1.0.2" + isarray: "npm:^2.0.5" + which-boxed-primitive: "npm:^1.0.2" + which-collection: "npm:^1.0.1" + which-typed-array: "npm:^1.1.9" + checksum: 10c0/2b7b234df3443b52f4fbd2b65b731804de8d30bcc4210ec84107ef377a81923cea7f2763b7fb78b394175cea59118bf3c41b9ffd2d643cb1d748ef93b33b6bd4 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.1": + version: 1.0.1 + resolution: "which-collection@npm:1.0.1" + dependencies: + is-map: "npm:^2.0.1" + is-set: "npm:^2.0.1" + is-weakmap: "npm:^2.0.1" + is-weakset: "npm:^2.0.1" + checksum: 10c0/249f913e1758ed2f06f00706007d87dc22090a80591a56917376e70ecf8fc9ab6c41d98e1c87208bb9648676f65d4b09c0e4d23c56c7afb0f0a73a27d701df5d + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.9": + version: 1.1.14 + resolution: "which-typed-array@npm:1.1.14" + dependencies: + available-typed-arrays: "npm:^1.0.6" + call-bind: "npm:^1.0.5" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.1" + checksum: 10c0/0960f1e77807058819451b98c51d4cd72031593e8de990b24bd3fc22e176f5eee22921d68d852297c786aec117689f0423ed20aa4fde7ce2704d680677891f56 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: "npm:^1.0.2 || 2 || 3 || 4" + checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 + languageName: node + linkType: hard + +"winston-transport@npm:^4.4.0": + version: 4.7.0 + resolution: "winston-transport@npm:4.7.0" + dependencies: + logform: "npm:^2.3.2" + readable-stream: "npm:^3.6.0" + triple-beam: "npm:^1.3.0" + checksum: 10c0/cd16f3d0ab56697f93c4899e0eb5f89690f291bb6cf309194819789326a7c7ed943ef00f0b2fab513b114d371314368bde1a7ae6252ad1516181a79f90199cd2 + languageName: node + linkType: hard + +"winston@npm:3.3.3": + version: 3.3.3 + resolution: "winston@npm:3.3.3" + dependencies: + "@dabh/diagnostics": "npm:^2.0.2" + async: "npm:^3.1.0" + is-stream: "npm:^2.0.0" + logform: "npm:^2.2.0" + one-time: "npm:^1.0.0" + readable-stream: "npm:^3.4.0" + stack-trace: "npm:0.0.x" + triple-beam: "npm:^1.3.0" + winston-transport: "npm:^4.4.0" + checksum: 10c0/18205fa1e3ebb88dc910fbe5337e3c9d2dbd94310978adca5ab77444b854d5679dec0a70fed425e77cf93e237390c7670bb937f14c492b8415e594ab21540d3d + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.0.1": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.1": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^3.0.7" + checksum: 10c0/a2c282c95ef5d8e1c27b335ae897b5eca00e85590d92a3fd69a437919b7b93ff36a69ea04145da55829d2164e724bc62202cdb5f4b208b425aba0807889375c7 + languageName: node + linkType: hard + +"ws@npm:^7, ws@npm:^7.2.0": + version: 7.5.9 + resolution: "ws@npm:7.5.9" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/aec4ef4eb65821a7dde7b44790f8699cfafb7978c9b080f6d7a98a7f8fc0ce674c027073a78574c94786ba7112cc90fa2cc94fc224ceba4d4b1030cff9662494 + languageName: node + linkType: hard + +"xstream@npm:^11.14.0": + version: 11.14.0 + resolution: "xstream@npm:11.14.0" + dependencies: + globalthis: "npm:^1.0.1" + symbol-observable: "npm:^2.0.3" + checksum: 10c0/7a28baedc64385dc17597d04c7130ec3135db298e66d6dcf33821eb1953d5ad1b83c5fa08f1ce4d36e75fd219f2e9ef81ee0721aa8d4ccf619acc1760ba37f71 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yaml@npm:^2.2.2": + version: 2.3.4 + resolution: "yaml@npm:2.3.4" + checksum: 10c0/cf03b68f8fef5e8516b0f0b54edaf2459f1648317fc6210391cf606d247e678b449382f4bd01f77392538429e306c7cba8ff46ff6b37cac4de9a76aff33bd9e1 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^17.5.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 10c0/856117aa15cf5103d2a2fb173f0ab4acb12b4b4d0ed3ab249fdbbf612e55d1cadfd27a6110940e24746fb0a78cf640b522cc8bca76f30a3b00b66e90cf82abe0 + languageName: node + linkType: hard diff --git a/package.json b/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/package.json @@ -0,0 +1 @@ +{} diff --git a/yarn.lock b/yarn.lock index fb57ccd13..11cbfd157 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,4 +1,12 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! +__metadata: + version: 8 + cacheKey: 10c0 +"root-workspace-0b6124@workspace:.": + version: 0.0.0-use.local + resolution: "root-workspace-0b6124@workspace:." + languageName: unknown + linkType: soft